【发布时间】:2018-02-09 23:33:57
【问题描述】:
我对同一个数据集有 10 个不同的模型,我想比较所有模型的 AIC 和 BIC。
我想用模型名称创建一个称为模型的字符向量:
modelsnames = c("model1", "model2",...,"model10")
然后,我想通过以下方式计算这两个统计数据:
for ( i in 1:length(models)){
Akaike[i] = AIC(models[i],k = 2)
BIC[i] = BIC(models[i])
}
但我得到这个错误:
UseMethod("logLik") 中的错误: 没有适用于“字符”类对象的“logLik”方法
很明显(或者至少看起来如此)我不能使用字符作为参数来调用 AIC 或 BIC。
如何有效地计算模型的 AIC 和 BIC 并将答案存储到一个数组中? 10个模型,复制粘贴,小改动很快就可以搞定,但是一旦模型数量增加,就变得相当麻烦了。
我们将不胜感激。
Obs.:我还尝试创建一个有 10 个位置的数组,其中每个位置都将链接到我的一个模型,但我也做不到。这就是我手动创建矢量模型名称的原因。
【问题讨论】:
-
最好将每个模型存储在一个列表中,这样您就可以遍历它们并轻松应用 AIC 等函数
-
如果您的模型在列表中,您可以使用
lapply(mod_list, AIC) -
感谢 user20650 和 Gregor。我将研究将模型存储到列表中。听起来确实更有效率;特别是当我可以在其上应用“应用功能”时。
-
@MasonBeau ;举个简单的例子:运行模型
lst <- lapply(c("wt", "disp"), function(x) lm(mpg ~ ., data=mtcars[c("mpg", x)]))。然后在列表中应用函数sapply(lst, BIC)