我收集了一组数据,其中包含一个时间序列,其中每个y值是通过取30个葡萄簇重量样本的平均值得到的。
增长遵循具有公式y = a*exp(-exp(-(x-x0)/b))
的Gompertz曲线,其中
数据:
x = c(0, 28, 36, 42, 50, 58, 63, 71, 79, 85, 92, 99, 106, 112)
y = c(0, 15, 35, 55, 62, 74, 80, 96, 127, 120, 146, 160, 177, 165).
我希望用相同数量的x和y值来模拟更多数据,这样我就可以进行一些贝叶斯分析来找到数据的后验分布。
实际上我需要的是:
如果有一些骨架代码可以在参数周围进行更改,那么这对我来说也可能非常有帮助。
由于
答案 0 :(得分:1)
让我们检查您的数据
x <- c(0, 28, 36, 42, 50, 58, 63, 71, 79, 85, 92, 99, 106, 112)
y <- c(0, 15, 35, 55, 62, 74, 80, 96, 127, 120, 146, 160, 177, 165)
并拟合Gompertz曲线
gFun <- function(x){
a <- 88.8
b <- 11.7
x0 <- 15.1
est <- a*exp(-exp(-(x-x0)/b))
return(est)
}
通过可视化:
library(ggplot2)
ggplot(ggData, aes(x=x, y=y) ) +
geom_point() +
stat_function(fun=gFun, colour="blue") +
theme_bw()
这看起来不太适合。但是,可以通过添加误差项来完成如上矢量中的固定x处的数据y | x的模拟。我使用sd = 4的正态分布进行说明。
nSim <- 10
simData <- data.frame(x=c(0, rep(x[-1], each=nSim)) ) # x[-1] removes 0 from simulation
simData$y <- gFun(simData$x) + rnorm(n=nrow(simData), sd=4)
ggplot(simData, aes(x=x, y=y) ) +
geom_point(alpha=0.4) +
stat_function(fun=gFun, colour="blue") +
scale_x_continuous(limits=c(0, max(x)) ) +
theme_bw()