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

如何用{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 / pM2 / Est.M2 / p
(Intercept)34.661 [29.452; 39.870]<0.0011.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 / EstimateM1 / 95% CIM1 / p valueM2 / EstimateM2 / 95% CIM2 / p value
(Intercept)34.661[29.452; 39.870]<0.0011.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:14:56