如何对存储在pandas DataFrame

时间:2017-04-08 10:28:57

标签: python pandas t-test

我有一些实验数据。该实验在具有n=6的三种不同细胞系中随时间测量126个基因。标准化测量称为delta_ct值。数据存储在pandas.DataFrame中,如下所示:

                       Gene     Group  Time  Repeat  delta_ct
Group    Time Repeat                                         
Adult    0    1       SMAD3     Adult     0       1  0.115350
              2       SMAD3     Adult     0       2  0.076046
              3       SMAD3     Adult     0       3  0.081212
              4       SMAD3     Adult     0       4  0.083205
              5       SMAD3     Adult     0       5  0.101456
              6       SMAD3     Adult     0       6  0.089714
         1    1       SMAD3     Adult     1       1  0.088079
              2       SMAD3     Adult     1       2  0.093965
              3       SMAD3     Adult     1       3  0.114951
              4       SMAD3     Adult     1       4  0.082359
              5       SMAD3     Adult     1       5  0.080788
              6       SMAD3     Adult     1       6  0.103181
Neonatal 24   1       SMAD3  Neonatal    24       1  0.039883
              2       SMAD3  Neonatal    24       2  0.037161
              3       SMAD3  Neonatal    24       3  0.042874
              4       SMAD3  Neonatal    24       4  0.047950
              5       SMAD3  Neonatal    24       5  0.053673
              6       SMAD3  Neonatal    24       6  0.040181
         30   1       SMAD3  Neonatal    30       1  0.035015
              2       SMAD3  Neonatal    30       2  0.042596
              3       SMAD3  Neonatal    30       3  0.038034
              4       SMAD3  Neonatal    30       4  0.040363
              5       SMAD3  Neonatal    30       5  0.034818
              6       SMAD3  Neonatal    30       6  0.031685

注意我将创建索引的列保留为列,因为它使得seaborn的绘图更容易一些。我的问题是,我将如何进行t检验来检验不同细胞系之间每个时间点的均值彼此显着不同的假设。

例如,在上面的数据中,我想对df.loc[['Adult',0]]df.loc[['Neonatal',0]]执行t检验,即相同的时间点但不同的细胞系。

1 个答案:

答案 0 :(得分:3)

使用您可以通过Welch t-test

访问的scipys ttest_ind
from scipy.stats import ttest_ind

ttest_ind(df.loc[['Adult', 0]].delta_ct, df.loc[['Neonatal', 0]])

或者,如果您愿意,可以编写自己的功能。

def welch_ttest(x1, x2):
    x_1 = x1.mean()
    x_2 = x2.mean()
    s1 = x1.std()
    s2 = x2.std()
    n1 = len(x1)
    n2 = len(x2)
    return ((x_1 - x_2) / (np.sqrt(s1 ** 2 / n1 + s2 ** 2 / n2)))

welch_ttest(df.loc[['Adult', 0]].delta_ct, df.loc[['Neonatal', 0]])

See Answer Here