gtsummary 2.0.4版本有序因子Wilcoxon检验失效求助
解决gtsummary 2.0.4中有序因子Wilcoxon检验报错的问题
gtsummary 2.0.4版本收紧了检验函数的变量类型校验,直接指定test = "wilcox.test"时,工具会直接传入原始的有序因子变量,而wilcox.test要求输入数值型,所以触发了'x' must be numeric错误。给你两个可行的解决思路:
方法一:自定义检验函数
自己写一个适配有序因子的Wilcoxon检验函数,内部把有序因子转成数值型再执行检验,这样既保留表格里的有序因子标签,又满足检验的数值要求:
# 定义适配有序因子的Wilcoxon检验函数 wilcox_test_ordered <- function(data, variable, by, ...) { # 将有序因子转为数值型后执行检验 wilcox.test(as.numeric(data[[variable]]) ~ data[[by]], data = data, ...) } # 使用自定义函数执行检验 testdf <- data.frame( out = sample(LETTERS[1:4], 100, replace = TRUE), group = sample(LETTERS[1:2],100, replace = TRUE) ) %>% mutate( orderedfac = factor(out, levels = LETTERS[1:4], ordered = TRUE), outnum = as.numeric(orderedfac) ) tbl_summary( testdf %>% select(group, orderedfac), by = group ) %>% add_p(test = list(orderedfac = wilcox_test_ordered))
方法二:提前转换变量并保留标签
先把有序因子转成数值型,然后在tbl_summary里把数值型变量的标签和显示值映射回原有序因子,这样表格展示和检验逻辑都能满足:
testdf <- data.frame( out = sample(LETTERS[1:4], 100, replace = TRUE), group = sample(LETTERS[1:2],100, replace = TRUE) ) %>% mutate( orderedfac = factor(out, levels = LETTERS[1:4], ordered = TRUE), orderedfac_num = as.numeric(orderedfac) # 新增数值型变量 ) tbl_summary( testdf %>% select(group, orderedfac_num), by = group, # 把数值型变量的标签设为原有序因子名称 label = list(orderedfac_num = "orderedfac"), # 把数值映射回原有序因子的标签显示 value = list(orderedfac_num = ~factor(.x, levels = 1:4, labels = LETTERS[1:4])) ) %>% add_p(test = list(orderedfac_num = "wilcox.test"))
两种方法里,方法一更简洁,不需要修改原始数据结构,推荐优先使用。
内容的提问来源于stack exchange,提问作者Dries
相关产品推荐
相关产品推荐

