Подтвердить что ты не робот

T-тест в Pandas

Если я хочу вычислить среднее из двух категорий в Pandas, я могу сделать это следующим образом:

data = {'Category': ['cat2','cat1','cat2','cat1','cat2','cat1','cat2','cat1','cat1','cat1','cat2'],
        'values': [1,2,3,1,2,3,1,2,3,5,1]}
my_data = DataFrame(data)
my_data.groupby('Category').mean()

Category:     values:   
cat1     2.666667
cat2     1.600000

У меня много данных, отформатированных таким образом, и теперь мне нужно сделать T-тест, чтобы узнать, являются ли среднее значение cat1 и cat2 статистически разными. Как я могу это сделать?

4b9b3361

Ответ 1

это зависит от того, какой тип t-теста вы хотите сделать (односторонний или двусторонний зависимый или независимый), но он должен быть таким простым, как:

from scipy.stats import ttest_ind

cat1 = my_data[my_data['Category']=='cat1']
cat2 = my_data[my_data['Category']=='cat2']

ttest_ind(cat1['values'], cat2['values'])
>>> (1.4927289925706944, 0.16970867501294376)

он возвращает кортеж с t-статистикой и p-значение

см. здесь для других t-тестов http://docs.scipy.org/doc/scipy/reference/stats.html

Ответ 2

EDIT: Я не понял, что это касается формата данных. Вы можете использовать

two_data = pd.DataFrame(data, index=data['Category'])

Затем доступ к категориям прост как

scipy.stats.ttest_ind(two_data.loc['cat'], two_data.loc['cat2'], equal_var=False)

loc operator обращается к строкам по метке.


Как @G Гарсия сказал

односторонняя или двусторонняя зависимая или независимая

Если у вас два независимых образца, но вы не знаете, что они имеют равную дисперсию, вы можете использовать Welch t-test. Это так же просто, как

scipy.stats.ttest_ind(cat1['values'], cat2['values'], equal_var=False)

По причинам, чтобы предпочесть тест Welch, см. https://stats.stackexchange.com/info/305/when-conducting-a-t-test-why-would-one-prefer-to-assume-or-test-for-equal-vari.

Для двух зависимых образцов вы можете использовать

scipy.stats.ttest_rel(cat1['values'], cat2['values'])