使用 python pandas 如何选择匹配对来执行匹配对学生的 t 检验?

问题描述

我正在尝试执行配对学生的 t 检验 scipy.stats.ttest_rel,但很难删除“非重复”值。

这是我能想到的最简单的例子:

df = pd.DataFrame({
    'Sample': ['H1','H1','H2','H3'],'L/R': ['L','L','R','L'],'Region': ['Eq','Po','Eq','Po'],'MatchedPair': ['H1L','H1L','H1R','H2L','H3L'],'Value': [12.2,11.1,14.5,9.0,10.2,11.6]
})

打印出来时:

df
Out[236]: 
  Sample L/R Region MatchedPair  Value
0     H1   L     Eq         H1L   12.2
1     H1   L     Po         H1L   11.1
2     H1   R     Eq         H1R   14.5
3     H2   L     Po         H2L    9.0
4     H2   L     Eq         H2L   10.2
5     H3   L     Po         H3L   11.6

我正在尝试比较匹配对(Region L & R by Sample),因为我没有 H2R 的数据点,所以我有不等长的数组。

目标是:

f,p = stats.ttest_rel(dfMP['Value'][df['Region'] == 'Eq'],dfMP['Value'][df['Region'] == 'Po'])

其中 dfMP 是包含匹配对并根据 Sample 列排除非匹配对的数据框,因此我可以比较区域(MatchedPair 列中的“Eq”与“Po”)。

现在我只能这样做:

f,p = stats.ttest_ind(df['Value'][df['Region'] == 'Eq'],df['Value'][df['Region'] == 'Po'])

解决方法

这是我在使用 pandas duplicated 函数后得出的结论:

dfMP = df[df.duplicated(['MatchedPair'],keep=False)]
f,p = stats.ttest_rel(dfMP['Value'][dfMP['Region'] == 'Eq'],dfMP['Value'][dfMP['Region'] == 'Po'])

print(f,p,"Matched Pairs Student's t-test")

f,p = stats.ttest_ind(dfMP['Value'][dfMP['Region'] == 'Eq'],"Student's t-test")

打印输出:

23.00000000000007 0.027661699133323864 Matched Pairs Student's t-test
0.7931034482758611 0.5108596784320201 Student's t-test

我相信这应该可行,但我不确定 duplicated 方法是否是正确的方法。