模型预测:如何跨越时间操纵虚拟变量?

时间:2018-04-19 15:04:10

标签: r prediction predict gam mgcv

我试图预测一年内的昆虫种群。我已经构建了我的模型(GAM,使用包mgcv)。然后我在构建了一个虚拟数据集来构建这个预测之后使用了predict()函数 - 这就是我在努力奋斗的地方。

我的问题是如何构建一个可以模拟的新虚拟数据集,比如寒冷的冬天和温暖的冬天?我只有一个温度"参数,我不知道如何通过时间(或季节)来操纵它。理想情况下,我想创造一个寒冷的冬天,夏季温度平均,夏季温暖,冬季温暖。任何建议将不胜感激!

很快,我在模型中的平滑参数是:平均温度,湿度和一年中的一天(doy)。我在模型中也有三个随机效果参数。我的模型,预测和生成的图表如下。

 m1 <- gam(total ~ s(temp.avg) + s(humid) + s(doy, bs="cc", k=5) + 
                s(trap, bs="re")+s(site, bs="re")+s(year, bs="re"), 
                family=nb(),gamma=1.4,method="REML",data=dfe)
    N <- 200
    M <- 365
    pdat1 <- with(dfe, expand.grid(year = c("2013","2014","2015","2016","2017"),
                                  humid = mean(humid, na.rm = TRUE),
                                  temp.avg = mean(temp.avg, na.rm = TRUE),
                                  doy = seq(min(doy), max(doy), length = M),
                                  trap = c("a","b","c","d"),
                                  site = c("A","B", "C", "D")))

pred1 <- predict(m1, newdata = pdat1, type = "response", se.fit=TRUE)
crit <- qt(0.975, df = df.residual(m1)) # ~95% interval critical t
pdat1 <- transform(pdat1, fitted = pred1$fit, se = pred1$se.fit)
pdat1 <- transform(pdat1,
                  upper = fitted + (crit * se),
                  lower = fitted - (crit * se))
ggplot(pdat1, aes(x = doy, y = fitted)) +
  geom_line() + theme_classic()+
  labs(y = "Predicted Population", x = "Day of Year") +
  theme(legend.position = "top")

enter image description here

0 个答案:

没有答案