如何用{modelsummary}自定义统计表格列名并拆分Estimate/95%CI/p值列
问题描述
我希望为统计量和估计值自定义列标题为"Estimate"、"95% CI"和"p value",并将这三个元素设为独立列以方便内容对齐。请问使用{modelsummary}能否实现该需求?需要同时适配LaTeX和HTML格式的优化表格。
现有R代码:
library(modelsummary) m1 <- lm(mpg ~ cyl + disp, mtcars) m2 <- lm(wt ~ cyl + disp, mtcars) msummary(list("M1" = m1, "M2" = m2), shape = term ~ model + statistic, statistic = "{p.value}", estimate = "{estimate} [{conf.low}; {conf.high}]")
当前生成的表格(简化展示):
| M1 / Est. | M1 / p | M2 / Est. | M2 / p | |
|---|---|---|---|---|
| (Intercept) | 34.661 [29.452; 39.870] | <0.001 | 1.773 [0.983; 2.563] | <0.001 |
| cyl | -1.587 [-3.043; -0.131] | 0.034 | -0.054 [-0.275; 0.166] | 0.618 |
| ... | ... | ... | ... | ... |
期望生成的表格样式(简化展示):
| M1 / Estimate | M1 / 95% CI | M1 / p value | M2 / Estimate | M2 / 95% CI | M2 / p value | |
|---|---|---|---|---|---|---|
| (Intercept) | 34.661 | [29.452; 39.870] | <0.001 | 1.773 | [0.983; 2.563] | <0.001 |
| cyl | -1.587 | [-3.043; -0.131] | 0.034 | -0.054 | [-0.275; 0.166] | 0.618 |
解决方案
当然可以,{modelsummary}完全支持这种自定义列结构的需求,只需调整statistic参数并配合相关设置,就能生成符合要求的表格,且天然适配LaTeX和HTML格式。
修改后的代码如下:
library(modelsummary) m1 <- lm(mpg ~ cyl + disp, mtcars) m2 <- lm(wt ~ cyl + disp, mtcars) msummary( list("M1" = m1, "M2" = m2), shape = term ~ model + statistic, # 定义三个独立统计量列,命名对应自定义标题 statistic = c( "Estimate" = "{estimate}", "95% CI" = "[{conf.low}; {conf.high}]", "p value" = "{p.value}" ), # 关闭默认估计值列,避免重复 estimate = NULL )
关键参数说明
statistic:传入命名向量,每个元素对应一列,名称就是列标题的后缀(与模型名组合为模型名 / 统计量标签),值为格式字符串,分别提取估计值、置信区间和p值。estimate = NULL:禁用默认的估计值列,因为我们已经将估计值作为独立统计量列定义。shape = term ~ model + statistic:保持行是变量、列是「模型+统计量」的结构,确保每个模型对应三列目标内容。- 输出格式:modelsummary会自动根据运行环境输出HTML(如RStudio)或LaTeX(如RMarkdown的LaTeX文档),也可通过
output参数手动指定"html"或"latex"。
生成的表格会自动对齐数值列,在两种格式下都能保持良好的排版效果,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Crimc
相关产品推荐
相关产品推荐

