python卡方检验筛选特征,python实现卡方检验
Fisher精确检验是基于超几何分布计算的,它分为两种类型:单侧检验(相当于超几何检验)和双侧检验。
在将对象分成两组之后,将其应用于分类数据,以检查两组分类之间是否存在显著关系。
例如:
我想知道高颜值的人数学成绩好吗(数据是编出来的),所以我们随机选了10个人,5个高颜值,5个低颜值。对应的考试成绩如下(这个表叫列联表,英文是contingencies table):
图像
假设:颜值和成就没有显著相关性。
为了知道我们是否可以拒绝零假设,让我们做一个Fisher精确检验(单侧检验)。
第一步:如果你想知道零假设是否成立,那就要看这组数据是不是可以随机偶然抽取出来的。所以我们计算这样一组数据在零假设为真时的超几何概率,也就是高、低面值的人有相同数量的高分和低分:
image.png
第二步:完成以上步骤是不够的。如果行列总数(也叫边际总数)不变,零假设失效的极端情况应该是高面值学习好!然后我们可以得到新的列联表:
图像
此时,可以计算该表的超几何概率,
image.png
那么费雪精确检验的P值就是两者之和,也就是
image.png
p值越小,我们越有信心拒绝零假设。如果以0.05作为显著性水平判断值,可以认为高颜值的人数学学得好。
Python实现
将numpy作为np导入
将matplotlib.pyplot作为plt导入
将scipy.stats作为统计数据导入
obs2=[[9,3],[1,7]]
aa,bb=stats.fisher_exact(obs2,alternative=greater )
打印(aa,bb)
21.0 0.009883305548940234
卡方测验
卡方检验是统计样本的实际观测值与理论推断值之间的偏差程度。实际观测值与理论推断值的偏差程度决定了卡方值。卡方值越大,越不一致。卡方值越小,偏差越小,趋于一致。如果两个值完全相等,则卡方值为0,说明理论值完全一致。
四格表卡方公式:
图像
卡方检验一般要求交叉表中单元格内的值或期望值大于5。当这个条件不满足时,就需要纠正。一般用Yates的校正公式计算卡方值。计算公式为:
图像
在Python中,我们使用scipy模块scipy.stats.chi2_contingency来计算卡方及其p值:
从scipy.stats导入chi2_contingency
#未校正的卡方检验
chi2_contingency([[44,4],[32,10]],False)
#以下结果为:卡方值、p值、自由度和期望频率。
(4.0843179377013969,0.043282916905174974,1,数组([[ 40.53333333,7.46666667],
[ 35.46666667, 6.53333333]]))
#校正卡方检验
chi2_contingency([[44,4],[32,10]],True)
(2.9911133861439323,0.083722586239569685,1,数组([[40.533333333,7.46666667),
[ 35.46666667, 6.53333333]]))
摘要
1.所有理论数T5和总样本量n40均采用皮尔逊卡方检验。
2.如果理论数t <5但T1,且n40,则使用连续性校正卡方检验。
3.如果有一个理论数T <1或N <40,使用费雪检验。
参考
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。