如何从t检验模型生成的列表提取指标并整理为统一表格
从t检验结果列表中提取统计值并生成表格
问题描述
如何从统计模型(t检验)生成的列表中提取特定值?
我通过以下代码执行了多个t检验:
A<-lapply(merged_DF_final[2:6], function(x) t.test(x ~ merged_DF_final$Group))
我需要从每个子检验的结果中提取p值、t统计量、置信区间以及组均值,并将这些信息输出到一个统一表格中,请问该如何操作?
以下是存储在对象A中的内容:
$HC_HC_L_amygdala_baseline Welch Two Sample t-test data: x by merged_DF_final$Group t = 0.039543, df = 47.412, p-value = 0.9686 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -0.4694404 0.4882694 sample estimates: mean in group CONN mean in group HC 0.2954200 0.2860055 $HC_HC_L_culmen_baseline Welch Two Sample t-test data: x by merged_DF_final$Group t = 0.81387, df = 53.695, p-value = 0.4193 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -0.2970321 0.7028955 sample estimates: mean in group CONN mean in group HC 0.4020883 0.1991566 $HC_HC_L_fusiform_baseline Welch Two Sample t-test data: x by merged_DF_final$Group t = 0.024945, df = 53.851, p-value = 0.9802 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -0.5768786 0.5914136 sample estimates: mean in group CONN mean in group HC 0.5552184 0.5479509 $HC_HC_L_insula_baseline Welch Two Sample t-test data: x by merged_DF_final$Group t = 0.79659, df = 52.141, p-value = 0.4293 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -0.3000513 0.6951466 sample estimates: mean in group CONN mean in group HC 0.12436946 -0.07317818 $HC_HC_L_lingual_gyrus_baseline Welch Two Sample t-test data: x by merged_DF_final$Group t = -0.11033, df = 53.756, p-value = 0.9126 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -0.5172863 0.4633268 sample estimates: mean in group CONN mean in group HC 0.4395066 0.4664864
解决方案
每个t.test()返回的结果是一个包含各类统计值的列表,我们可以通过提取列表元素的方式获取所需信息,再合并成统一表格:
步骤1:定义提取函数
先写一个函数,从单个t检验结果中提取需要的统计量:
extract_tstats <- function(test_result) { data.frame( t_stat = test_result$statistic, # t统计量 df = test_result$parameter, # 自由度 p_value = test_result$p.value, # p值 ci_low = test_result$conf.int[1], # 置信区间下限 ci_high = test_result$conf.int[2], # 置信区间上限 mean_CONN = test_result$estimate[1], # CONN组均值 mean_HC = test_result$estimate[2] # HC组均值 ) }
步骤2:批量提取并合并表格
用lapply()遍历列表A,应用上面的提取函数,再用do.call(rbind, ...)合并成一个数据框:
# 批量提取每个检验的统计值 t_results <- lapply(A, extract_tstats) # 合并为一个表格,保留变量名作为单独列 final_table <- do.call(rbind, t_results) final_table$variable <- rownames(final_table) rownames(final_table) <- NULL # 调整列顺序(可选,让变量名在前) final_table <- final_table[, c("variable", "t_stat", "df", "p_value", "ci_low", "ci_high", "mean_CONN", "mean_HC")]
最终结果示例
运行上述代码后,final_table会生成如下格式的表格(数值保留原精度):
| variable | t_stat | df | p_value | ci_low | ci_high | mean_CONN | mean_HC |
|---|---|---|---|---|---|---|---|
| HC_HC_L_amygdala_baseline | 0.039543 | 47.412 | 0.9686 | -0.4694404 | 0.4882694 | 0.2954200 | 0.2860055 |
| HC_HC_L_culmen_baseline | 0.81387 | 53.695 | 0.4193 | -0.2970321 | 0.7028955 | 0.4020883 | 0.1991566 |
| HC_HC_L_fusiform_baseline | 0.024945 | 53.851 | 0.9802 | -0.5768786 | 0.5914136 | 0.5552184 | 0.5479509 |
| HC_HC_L_insula_baseline | 0.79659 | 52.141 | 0.4293 | -0.3000513 | 0.6951466 | 0.12436946 | -0.07317818 |
| HC_HC_L_lingual_gyrus_baseline | -0.11033 | 53.756 | 0.9126 | -0.5172863 | 0.4633268 | 0.4395066 | 0.4664864 |
内容的提问来源于stack exchange,提问作者lotus
相关产品推荐
相关产品推荐

