如何在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
相关产品推荐
相关产品推荐

