根据 AIC 值对模型列表进行排名

Posted

技术标签:

【中文标题】根据 AIC 值对模型列表进行排名【英文标题】:Rank a list of models based on AIC values 【发布时间】:2015-09-24 17:54:35 【问题描述】:

在跨数据框的一个响应变量和多个解释变量之间应用模型后,我想按 AIC 分数对每个模型进行排名。 我遇到了一个非常相似的问题,它正是我想做的。 Using lapply on a list of models,但它似乎对我不起作用,我不知道为什么。以下是使用 mtcars 数据集的示例:

lm_multiple <- lapply(mtcars[,-1], function(x) summary(lm(mtcars$mpg ~ x)))

建议的上述链接中的批准答案:

sapply(X = lm_multiple, FUN = AIC)

但这对我不起作用,我收到此警告消息。

使用方法中的错误(“logLik”): 没有适用于“summary.lm”类对象的“logLik”方法

这是原始问题的答案...

x <- seq(1:10)
y <- sin(x)^2
model.list <- list(model1 = lm(y ~ x), 
               model2 = lm(y ~ x + I(x^2) + I(x^3)))
sapply(X = model.list, FUN = AIC)

【问题讨论】:

这个练习是徒劳的。 AIC 对于比较适合同一数据集的嵌套模型很有用。您的模型没有嵌套。 @Roland 感谢您的评论,有什么替代方案? p 值?在我的数据集中,我有大量 (>100) 解释变量 我不知道你为什么要这样做。您可能应该在 stats.stackexchange.com 上询问。 stats.stackexchange.com/questions/160294/… 谢谢,其实我刚放完,这里可能更清楚。 【参考方案1】:

你应该像这样删除summary

lm_multiple <- lapply(mtcars[,-1], function(x) lm(mtcars$mpg ~ x))
sapply(X = lm_multiple, FUN = AIC)

【讨论】:

以上是关于根据 AIC 值对模型列表进行排名的主要内容,如果未能解决你的问题,请参考以下文章

根据列值对行进行排名/计数

非常困惑......在 Django 中使用“注释”的问题

具有多个标准排名的 Excel VBA 动态数据验证下拉列表

根据行和列对矩阵中的所有元素进行排名

根据 MySQL 数据库中的点数获取用户排名

根据 AIC 和 BIC,最好的模型只包含一个不重要的项