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)
4

1 回答 1

2

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

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

于 2013-07-04T00:37:05.560 回答