使用 scipy 进行卡方检验:chi2_contingency 和 chisquare 有什么区别?

机器算法验证 假设检验 统计学意义 卡方检验 Python scipy
2022-03-25 19:46:43

我想用 scipy 在 Python 中运行卡方检验。我已经创建了代码来执行此操作,但我不知道我所做的是否正确,因为 scipy 文档非常稀疏。

背景第一:我有两组用户。我的零假设是,两组中的人是否更有可能使用台式机、移动设备或平板电脑没有显着差异。

这些是在两组中观察到的频率:

[[u'desktop', 14452], [u'mobile', 4073], [u'tablet', 4287]]
[[u'desktop', 30864], [u'mobile', 11439], [u'tablet', 9887]]

这是我的代码使用scipy.stats.chi2_contingency

obs = np.array([14452, 4073, 4287], [30864, 11439, 9887])
chi2, p, dof, expected = stats.chi2_contingency(obs)
print p

这给了我一个 p 值2.02258737401e-38,这显然很重要。

我的问题是:这段代码看起来有效吗?特别是,鉴于我拥有的数据,我不确定是否应该使用scipy.stats.chi2_contingencyscipy.stats.chisquare

2个回答

可能你已经解决了它,但我让这个在这里帮助任何迷路的人,就像我一样。不同之处在于零假设

scipy.stats.chi2_contingency,来自Scipy

“列联表中变量独立性的卡方检验”

在此测试中,您正在测试两个或多个变量之间是否存在关系。这称为 独立性卡方检验,也称为皮尔逊卡方检验关联卡方检验在此测试中,您正在测试两个或多个变量之间的关联。在您的示例中,无效的假设是“在选择要使用的设备时组没有影响”

Scipy的scipy.stats.chisquare

“卡方检验检验分类数据具有给定频率的零假设。”

在这里,您正在比较观察和预期频率之间是否存在差异。因此,零假设是“观察到的和预期的之间没有任何区别”在这里,测试用于将观察到的样本分布与预期的概率分布进行比较。这称为卡方拟合优度检验

您的代码有效。当您chi2_contingency想要测试两个(或更多)组是否具有保存分布时使用。零假设:两组没有显着差异。

当您chisquare想测试一个(离散)随机变量是否具有特定分布时使用。零假设:随机变量与指定分布没有显着差异。

例如,你掷硬币 1100 次,得到 553 个正面 547 个反面。你假设它有 0.5 的概率得到正面。

>> _, pvalue = chisquare([553, 547], [1100 * 0.5, 1100 * 0.5])
>> print(pvalue)
0.8564407259982999

所以 p > 0.1,它并不显着,你不会拒绝这个假设。

总之,chi2_contingency当您不知道基础分布但想要测试两个(或更多)组是否具有相同的分布时,您可以使用。chisquare当您有一个分布并且想要测试一个组是否与该分布匹配时,您可以使用。