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

У меня есть некоторые экспериментальные данные. Эксперимент измерял 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]]то есть тот же момент времени, но разные клеточные линии.

1 ответ

Используйте t-критерий Уэлча, к которому вы можете получить доступ через scipy sttest_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]])

Смотрите ответ здесь

Другие вопросы по тегам