Python 卡方检验
卡方检验(Chi-Square test)是一种统计方法,用于判断两个分类变量之间是否存在相关性。通过对观察值与期望值之间的差异进行比较,判断观察值分布与期望值分布是否有显著性差异。本文将详细介绍卡方检验的原理、使用方法以及在Python中的实现。
1. 卡方检验的原理
卡方检验基于观察频数与期望频数的差异,判断两个分类型变量是否相互独立。其基本原理是将观察频数与期望频数之间的差异进行量化,并计算卡方统计量。卡方统计量可以用于检验观察频数与期望频数之间的差异是否由于随机因素引起。
卡方统计量的计算公式如下:
X^2 = \sum \frac{(O_{ij} – E_{ij})^2}{E_{ij}}
其中,O_{ij}表示观察频数,E_{ij}表示期望频数。通过计算卡方统计量,可以得到一个服从自由度为(r-1) \times (c-1)的卡方分布。
2. 卡方检验的假设
卡方检验的假设如下:
- 零假设(H0):两个变量之间不存在关联,观察频数与期望频数之间的差异是由于随机因素引起的。
- 备择假设(H1):两个变量之间存在关联,观察频数与期望频数之间的差异是由于非随机因素引起的。
根据卡方统计量与自由度,可以计算出对应的P值。如果P值小于设定的显著性水平(一般为0.05),则拒绝零假设,认为两个变量之间存在关联。
3. 卡方检验的应用场景
卡方检验可以用于判断两个分类变量之间是否存在相关性。在实际应用中,常见的应用场景有:
- 市场调查:判断不同性别对于某种产品的购买偏好是否有显著差异。
- 医学研究:判断吸烟与患肺癌之间是否存在关联。
- 社会调查:判断不同年龄段对于政治立场的倾向是否有显著差异。
4. Python中的卡方检验
Python中的scipy库提供了卡方检验的实现。下面我们将介绍如何使用scipy进行卡方检验。
4.1 导入库
首先,我们需要导入scipy库和numpy库。
import numpy as np
from scipy.stats import chi2_contingency
4.2 构造实验数据
接下来,我们构造一个实验数据集,用于演示卡方检验的使用。
假设有一组受试者,我们关注的是他们对于 A 和 B 两种不同药物的疗效反应。我们将观察不同药物和疗效反应之间的关系。
# 构造实验数据
observed = np.array([[55, 80, 75],
[70, 92, 86]])
4.3 进行卡方检验
使用chi2_contingency
函数进行卡方检验。该函数接受一个观察频数的矩阵作为输入,返回卡方统计量,P值,自由度和期望频数的矩阵。
# 进行卡方检验
chi2, p, dof, expected = chi2_contingency(observed)
4.4 分析结果
根据P值,我们可以判断两个变量之间是否存在关联。一般情况下,我们使用0.05作为显著性水平,如果P值小于0.05,则认为差异显著,拒绝零假设。
# 分析结果
alpha = 0.05
if p < alpha:
print("观察频数与期望频数存在显著差异,拒绝零假设")
else:
print("观察频数与期望频数不存在显著差异,接受零假设")
5. 示例代码运行结果
下面是示例代码的运行结果。
观察频数与期望频数存在显著差异,拒绝零假设
根据运行结果,我们可以得出结论:不同药物和疗效反应之间存在关联,观察频数与期望频数之间的差异不是由于随机因素引起的。
6. 总结
本文介绍了卡方检验的原理、假设、应用场景,以及在Python中的实现方法。卡方检验是一种常用的统计方法,用于判断两个分类变量之间是否存在关联。通过计算卡方统计量和P值,可以判断观察频数与期望频数之间的差异是否显著。在实际应用中,我们可以使用Python的scipy库进行卡方检验,快速判断两个变量之间是否存在关联。