带标签数据集的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
相关产品推荐
相关产品推荐

