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

如何在gt_summary的tbl_summary中为配对样本正确使用add_n()?

配对样本中用add_n()显示真实参与者数量的解决办法

在配对设计里,add_n()默认会统计每组的观测总数(也就是实际参与者数×2),要让它显示真实的独立参与者数量,有两种实用方法:

方法1:自定义add_n()的统计规则

直接通过statistic参数指定统计唯一id的数量,代码修改后如下:

ss %>% 
  tbl_summary(by = Day, include = -id,  
              type = all_continuous() ~ "continuous2", 
              label = list(value ~ "p"), 
              statistic = list(all_continuous() ~ "{mean} ({sd})"))  %>%  
  add_difference(test = list(value ~ "paired.t.test"), group = id) %>% 
  # 统计每个分组下的唯一id数量,即真实参与者数
  add_n(statistic = "{n_distinct(id)}") %>% 
  modify_header(all_stat_cols() ~ "**{level}**")

方法2:先算参与者数再手动替换表格内容

如果需要更灵活的调整,可以先算出总参与者数,再替换add_n()生成的行数据:

# 先计算真实的参与者数量
participant_count <- n_distinct(ss$id)

ss %>% 
  tbl_summary(by = Day, include = -id,  
              type = all_continuous() ~ "continuous2", 
              label = list(value ~ "p"), 
              statistic = list(all_continuous() ~ "{mean} ({sd})"))  %>%  
  add_difference(test = list(value ~ "paired.t.test"), group = id) %>% 
  add_n() %>% 
  # 把N行的数值替换成真实参与者数
  modify_table_body(
    ~ .x %>% 
      mutate(
        stat_0 = ifelse(row_type == "label" & label == "N", participant_count, stat_0),
        stat_3 = ifelse(row_type == "label" & label == "N", participant_count, stat_3)
      )
  ) %>% 
  modify_header(all_stat_cols() ~ "**{level}**")

补充说明

  • 方法1最省事,因为配对样本里两个分组的id完全对应,统计出来的唯一id数量就是真实参与者数,两组结果一致。
  • 方法2适合需要对表格做更多自定义修改的场景,先保留默认add_n()的结构,再精准替换数值。

内容的提问来源于stack exchange,提问作者arshad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:05:32