【发布时间】:2020-02-10 07:42:48
【问题描述】:
我正在尝试轻松测试一大堆不同的模型并比较 AIC / R-sq 值以选择正确的模型。我在保存列表和数据框之间的内容时遇到了一些麻烦。
我要建模的数据框:
set.seed(1)
df <- data.frame(response=runif(50,min=50,max=100),
var1 = sample(1:20,50,replace=T),
var2 = sample(40:60,50,replace = T))
要测试的公式列表:
formulas <- list( response ~ NULL,
response ~ var1,
response ~ var2,
response ~ var1 + var2,
response ~ var1 * var2)
所以,我想做的是创建一个循环,对所有这些公式进行建模,将公式、AIC 和 R-sq 值提取到表格中,然后让我对其进行排序以找到最佳的。我遇到的问题是我无法将公式名称提取为"Response ~ var1",相反,如果我尝试提取为字符对象,它会一直显示为"Response" "~" "var1"。或者,如果我提取为一个列表(如下所示),那么它会像这样:
[[1]]
response ~ NULL
[[2]]
[1] 415.89
[[3]]
[1] 0
而且我不能轻易地将这些列表元素插入数据框。这是我尝试过的:
selection <- matrix(ncol=3)
colnames(selection) <- c("formula","AIC","R2") # create a df to store results in
for ( i in 1:length(formulas)){
mod <- lm( formula = formulas[[i]], data= df)
mod_vals <- c(extract(formulas[[i]]),
round(AIC(mod),2),
round(summary(mod)$adj.r.squared,2)
)
selection[i,] <- mod_vals[]
}
有什么想法吗?我也不必将其保留为 for 循环,我只是想要一种方法来一起测试一长串模型。
谢谢。
【问题讨论】:
-
这能回答你的问题吗? How to convert R formula to text?
标签: r dataframe modeling glm lme4