python 卡方检验批量筛选_用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\),那么拒絕原假設,認為性別與流失是不獨立的。
總結
以上是生活随笔為你收集整理的python 卡方检验批量筛选_用python和Excel进行列联表分析(卡方检验)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 脉冲时间宽度c语言,基于AT89C52脉
- 下一篇: python批量下载Cmorph降水资料