Я хотел бы провести простой t-тест в python, но я бы хотел сравнить все возможные группы друг с другом. Допустим, у меня есть следующие данные:
import pandas as pd
data = {'Category': ['cat3','cat2','cat1','cat2','cat1','cat2','cat1','cat2','cat1','cat1','cat1','cat2','cat3','cat3'],
'values': [4,1,2,3,1,2,3,1,2,3,5,1,6,3]}
my_data = pd.DataFrame(data)
И я хочу вычислить значение p на основе t-критерия для всех возможных комбинаций категорий, а именно:
cat1 vs. cat2
cat2 vs. cat3
cat1 vs. cat3
Я могу сделать это вручную через:
from scipy import stats
cat1 = my_data.loc[my_data['Category'] == 'cat1', 'values']
cat2 = my_data.loc[my_data['Category'] == 'cat2', 'values']
cat3 = my_data.loc[my_data['Category'] == 'cat3', 'values']
print(stats.ttest_ind(cat1,cat2).pvalue)
print(stats.ttest_ind(cat2,cat3).pvalue)
print(stats.ttest_ind(cat1,cat3).pvalue)
Но есть ли более простой и прямой способ сделать это? Количество категорий может отличаться от случая к случаю, поэтому число t-тестов, которые должны быть рассчитаны, также будет различаться ...
Окончательный результат должен представлять собой DataFrame с одной строкой для каждого сравнения и значения: категория1 | категория2 | р-значение, в этом случае оно должно выглядеть так:
cat1 | cat2 | 0.16970867501294376
cat2 | cat3 | 0.0170622126550303
cat1 | cat3 | 0.13951958313684434