模拟Gompertz曲线的数据

时间:2017-06-06 03:34:34

标签: r

我收集了一组数据,其中包含一个时间序列,其中每个y值是通过取30个葡萄簇重量样本的平均值得到的。

增长遵循具有公式y = a*exp(-exp(-(x-x0)/b))的Gompertz曲线,其中

  • a = 88.8
  • b = 11.7
  • x0 = 15.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).
  • x指水果集的天数(即0表示时间序列开始时)
  • x值对应于测量的天数(取决于葡萄的某些生长阶段)

我希望用相同数量的x和y值来模拟更多数据,这样我就可以进行一些贝叶斯分析来找到数据的后验分布。

实际上我需要的是:

  • 模拟遵循Gompertz曲线的数据以创建后验分布。这些数据在技术上适用于前几年的数据。时间序列数据。
  • 构建和测试基于分布的预测时间序列模型的拟合

如果有一些骨架代码可以在参数周围进行更改,那么这对我来说也可能非常有帮助。

由于

1 个答案:

答案 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()

enter image description here

这看起来不太适合。但是,可以通过添加误差项来完成如上矢量中的固定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()

enter image description here