You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻找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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 20:25:17