来自gamm模型错误的随机效应预测:无法在'newdata'上评估所需级别的组

时间:2016-04-03 21:57:29

标签: r nlme gam mgcv

我正在尝试使用C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64\Lib.exe /OUT:"C:\Agent\_work\1\s\MyProj\MyProject1\bin\Release\x64\MyProject1.lib" /NOLOGO /LTCG C:\Agent\_work\1\s\MyProj\MyProject1\obj\Release\x64\test.obj 参数从gamm模型(来自mgcv包)生成预测。我想在模型的newdata部分进行预测,以便预测包括随机效应。然而,我认为,由于模型系数的命名方式,我遇到了问题。

我的问题是,如何构造/命名lme参数以允许预测。感谢。

Mwe

newdata

产生错误

  

predict.lme中的错误(mod $ lme,newdata = d):     无法在'newdata'上评估所需级别的组

如果我在mod <- gamm(outcome ~ s(time) + predvar, data=d, random=list(groupvar=~1), correlation = corARMA(form=~1|groupvar, p = 1)) # okay pred <- predict(mod$lme) # Not okay pred <- predict(mod$lme, newdata=d) 中使用没有样条线项的模型运行模型,nlme执行时没有问题

newdata
mod2 <- lme(outcome ~ time + predvar, data=d, 
                        random=list(groupvar=~1), 
                        correlation = corARMA(form=~1|groupvar, p = 1))     
# okay
pred2 <- predict(mod2, newdata=d)

info:我没有将随机效果指定为样条线(s(。,bs =“re”)),因为我的RE比上面的例子更复杂。

1 个答案:

答案 0 :(得分:1)

对新数据进行预测的一种方法是,如果需要随机效果,则在模型的gam部分进行预测,并添加随机效果。

使用上面的例子,

library(mgcv)

mod <- gamm(outcome ~ s(time) + predvar, data=d, 
                        random=list(groupvar=~1), 
                        correlation = corARMA(form=~1|groupvar, p = 1))     
# For comparison: predict with RE: we cant use the newdata arg here
pred <- predict(mod$lme)

# Extract the random effects from the model and match with the relevant observation
re <- coef(mod$lme)[ncol(coef(mod$lme))]
pred_ref <- re[[1]][match(d$groupvar,   gsub(".*/", "", rownames(re)) )]

# Predict on gam part of model and adjust for RE
pred2 <- as.vector(predict(mod$gam, data=d) - pred_ref)

# Compare
all.equal(pred, pred2, check.attributes = F, use.names = F)