我在每个类别中都有这样的期望值和频率,如下所示:
它们似乎很相似,但是卡方检验却不这么认为:
stats.chisquare(city_ans.answered, city_ans.sent)
# Power_divergenceResult(statistic=893005.32003277098, pvalue=0.0)
过滤小于10的值不会有太大变化:
stats.chisquare(city_ans[city_ans.answered > 10].answered, city_ans[city_ans.answered > 10].sent)
# Power_divergenceResult(statistic=892917.3023088905, pvalue=0.0)
我究竟做错了什么?
我如何在这里申请F-测试?
PS。使用与obs和exp相同的值进行此测试-return p_val = 1
stats.chisquare(city_ans.sent, city_ans.sent)
# Power_divergenceResult(statistic=0.0, pvalue=1.0)
但是,此类代码也应返回p_val = 1,但不会:
stats.chisquare(0.9*city_ans.sent, city_ans.sent)
# Power_divergenceResult(statistic=10591.249999999995, pvalue=0.0)
UPD:
f_obs = weeks_ans.answered / np.sum(weeks_ans.answered)
f_exp = weeks_ans.sent / np.sum(weeks_ans.sent)
stats.chisquare(f_obs, f_exp)
# Power_divergenceResult(statistic=0.064491479990141154, pvalue=1.0)
它的结果似乎不错,但我认为这里没有什么。
例如,使用以下方法查看下面的分布:
# Power_divergenceResult(statistic=0.064491479990141154, pvalue=1.0)
使用分布相同的测试是否公平
最佳答案
正如@Crasy Ivan指出的那样,卡方检验需要在观察值和预期值中具有相同数量的观察值或计数。
在这种情况下,数据似乎来自两个不同的样本。这本质上是2×K列联表,并且在计算预期频率计数时,将通过行总数来纠正每一行具有相同分布的假设。
因此,对于两个样本案例,直接使用卡方检验是错误的检验。 scipy.stats对列联表中的独立性进行卡方检验。
关于非常大数目的一般性评论,这里似乎是这样:
随着样本量的增加,零假设将被拒绝,并且对于与零假设的任何很小但非零的偏差,p值将变为零。通过计数(即观察的总数)超过50,000,正确的假设检验很可能会拒绝即使是统计上显着但与应用无关的微小差异。
一种替代方法是使用等效检验来检验以下假设:两个分布的差异相差不大。困难在于难以根据拟合优度统计来指定等效阈值。