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

Scipy双样本t检验与秩和检验技术求助

解决每行独立的双样本t检验与秩和检验问题

首先得指出你现有代码的核心问题:你在循环里完全没用到iterrows()返回的行数据,而是反复对整个数据集的sum_case和sum_ctrl做检验,这显然不是你要的「每行对应一个独立ID分别检验」的效果。

接下来我们一步步修正这个问题,实现你想要的功能:

步骤1:先正确区分病例组和对照组的列

根据你给出的CSV格式,首先得把**病例组(Label=1)和对照组(Label=0)**对应的列提取出来,这样才能针对每行的两组数据做检验:

import pandas as pd
from scipy.stats import ttest_ind, ranksums

# 读取数据,注意跳过前两行的元数据(SRA ID行和TaxID标识行)
df = pd.read_csv('final_out_transposed.csv', skiprows=[0, 1])

# 单独读取Label行来分组列
label_info = pd.read_csv('final_out_transposed.csv', nrows=1).iloc[0]
case_cols = label_info[label_info == 1].index.tolist()  # 病例组列名
ctrl_cols = label_info[label_info == 0].index.tolist()  # 对照组列名

步骤2:遍历每行执行独立检验

现在我们可以逐个遍历每个TaxID对应的行,提取该行的病例组和对照组数据,再分别执行t检验和秩和检验:

# 创建空列表存储所有结果
test_results = []

for idx, row in df.iterrows():
    # 获取当前行的病例组、对照组数据,同时去掉缺失值
    case_data = row[case_cols].dropna().values
    ctrl_data = row[ctrl_cols].dropna().values
    
    # 只有当两组样本量都≥2时才执行检验,避免报错
    if len(case_data) >= 2 and len(ctrl_data) >= 2:
        # 用Welch t检验(方差不齐时更稳健)
        t_stat, t_pval = ttest_ind(case_data, ctrl_data, equal_var=False)
        # 秩和检验(非正态分布数据优先选择)
        rank_stat, rank_pval = ranksums(case_data, ctrl_data)
    else:
        # 样本量不足时填充空值
        t_stat, t_pval = None, None
        rank_stat, rank_pval = None, None
    
    # 把当前行的结果存入列表
    test_results.append({
        'TaxID': row['TaxID'],
        't检验统计量': t_stat,
        't检验p值': t_pval,
        '秩和检验统计量': rank_stat,
        '秩和检验p值': rank_pval
    })

# 把结果转成DataFrame,方便查看和保存
results_df = pd.DataFrame(test_results)
print(results_df.head())
# 保存结果到CSV文件
results_df.to_csv('taxid检验结果.csv', index=False)

几个关键注意点

  • 样本量校验:t检验和秩和检验都需要每组至少2个有效样本,加判断能避免因数据缺失或样本量不足导致的报错。
  • 方差齐性处理:用equal_var=False的Welch t检验是更稳妥的选择,不用提前验证方差是否相等。
  • 缺失值处理:用dropna()过滤缺失值,保证检验的有效性。
  • 数据结构适配:如果你的CSV实际结构和示例有差异(比如Label行的位置不同),需要调整label_info的读取逻辑,确保正确分组列。

这样修改后,就能实现每个TaxID(每行)独立对病例组和对照组数据执行检验的需求了。

内容的提问来源于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 04:18:26