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

如何在gtsummary表格中添加Kendall tau相关性检验的p值列

问题

使用gtsummary包的tbl_summary()函数创建了按三分位数("Low tertile"、"Medium tertile"、"High tertile")分组的统计表格,已通过add_p()添加Kruskal-Wallis检验的组间比较p值。现在需要新增一列Kendall tau相关性检验的p值(将三分位数转换为1、2、3数值型进行计算),已算出p值向量但无法添加为表格列。

可复现代码如下:

library(dplyr)
library(gtsummary)

# 创建示例数据
n <- 10
data <- data.frame(
  VAT_Quantile_3 = factor(sample(c("Low tertile", "Medium tertile", "High tertile"), n, replace = TRUE)),
  Gender = factor(sample(c("Male", "Female"), n, replace = TRUE)),
  Age = c(50.1, 49.2, 48.8, 51.7, 52.6, 50.4, 49.9, 48.2, 51.1, 52.7))

# 生成基础统计表格并添加Kruskal-Wallis检验p值
tab_1 <- data %>%
  select(VAT_Quantile_3, Gender, Age) %>%
  tbl_summary(by = VAT_Quantile_3,
              statistic = list(
                all_continuous() ~ "{mean} ({sd})",
                all_categorical() ~ "{n} / {N} ({p}%)"),
              digits = list(all_continuous() ~ c(1, 1),
                            all_categorical() ~ c(0,1))) %>%
  add_p(pvalue_fun = ~style_pvalue(., digits = 3))

# 单个变量的Kendall tau检验示例
cor.test(data$Age, as.numeric(data$VAT_Quantile_3), method = "kendall")
解决方案

步骤1:批量计算所有变量的Kendall tau检验p值

编写代码遍历表格中的每个变量,批量计算其与VAT_Quantile_3的Kendall tau相关性检验p值:

library(purrr)

# 批量计算Kendall tau检验p值
kendall_p_values <- data %>%
  select(-VAT_Quantile_3) %>%
  imap_dfr(function(var, var_name) {
    test_result <- cor.test(var, as.numeric(data$VAT_Quantile_3), method = "kendall")
    tibble(variable = var_name, kendall_p = test_result$p.value)
  }) %>%
  mutate(kendall_p = style_pvalue(kendall_p, digits = 3))

步骤2:将p值列添加到gtsummary表格中

使用gtsummary自带的修改函数,将计算好的p值合并到表格中,并设置列标签与格式:

# 整合Kendall tau p值到表格
tab_final <- tab_1 %>%
  modify_table_body(~ left_join(., kendall_p_values, by = "variable")) %>%
  modify_header(kendall_p = "**Kendall tau p-value**") %>%
  modify_fmt_fun(kendall_p = ~style_pvalue(., digits = 3))

完整可运行代码

library(dplyr)
library(gtsummary)
library(purrr)

# 创建示例数据
n <- 10
data <- data.frame(
  VAT_Quantile_3 = factor(sample(c("Low tertile", "Medium tertile", "High tertile"), n, replace = TRUE)),
  Gender = factor(sample(c("Male", "Female"), n, replace = TRUE)),
  Age = c(50.1, 49.2, 48.8, 51.7, 52.6, 50.4, 49.9, 48.2, 51.1, 52.7))

# 生成基础统计表格并添加Kruskal-Wallis检验p值
tab_1 <- data %>%
  select(VAT_Quantile_3, Gender, Age) %>%
  tbl_summary(by = VAT_Quantile_3,
              statistic = list(
                all_continuous() ~ "{mean} ({sd})",
                all_categorical() ~ "{n} / {N} ({p}%)"),
              digits = list(all_continuous() ~ c(1, 1),
                            all_categorical() ~ c(0,1))) %>%
  add_p(pvalue_fun = ~style_pvalue(., digits = 3))

# 批量计算Kendall tau检验p值
kendall_p_values <- data %>%
  select(-VAT_Quantile_3) %>%
  imap_dfr(function(var, var_name) {
    test_result <- cor.test(var, as.numeric(data$VAT_Quantile_3), method = "kendall")
    tibble(variable = var_name, kendall_p = test_result$p.value)
  }) %>%
  mutate(kendall_p = style_pvalue(kendall_p, digits = 3))

# 整合到表格并格式化
tab_final <- tab_1 %>%
  modify_table_body(~ left_join(., kendall_p_values, by = "variable")) %>%
  modify_header(kendall_p = "**Kendall tau p-value**") %>%
  modify_fmt_fun(kendall_p = ~style_pvalue(., digits = 3))

# 查看最终表格
tab_final

关键说明

  • imap_dfr()可以同时获取变量名和变量值,实现批量检验计算
  • modify_table_body()负责将外部计算的p值与gtsummary表格的核心数据合并
  • modify_header()和modify_fmt_fun()分别设置新列的显示标签与p值格式,保持表格风格统一

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:57:55