首页 > 解决方案 > 为什么 z 检验表明 2 个看起来相似的分布存在显着差异(假设检验)

问题描述

我在下面有两个分布(Kaggle 数据集:Rossman 销售),它们在视觉上看起来相似:正常日子的销售和学校假期的销售。

在此处输入图像描述

然而,他们似乎在 Python 中没有通过 z-test(假设测试)——为什么会这样

我应该如何在 Python 中执行统计测试(z-test)?我应该使用pooled还是unequalvar(我应该使用相同的方差还是不同的方差)?我还发现切换School_hol_salesNormal_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

标签: pythonstatisticsdata-sciencehypothesis-test

解决方案


推荐阅读