卡方检验

我们之前学过很多的统计推断,一般都是建立在已知总体分布的前提下,特别是假定总体服从正态分布,对参数的区间估计及参数的假设检验。但在许多实际问题中,往往对总体分布形式一无所知,我们手中所掌握的只是观测到的一些数据资料,现需要通过这些数据来推断总体分布类型。总体分布密度函数的近似解—直方图,可大致看出总体的分布形状,加上对实际问题的分析来推测,然后用假设检验的方法来确定。这种判断总体是否服从某种分布的检验问题,通常称为分布的拟合优度检验。下面介绍的是最常用的一种—卡方拟合检验。
待检验的假设:
H0:总体X的分布函数为F(x).
H1:总体X的分布函数不是F(x).
其中F(x)是推测出的一个确定的函数。
那么接下来:
(1)将总体X的取值范围分成k个互不相交的小区间A1,A2,A3,…,Ak,如可取A1=(a0,a1],A2=(a1,a2],…,Ak=(ak-1,ak),其中a0可取-∞,ak可取+∞,区间的划分视具体情况而定。
(2)把落入第i个小区间的Ai的样本值的个数记作fi,成为组频数(真实值),所有组频数之和f1+f2+…+fk等于样本容量n。
(3)当H0为真时,根据所假设的总体理论分布,可算出总体X的值落入第i 个小区间Ai的概率pi,于是,npi就是落入第i个小区间Ai的样本值的理论频数(理论值)。
(4)当H0为真时,n次试验中样本值落入第i个小区间Ai的频率fi/n与概率pi应很接近,当H0不真时,则fi/n与pi相差很大。基于这种思想,皮尔逊引进如下检验统计量
χ 2 = ∑ i = 1 k ( f i − n p i ) 2 n p i {\chi ^{\rm{2}}}{\rm{ = }}\sum\limits_{i = 1}^{\rm{k}} {\frac{{{{\left( {{f_i} - n{p_i}} \right)}^2}}}{{n{p_i}}}} χ2=i=1knpi(finpi)2
在原假设H0成立时,由大数定理知,若样本容量较大, ∣ m i n − p i ∣ \left| {\frac{{{m_i}}}{n} - {p_i}} \right| nmipi的值应该比较小(简单点说就是在样本量越大的情况下,其结果越接近于理论值,就好像投币游戏一样),从而可以证明统计量 χ 2 \chi^2 χ2近似服从自由度为k-1的卡方分布 。
(5)对给定的显著性水平 α \alpha α,为使犯第二类错误的概率最小,应选取拒绝域 W = { χ 2 > χ 1 − α 2 ( d f ) } W = \left\{ {{\chi ^2} > \chi _{1 - \alpha }^2(df)} \right\} W={χ2>χ1α2(df)}
当计算得到的卡方值落在拒绝域内,那我们便拒绝原假设H0。这里关于显著性检验的只是我就不多讲了(有可能我会另外写篇博客讲讲)。
注:
  在卡方检验中,要求样本容量较大,至少要大于50,理论频数不小于5,至于自变量划分的组数k没有严格规定,通常样本容量n大些,k也可稍大些,一般应有5<=k<=16.
  大家可能会问自由度是什么意思,k-1又是怎么来的,其实自由度的计算依赖于卡方检验的场景,以下是常用的两种计算方式:
  1、如果我们是做分布拟合优度检验,也就是检验F(x)函数的拟合效果
  自由度df = k-1-r
  其中k是自变量划分组数,r是总体分布F(x)中需要用样本进行估计的未知参数的数目。
  2、如果我们是做相关性分析,也就是检验分类变量的独立性(例如典型的四格卡方检验,下面会讲一个示例)
  自由度df =(行数-1)(列数-1)
  这里我看过一篇博客(用可视化思维解读统计自由度)说的挺有意思的,可以帮助大家很直观地理解到这个概念。
例子:四格卡方检验
以下为一个典型的四格卡方检验,我们想知道喝牛奶对感冒发病率有没有影响:

感冒人数未感冒人数合计感冒率
喝牛奶组439613930.94%
不喝牛奶组288411225.00%
合计7118025128.29%

通过简单的统计我们得出喝牛奶组和不喝牛奶组的感冒率为30.94%和25.00%,两者的差别可能是抽样误差导致,也有可能是牛奶对感冒率真的有影响。为了确定真实原因,我们先假设
H 0 : 喝 牛 奶 对 感 冒 发 病 率 没 有 影 响 H0:喝牛奶对感冒发病率没有影响 H0即喝牛奶喝感冒时独立无关的,所以我们可以得出感冒的发病率实际是 ( 43 + 28 ) / ( 43 + 28 + 96 + 84 ) = 28.29 (43+28)/(43+28+96+84)= 28.29% 43+28/43+28+96+84=28.29所以,理论的四格表应该如下表所示:

感冒人数未感冒人数合计
喝牛奶组=139*0.2829=139*(1-0.2829)139
不喝牛奶组=112*0.2829=112*(1-0.2829)112

即下表:

感冒人数未感冒人数合计
喝牛奶组39.323199.6769139
不喝牛奶组31.684880.3152112
合计71180251

如果喝牛奶喝感冒真的是独立无关的,那么四格表里的理论值和实际值差别应该会很小。
根据卡方检验公式可以计算得到卡方值为:
χ 2 \chi^2 χ2 = (43 - 39.3231) 2 ^2 2/ 39.3231 + (28 - 31.6848) 2 ^2 2 / 31.6848 + (96 - 99.6769) 2 ^2 2/ 99.6769 + (84 - 80.3152) 2 ^2 2 / 80.3152 = 1.077
  上一步我们得到了卡方值,但是如何通过卡方值来判断喝牛奶和感冒是否真的是独立无关的?也就是说,怎么知道无关性假设是否可靠?这便是上面讲到的第五步,我们先设定显著性水平 α \alpha α=0.05,计算自由度df=1,通过查询卡方分布的临界值表得到拒绝域W( χ 2 > 3.84 \chi^2>3.84 χ2>3.84)。即如果我们计算得到的卡方值落入拒绝域W中,意味着小概率(低于0.05的概率)事件发生,也可以说实际值与理论值之间存在显著性差异。显然,1.077为落入拒绝域内,所以无法推翻原假设H0,即喝牛奶对感冒发病率没有影响。
注:例子是借用的博文统计学——卡方检验和卡方分布,但是他的例子结果是错的,说的有点混乱。
最后,我再说两个我用过的python方法,都是用来做卡方检验的:
1.from scipy.stats import chi2
2.from sklearn.feature_selection import chi2
具体的使用方式你们自己去看看API吧,我就不讲了-.-

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值