Как выполнить 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]])