如何聚合rms::ols()多模型汇总结果并保留截距估计值
基于
rms::ols分组拟合并保留截距的汇总方法 1. 让模型汇总显示截距
rms::ols的默认汇总输出会隐藏截距项,这是因为summary.rms函数的intercept参数默认值为FALSE。只需调用summary时显式设置intercept = TRUE,就能看到截距的估计值:
foo %>% {map(.$model, ~ summary(.x, intercept = TRUE))}
2. 聚合所有模型的系数结果到统一数据框
如果需要把各分组模型的系数(含截距)、标准误、p值等信息整理成结构化的数据框,有两种简便方法:
方法一:用broom包快速提取(推荐)
broom包的tidy()函数对rms模型支持良好,默认会包含截距项,还能一键生成置信区间:
library(broom) library(tidyr) foo %>% mutate(coef_details = map(model, ~ tidy(.x, conf.int = TRUE))) %>% unnest(coef_details) %>% select(cyl, term, estimate, std.error, p.value, conf.low, conf.high)
方法二:手动提取模型系数矩阵
如果不想依赖额外包,可以直接从ols模型对象中提取含截距的汇总表,再整理成数据框:
library(tibble) library(tidyr) foo %>% mutate(coef_table = map(model, ~ { # 获取含截距的系数汇总 sum_result <- summary(.x, intercept = TRUE)$coef # 转换为数据框并添加变量名 as.data.frame(sum_result) %>% rownames_to_column("term") })) %>% unnest(coef_table) %>% select(cyl, term, Estimate, SE, `t value`, `Pr(>|t|)`)
以上两种方法均基于rms::ols完成模型拟合,既能保留截距估计值,也能实现多模型结果的结构化聚合。
内容的提问来源于stack exchange,提问作者bison2178
相关产品推荐
相关产品推荐

