用python和Excel进行列联表分析(卡方检验)
用python和Excel进行列联表分析
卡方检验回顾(独立性检验)
行(\(r_i\))列(\(c_j\)) | \(j=1\) | \(j=2\) | \(\cdots\) | 合计 |
---|---|---|---|---|
\(i=1\) | \(f_{11}\) | \(f_{12}\) | \(r_1\) | |
\(i=2\) | \(f_{21}\) | \(f_{22}\) | \(r_2\) | |
\(\vdots\) | \(\vdots\) | \(\vdots\) | \(\vdots\) | |
合计 | \(c_1\) | \(c_2\) | \(\cdots\) | \(n\) |
-
建立原假设和备择假设
\[H_0:\text{两变量独立 }vs\text{ }H_1:\text{两变量不独立 } \] -
计算自由度和理论频数
自由度:\((r-1)*(c-1)\),其中\(r,c\)分别是行数和列数
我们将实际频数记作\(f_{ij}\),期望(理论)频数记作\(e_{ij}\),且\(e_{ij}=\frac{r_i*c_j}{n}\)
-
计算卡方统计量
\[\chi^{2}=\sum\limits_{i=1}^{r} \sum\limits_{j=1}^{c} \frac{\left(f_{i j}-\mathrm{e}_{i j}\right)^{2}}{\mathrm{e}_{i j}} \sim \chi^{2}(d f) \]实际观察次数与理论次数之差的平方再除以理论次数得到的统计量近似服从卡方分布
-
查χ2方分布临界值表,确定接受域
\[\chi_{1-\frac{\alpha}{2}}^{2}(\mathrm{df})<\chi^{2}<\chi_{\frac{\alpha}{2}}^{2}(\mathrm{df}) \]
数据示例
真实频数 | 男 | 女 | 总计 |
---|---|---|---|
未流失 | 29699 | 8954 | 38653 |
流失 | 9660 | 2762 | 12422 |
总计 | 39359 | 11716 | 51075 |
Excel操作
计算期望频数
期望频数 | 男 | 女 | 总计 |
---|---|---|---|
未流失 | 29786.46 | 9572.54 | 39359 |
流失 | 8866.54 | 2849.46 | 11716 |
总计 | 38653 | 12422 | 51075 |
以及真实频数和期望频数的差值
0.257 | 0.799 |
---|---|
0.863 | 2.684 |
- p值:excel用
=CHISQ.TEST(真实频数,期望频数)
,wps用=CHITEST(真实频数,期望频数)
来计算。 - 卡方统计量:用
=SUM()
合计差值区域即可 - 自由度:如前文所述
- 1-置信水平:一般选0.1,0.05,0.01
- 接受域上下界:excel用
=CHISQ.INV.RT(置信水平/2,自由度)
,wps用=CHISQ.INV(置信水平/2,自由度)
所给数据计算结果如下:
p值 | 0.031916 |
---|---|
卡方统计量 | 4.603016363 |
自由度 | 1 |
\(\alpha\) | 0.01 |
上界 | 3.92704E-05 |
下界 | 6.634896601 |
Python代码解决方案
使用scipy.stats.chi2_contingency
来进行卡方检验。
import numpy as np
from scipy.stats import chi2_contingency
#性别
d = np.array([[29699,9660], [8954,2762]])
chi2_contingency(d, correction = False)
#默认correction = True,这里是为了和excel计算结果一致
关于correction
参数,如果为True,且自由度为1,则应用Yates校正以保持连续性。 校正的效果是将每个观察值向相应的期望值调整0.5。
Yates correction资料点击此处,总之它会使得卡方统计量更接近卡方分布。
输出结果如下
(4.60301636324016,
0.03191575584773069,
1,
array([[29786.45965737, 8866.54034263],
[ 9572.54034263, 2849.45965737]]))
输出结果分别为
- 卡方统计量
- p值
- 自由度
- 期望频数
这题p值约为0.032,也就是说当显著性水平\(\alpha\)大于0.032时我们会拒绝原假设,当\(\alpha<0.032\)时我们会接受原假设。如果选择\(\alpha=0.05\),那么拒绝原假设,认为性别与流失是不独立的。