python卡方检验筛选特征,python实现卡方检验

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: