You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带标签数据集的Python配对t检验与秩和检验实现求助

完善配对t检验与秩和检验的Python代码

首先得给你点个赞——作为统计新手,已经能自己动手处理数据并计算均值,这起步很棒!接下来我们一步步把代码补全,完成你需要的两种统计检验。

首先,我们需要用到numpy做数值计算,scipy.stats提供现成的统计检验函数,先导入这两个库:

import numpy as np
from scipy import stats

修正数据读取逻辑

你的原代码里有一些小细节需要调整(比如未定义的file1、文件读取后没关闭),我们用更规范的with open语法来读取文件,同时更清晰地提取每个TaxID对应的病例组(case,label=0)和对照组(control,label=1)数据:

# 初始化变量
label = []
data = {}

# 读取标签和数据
with open('final_out_transposed.csv', 'rt') as x:
    for r in x:
        datas = r.strip().split(',')  # 去掉首尾空白并分割行内容
        if datas[0] == ' Label':
            # 提取标签列表,统一处理为字符串格式
            label = [item.strip() for item in datas[1:]]
        elif datas[0] not in ['SRA ID', 'TaxID']:
            # 提取每个TaxID对应的数值数据,转为float类型
            tax_id = datas[0]
            values = [float(item.strip()) for item in datas[1:]]
            data[tax_id] = values

# 校验数据与标签长度一致,避免后续出错
counter = len(label)
for tax_id, vals in data.items():
    assert len(vals) == counter, f"数据长度与标签不匹配:{tax_id}"

计算统计检验并保存结果

接下来,我们对每个TaxID分别提取配对的case和control数据,然后计算两类检验:

  • 配对t检验:用stats.ttest_rel,适用于配对设计的正态分布数据
  • 配对秩和检验(Wilcoxon符号秩检验):用stats.wilcoxon,是配对设计的非参数检验,当数据不满足正态分布时替代配对t检验

如果你的数据是独立分组(非配对),那秩和检验应该用Mann-Whitney U检验(stats.mannwhitneyu),我会在代码里标注这个选项。

# 打开结果文件准备写入
with open('sum.csv', 'w') as sum_file:
    # 写入表头,明确各列含义
    header = "TaxID,mean_case,mean_ctrl,t_stat,p_value_ttest,wilcoxon_stat,p_value_wilcoxon\n"
    sum_file.write(header)
    
    for tax_id, vals in data.items():
        # 提取case和control的数值列表
        case_values = []
        control_values = []
        for val, lbl in zip(vals, label):
            if lbl == '0' or lbl == 0:
                case_values.append(val)
            else:
                control_values.append(val)
        
        # 校验配对数据长度一致(配对检验的必要条件)
        assert len(case_values) == len(control_values), f"{tax_id}的case和control数量不匹配,无法执行配对检验"
        
        # 计算两组均值
        mean_case = np.mean(case_values)
        mean_ctrl = np.mean(control_values)
        
        # 1. 配对t检验
        t_stat, p_ttest = stats.ttest_rel(case_values, control_values)
        
        # 2. 配对秩和检验(Wilcoxon符号秩检验)
        wilcoxon_stat, p_wilcoxon = stats.wilcoxon(case_values, control_values)
        
        # 如果是独立样本的秩和检验,替换为下面这行:
        # mannwhitney_stat, p_mannwhitney = stats.mannwhitneyu(case_values, control_values)
        
        # 将结果写入文件,保留4位小数方便阅读
        line = f"{tax_id},{mean_case:.4f},{mean_ctrl:.4f},{t_stat:.4f},{p_ttest:.4f},{wilcoxon_stat:.4f},{p_wilcoxon:.4f}\n"
        sum_file.write(line)

关键说明

  • 配对t检验:要求两组数据的差值服从正态分布,适合配对设计的定量数据比较(比如同一对象前后测、配对的病例-对照)
  • Wilcoxon符号秩检验:配对设计的非参数替代方案,当数据不满足正态分布时使用
  • Mann-Whitney U检验:针对独立分组的秩和检验,如果你的case和control没有配对关系,就用这个检验

运行这段代码后,sum.csv会包含每个TaxID的均值、两种检验的统计量和p值,方便你后续做统计推断。

内容的提问来源于stack exchange,提问作者K.S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:52:14