对存储在列表中的一系列模型进行方差分析
anova on a sequence of models stored in a list
我正在 运行创建一系列模型并将它们存储在 list
:
fm0 <- list()
for(i in 1:3){
m <- formula(mpg ~ disp)
if(i > 1)
m <- update.formula(m, ~ . + gear)
if(i > 2)
m <- update.formula(m, ~ . + qsec)
fm1 <- lm(m, data = mtcars)
fm0[[i]] <- fm1
names(fm0)[i] <- paste0("m",i)
}
我想运行anova
上这样的模型序列:
anova(fm0$m1, fm0$m2, fm0$m3)
# Analysis of Variance Table
#
# Model 1: mpg ~ disp
# Model 2: mpg ~ disp + gear
# Model 3: mpg ~ disp + gear + qsec
# Res.Df RSS Df Sum of Sq F Pr(>F)
# 1 30 317.16
# 2 29 317.01 1 0.1443 0.0130 0.9099
# 3 28 309.83 1 7.1839 0.6492 0.4272
但我想要一些通用的东西,因为模型的数量在变化(取决于数据,它是在另一个循环中设置的,其中上面的循环坐)。
我试过 lapply(fm0, anova)
,但它 运行 对每个模型都是 anova
,这不是我想要的。
这是一个绝对不雅的解决方案:
eval(parse(text=paste("anova(",paste("fm0[[",1:length(fm0),"]]",sep="",collapse=","),")")))
我正在 运行创建一系列模型并将它们存储在 list
:
fm0 <- list()
for(i in 1:3){
m <- formula(mpg ~ disp)
if(i > 1)
m <- update.formula(m, ~ . + gear)
if(i > 2)
m <- update.formula(m, ~ . + qsec)
fm1 <- lm(m, data = mtcars)
fm0[[i]] <- fm1
names(fm0)[i] <- paste0("m",i)
}
我想运行anova
上这样的模型序列:
anova(fm0$m1, fm0$m2, fm0$m3)
# Analysis of Variance Table
#
# Model 1: mpg ~ disp
# Model 2: mpg ~ disp + gear
# Model 3: mpg ~ disp + gear + qsec
# Res.Df RSS Df Sum of Sq F Pr(>F)
# 1 30 317.16
# 2 29 317.01 1 0.1443 0.0130 0.9099
# 3 28 309.83 1 7.1839 0.6492 0.4272
但我想要一些通用的东西,因为模型的数量在变化(取决于数据,它是在另一个循环中设置的,其中上面的循环坐)。
我试过 lapply(fm0, anova)
,但它 运行 对每个模型都是 anova
,这不是我想要的。
这是一个绝对不雅的解决方案:
eval(parse(text=paste("anova(",paste("fm0[[",1:length(fm0),"]]",sep="",collapse=","),")")))