我正在尝试在 R 中编写一个 for 循环(我的第一个!),以便生成和保存使用包 lme4 中的函数 lmer 拟合的几个混合效应模型的诊断图。这是我迄今为止所做的 sleep 研究数据的示例:
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 控制台中输入内容时收到以下错误消息:
Error in function (formula, data = NULL, subset = NULL, na.action = na.fail, :
invalid type (NULL) for variable 'resid(list[i])'
我感觉问题与我创建的模型列表有关,而不是 for 循环本身,我认为它可能与 S4 类的模型对象有关。是否可以列一个这样的 list ? 我也尝试过制作如下所示的列表,没有任何改进(仍然收到相同的错误消息)
List<-list(mod1,mod2)
最佳答案
首先使用c
可能会面临丢失已创建对象的类结构的风险。要创建包含模型的列表,请使用 list(mod1, mod2)
。
其次,List[i]
是一个长度为1的列表,包含List
的第i个元素。使用 List[[i]]
提取元素本身(您的模型)。
关于r - 如何创建在 R 的 for 循环中使用的 lmer 模型对象列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15027850/