首页 文章

如何列出在R中的for循环中使用的lmer模型对象?

提问于
浏览
2

我正在尝试在R中编写一个for循环(我的第一个!),以便生成并保存使用lme4包中的函数lmer安装的几个混合效果模型的诊断图 . 这就是我到目前为止用sleepstudy数据做的例子:

require(lme4)

mod1<-lmer(Reaction ~ Days + (1|Subject),sleepstudy)
mod2<-lmer(Reaction ~ 1 + (1|Subject),sleepstudy)

List<-c(mod1,mod2)
names<-c("mod1","mod2")

i=1

for (i in 1:length(List)) {
  jpeg(file = paste("modelval_", names[i], ".jpg", sep=""))
  par(mfrow=c(2,2))
  plot(resid(List[i]) ~ fitted(List[i]),main="residual plot")
  abline(h=0)
  qqnorm(resid(List[i]), main="Q-Q plot of residuals")
  qqnorm(ranef(List[i])$Subject$"(Intercept)", main="Q-Q plot of random effect" )
  dev.off()
}

输入R consol时收到以下错误消息:

Error in function (formula, data = NULL, subset = NULL, na.action = na.fail,  : 
invalid type (NULL) for variable 'resid(list[i])'

我有一种感觉,问题与我创建的模型列表有关,而不是for循环本身,我认为它可能与类S4的模型对象有关 . 是否可以制作这样的清单?我也试过制作如下所示的列表,没有任何改进(仍然得到相同的错误消息)

List<-list(mod1,mod2)

1 回答

  • 2

    首先使用 c 可能会丢失您创建的对象的类结构 . 要制作包含模型的列表,请使用 list(mod1, mod2) .

    其次, List[i] 是长度为1的列表,其中包含 List 的第i个元素 . 使用 List[[i]] 提取元素本身(您的模型) .

相关问题