Python:卡方列联检验(如何解释)
Posted
技术标签:
【中文标题】Python:卡方列联检验(如何解释)【英文标题】:Python: chi-squared contingency test (how to interpret) 【发布时间】:2021-08-04 15:12:20 【问题描述】:我已经完成了如下卡方应变检验的练习,但我在如何解释结果方面遇到了问题。 以下测试的结果显示 p-val = 0。 那么这是否意味着两个变量不独立? 由于这是一个小数据,我认为变量是独立的。 p-val 为 0 似乎很奇怪。 我是不是做错了什么??
import pandas as pd
df = pd.DataFrame(
"~60m2" : [54, 577, 143, 782],
"60~85m2" : [2, 735, 1437, 1],
"85m2~" : [0, 142, 44, 0],
)
df.index = ["A", "B", "C", "D"]
df.columns.names = ["size"]
df.index.names = ["city"]
from scipy import stats
stats.chi2_contingency(df)
输出
(2064.576731417199,
0.0,
6,
array([[ 22.24559612, 31.09522594, 2.65917794],
[577.59101353, 807.36533061, 69.04365586],
[645.12228746, 901.76155221, 77.11616033],
[311.04110288, 434.77789124, 37.18100587]]))
【问题讨论】:
只是来自docs 的注释:An often quoted guideline for the validity of this calculation is that the test should be used only if the observed and expected frequencies in each cell are at least 5
。可能不是答案,但可能是问题所在。
【参考方案1】:
我认为这是正确的。你们的城市非常不同。尝试按行归一化:
(df.T / df.sum(axis=1)).T
size ~60m2 60~85m2 85m2~
city
A 0.964286 0.035714 0.000000
B 0.396836 0.505502 0.097662
C 0.088054 0.884852 0.027094
D 0.998723 0.001277 0.000000
每一行都与其他行非常不同,所以是的,城市似乎不同,即从不同人群中抽样。
【讨论】:
以上是关于Python:卡方列联检验(如何解释)的主要内容,如果未能解决你的问题,请参考以下文章
R语言构建仿真列联表并进行卡方检验(chisq.test):检验两个分类变量是否独立输出期望的列联表
R语言使用gmodels包的CrossTable函数计算获取二维列联表CrossTable函数可以设置输出比率(行比率列比率单元格比率)指定小数位的个数执行卡方检验Fisher精确检验等