stats.chisquare错误地返回p_value = 0

时间:2017-12-07 16:06:48

标签: python python-3.x scipy statistics

我在每个类别中都有这样的预期和频率,如下所示:

enter image description here

enter image description here

他们似乎非常相似,但卡方测试并不这么认为:

Uncaught SyntaxError: Unexpected token import

小于10的过滤值不会发生太大变化:

stats.chisquare(city_ans.answered, city_ans.sent)
# Power_divergenceResult(statistic=893005.32003277098, pvalue=0.0)

我做错了什么? 我如何在这里申请F - 测试?

PS。使用与obs和exp相同的值的此测试 - 返回p_val = 1

stats.chisquare(city_ans[city_ans.answered > 10].answered, city_ans[city_ans.answered > 10].sent)

# Power_divergenceResult(statistic=892917.3023088905, pvalue=0.0)

但是这样的代码也应该返回p_val = 1,但它不会:

stats.chisquare(city_ans.sent, city_ans.sent)
# Power_divergenceResult(statistic=0.0, pvalue=1.0)

UPD:

stats.chisquare(0.9*city_ans.sent, city_ans.sent)
# Power_divergenceResult(statistic=10591.249999999995, pvalue=0.0)

它似乎相当不错的结果,但我觉得有些东西不在这里。

例如,查看下面的分布,同样的方法:

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)

使用这样的测试是否公平,分布是相同的

enter image description here

1 个答案:

答案 0 :(得分:2)

正如@Crasy Ivan所指出的,chisquare测试需要相同数量的观察或计数观察和预期计数。

在这种情况下,似乎数据来自两个不同的样本。这本质上是一个2乘K列联表,并且每行具有相同分布的假设将由计算预期频率计数的行总数进行校正。

因此,直接使用chisquare测试是两个样本案例的错误测试。 scipy.stats对列联表中的独立性进行了chisquare测试。

关于非常大的计数的一般性评论,似乎就是这样:

随着样本量的增长,零假设将被拒绝,并且对于与零假设的任何小但非零的偏差,p值将变为零。随着计数,即观察总数,超过50,000,正确的假设测试很可能会拒绝甚至在统计上显着但在应用中无关的小差异。

另一种方法是使用等价测试来检验这两个分布相差不超过一小部分的假设。困难在于难以根据某些拟合优度统计量来指定等效阈值应该是什么。