У меня есть два распределения ниже (набор данных Kaggle: продажи Россмана), которые визуально выглядят одинаково: продажи в обычные дни и продажи в школьные каникулы.
Тем не менее, они, похоже, не проходят z-тест (проверку гипотез) в Python - почему это так ?
Как мне выполнить статистический тест (z-test) в Python?Должен ли я использовать pooled
или unequalvar
(использовать одну и ту же дисперсию или другую)?Я также обнаружил, что переключение School_hol_sales
и Normal_day_sales
в приведенном ниже коде дает разные результаты, и я не уверен, почему.
School_hol_sales = df[(df.Open==1)&(df.SchoolHoliday==1)&(df.StateHoliday=='0')&(df.Promo==0)].Sales
Normal_day_sales = df[(df.Open==1)&(df.SchoolHoliday==0)&(df.StateHoliday=='0')&(df.Promo==0)].Sales
School_hol_sales.mean(), Normal_day_sales.mean() # (6230.4, 5904.6)
School_hol_sales.std(), Normal_day_sales.std() # (2841.8, 2602.9)
# which is the correct one?
import statsmodels.stats.api as sms
cm = sms.CompareMeans(sms.DescrStatsW(School_hol_sales), sms.DescrStatsW(Normal_day_sales))
z, pval = cm.ztest_ind(alternative='larger', usevar='unequal')
print('z: {} , pval: {}'.format(z, pval))
from statsmodels.stats.weightstats import ztest
z, pval = ztest(School_hol_sales,Normal_day_sales, alternative='larger', usevar='pooled', ddof=1.0)
print('z: {} , pval: {}'.format(z, pval))
Вывод:
z: 28.53350149055591 , pval: 2.2504631945823565e-179
z: 30.17089944207645 , pval: 2.853425122518376e-200