Как выполнить t-тест для данных, хранящихся в фрейме данных pandas

У меня есть экспериментальные данные. В ходе эксперимента было измерено 126 генов в трех разных клеточных линиях с n=6. Нормализованное измерение известно как значение 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-тест, чтобы проверить гипотезу о том, что средние значения для каждой временной точки между разными линиями клеток значительно отличаются друг от друга.

Например, в приведенных выше данных я хочу выполнить t-тест для df.loc[['Adult',0]] и df.loc[['Neonatal',0]], то есть в один и тот же момент времени, но разные линии клеток.


person CiaranWelsh    schedule 08.04.2017    source источник
comment
Не имеет прямого отношения к вопросу, но просто добавлю, что у вас также есть тесты KS и Манна-Уитни, которые также используются для сравнения двух распределений.   -  person splinter    schedule 08.04.2017


Ответы (1)


Используйте Т-тест Велча к которому вы можете получить доступ через 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]])

См. ответ здесь

person piRSquared    schedule 08.04.2017
comment
Идеально. Спасибо! - person CiaranWelsh; 08.04.2017
comment
не должен ли аргумент быть: welch_ttest(df.loc[['Adult', 0]].delta_ct, df.loc[['Neonatal', 0]].delta_ct)? - person Falah Abu Hassan; 02.03.2019