我有一个树木生长数据库,其中包含每棵树和每年(每年 6 棵不同的树,10 年,60 棵树)的每个 DOY(一年中的一天)的每个生长阶段(扩大、变厚、成熟)的细胞数量总共)。如您所见,我们每 1-2 周去现场采集一次样本。数据库看起来像这样(简化):
print(xylo)
Year Tree DOY Enlarging Thickening Mature
2012 25 80 0 0 0
2012 25 87 1 0 0
2012 25 94 4 0 0
2012 25 103 5 1 0
2012 25 111 3 3 0
2012 25 119 1 4 1
2012 25 127 1 5 3
2012 25 139 0 3 5
2012 30 80 0 0 0
2012 30 87 2 0 0
2012 30 94 5 1 0
2012 30 103 7 3 1
2012 30 111 4 6 2
2012 30 119 3 7 5
2012 30 127 1 8 7
2012 30 139 1 4 8
2012 43 80 0 0 0
2012 43 87 0 0 0
2012 43 94 2 0 0
etc.
我想应用 GAM 函数来预测每年每棵树的每个生长阶段何时开始和结束,并了解每个阶段的生长曲线和模式。 首先,为了构建模型,我只在每个生长阶段的细胞数(增大、增厚、成熟)和一年中的第几天(DOY,来自我的数据库)之间使用一个简单的 GAM:
enlarging <- gam(Enlarging ~ s(DOY), data=xylo, quasipoisson, gamma=1,
min.sp=0.01)
thickening <- gam(Thickening ~ s(DOY), data=xylo, quasipoisson, gamma=1,
min.sp=0.01)
mature <- gam(Mature ~ s(DOY), data=xylo, quasipoisson, gamma=1,
min.sp=0.01)
现在,我想预测一年中的每一天
(从一年中的第一天我去田间采集样本直到最后一个)使用GAM在每个生长阶段的细胞数量上一步建立的模型。为此,我创建了一个名为 DOY 的每日序列,从我们采样的第一天开始到我们采样的最后一天结束。
DOY <- seq(min(xylo$DOY), max(xylo$DOY), 1)
我的计划是使用我在上面创建的模型和序列来应用predict
函数:
enlarging_gam <- as.vector(predict(enlarging, data.frame(DOY),
type="response"))
thickening_gam <- as.vector(predict(thickening, data.frame(DOY),
type="response"))
mature_gam <- as.vector(predict(mature, data.frame(DOY), type="response"))
fit <- data.frame(cbind(DOY = DOY, enlarging_gam = enlarging_gam,
thickening_gam = thickening_gam, mature_gam = mature_gam))
最后,我想创建一个简单的自定义函数,将此预测应用于我数据库中每年的每棵树。可以这样做吗?我尝试过不同的事情,但我一直无法做到。我只想使用 GAM 模型来预测每年每棵树每个生长阶段的每日细胞数量。有人可以帮忙吗?