如何在R中批量执行多变量独立t检验?解决代码报错
批量执行独立t检验的报错解决方法
问题场景
原本需要逐个编写代码对每个自变量执行独立t检验:
t.test(Age~composite_renal_march2020,data = DN_DKK3,var.equal=TRUE) t.test(HbA1c~composite_renal_march2020,data = DN_DKK3,var.equal=TRUE)
尝试用管道批量处理时写出以下代码,但持续报错:
DN_DKK3 %>% select(-SampleID) %>% group_by(Age, HbA1c) %>% t.test(~composite_renal_march2020, var.equal = TRUE)
报错信息:
Error in
vec_c():
! Can't combinecomposite_renal_march2020andRetinopathyGrade13.
Runrlang::last_trace()to see where the error occurred.
回溯信息:
▆ 1. ├─... %>% t.test(~composite_renal_march2020, var.equal = TRUE) 2. ├─stats::t.test(., ~composite_renal_march2020, var.equal = TRUE) 3. └─stats:::t.test.default(., ~composite_renal_march2020, var.equal = TRUE) 4. ├─x[xok] 5. ├─dplyr:::`[.grouped_df`(x, xok) 6. ├─base::NextMethod() 7. └─tibble:::`[.tbl_df`(x, xok) 8. └─tibble:::tbl_subset_matrix(x, j, j_arg) 9. ├─base::unname(vec_c(!!!values, .name_spec = ~.x)) 10. └─vctrs::vec_c(!!!values, .name_spec = ~.x)
警告信息:
In is.na(y) : is.na() applied to non-(list or vector) of type 'language'
错误原因
group_by用法错误:group_by(Age, HbA1c)是将数据按Age和HbA1c的组合分组,这和你要对每个自变量分别与composite_renal_march2020做t检验的需求完全不符,反而会让数据结构混乱。t.test公式与输入不匹配:管道传递的是分组后的数据框,而t.test(~composite_renal_march2020)的写法不符合独立t检验的公式逻辑(正确逻辑应为自变量~分组变量),导致函数无法正确解析输入类型。
解决方案
方法1:用purrr批量遍历变量
借助purrr的map函数,遍历目标自变量列表,为每个变量构造正确的t检验公式:
library(tidyverse) # 指定需要检验的自变量 target_vars <- c("Age", "HbA1c") # 批量执行t检验,返回带变量名的结果列表 map(target_vars, ~t.test(reformulate("composite_renal_march2020", response = .x), data = DN_DKK3, var.equal = TRUE)) %>% set_names(target_vars)
方法2:转长格式后分组提取结果
将数据转成长格式,按自变量分组后执行t检验,并提取关键统计量整理成表格:
DN_DKK3 %>% # 保留分组变量和目标自变量 select(composite_renal_march2020, Age, HbA1c) %>% # 转长格式,方便分组处理 pivot_longer(cols = -composite_renal_march2020, names_to = "自变量", values_to = "数值") %>% group_by(自变量) %>% summarize( t检验结果 = list(t.test(数值 ~ composite_renal_march2020, var.equal = TRUE)), t值 = t检验结果[[1]]$statistic, 自由度 = t检验结果[[1]]$parameter, p值 = t检验结果[[1]]$p.value )
内容的提问来源于stack exchange,提问作者Janus Lee
相关产品推荐
相关产品推荐

