寻找R中可生成指定对比表的lm()模型比较函数
有没有现成的R函数可以生成指定格式的线性模型对比表?
有现成的工具可以直接生成你需要的这类整合了AIC、BIC、logLik以及相邻模型似然比检验结果的对比表,无需手动拼接多个输出结果。
推荐方案:用performance包一键生成
performance包的compare_performance()函数专门用于模型对比,支持直接传入多个lm()模型,输出的表格结构和你期望的高度匹配:
# 安装并加载包 install.packages("performance") library(performance) # 加载数据并创建模型(复用你的代码) dat <- read.csv2("https://raw.githubusercontent.com/saquicela/mineria/main/vapor_data.csv",sep=";",dec = ".", stringsAsFactors = TRUE) model1 <- lm(y ~ x1 + x2 + x3 + x4, data = dat) model2 <- lm(y ~ poly(x1,2) + x2 + poly(x3,2) + x4, data = dat) model3 <- lm(y ~ x2 + x3 + x4, data = dat) model4 <- lm(y ~ x1 + x2 + x4 , data = dat) # 生成对比表,指定需要的统计量 comp_table <- compare_performance( model1, model2, model3, model4, include = c("AIC", "BIC", "logLik", "LR") ) # 格式化输出,匹配你的小数位数要求 print(comp_table, digits = 2)
这个函数会自动输出包含模型名称、自由度(df)、AIC、BIC、logLik,以及相邻模型的似然比检验(L.ratio)和p值的表格,和你提供的目标格式几乎一致。
补充:基于你现有代码的简化方式
如果你更习惯用lmtest包,也可以用broom包的工具简化手动拼接步骤,避免处理NA值和列名的繁琐工作:
library(lmtest) library(broom) # 获取似然比检验结果 lr_result <- lrtest(model1, model2, model3, model4) # 提取每个模型的核心统计量 model_stats <- lapply(list(model1, model2, model3, model4), glance) model_stats <- do.call(rbind, model_stats) model_stats$Models <- rownames(model_stats) # 整合结果并格式化 final_table <- cbind( model_stats[, c("Models", "df", "AIC", "BIC", "logLik")], Test = c("", "1 vs. 2", "2 vs. 3", "3 vs. 4"), L.ratio = c("", round(lr_result$Chisq[-1], 2)), p.value = c("", round(lr_result$`Pr(>Chisq)`[-1], 4)) ) final_table[is.na(final_table)] <- ""
你自己手动实现的代码是完全正确的,上述现成函数的作用是减少重复的手动整合工作,提升效率。
内容的提问来源于stack exchange,提问作者Rodrigo Saquicela
相关产品推荐
相关产品推荐

