如何使用R包gtsummary在汇总表中添加卡方检验效应量Cramer's V?
解决方案
修改自定义效应量计算函数,增加变量类型适配逻辑:连续变量输出Cohen's d,分类变量自动构造列联表输出Cramer's V,修改后完整可运行代码如下:
library(tidyverse) library(rstatix) library(gtsummary) theme_gtsummary_mean_sd() my_ES_test <- function(data, variable, by, ...) { # 提取当前变量和分组变量的向量 x <- data[[variable]] y <- data[[by]] # 连续变量计算Cohen's d if (is.numeric(x)) { return(rstatix::cohens_d(data, as.formula(glue::glue("{variable} ~ {by}")))$effsize) } # 分类变量计算Cramer's V else { cont_table <- table(x, y) return(rstatix::cramer_v(cont_table)) } } gtTable <- mtcars %>% select(hp, vs, am) %>% tbl_summary(by = vs) %>% add_p() %>% # 所有变量都应用自定义效应量函数 add_stat(fns = everything() ~ my_ES_test) %>% modify_header(add_stat_1 ~ "Effect size") %>% # 可选:统一效应量显示2位小数 modify_fmt_fun(add_stat_1 ~ ~style_number(., digits = 2)) gtTable
效果说明
生成的表格中:
- 连续变量
hp对应的效应量为Cohen's d值 - 分类变量
am对应的效应量为Cramer's V值,和单独计算的0.10结果一致
内容的提问来源于stack exchange,提问作者André
相关产品推荐
相关产品推荐

