一文详解 如何用 R 语言进行卡方检验。

本文主要介绍如何用R语言进行 卡方检验,将按以下顺序进行介绍。
一文详解 如何用 R 语言进行卡方检验。_第1张图片

一、卡方检验基本概念

1、基本原理:卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,如果卡方值越大,二者偏差程度越大;反之,二者偏差越小;若两个值完全相等时,卡方值就为0,表明理论值完全符合。
注意:卡方检验针对分类变量。
2、常见用途:检验两个变量之间是否有关系,比如机器学习中的特征选择,以及医学领域(这块我不了解~~)。
3、计算公式:
3.1通用公式:
一文详解 如何用 R 语言进行卡方检验。_第2张图片
observed:观察频数
expected:理论频数
3.2四格卡方值快速计算公式(又叫拟合度公式):
一文详解 如何用 R 语言进行卡方检验。_第3张图片
4 自由度:简称df(degree of freedom),指的是计算某一统计量时,取值不受限制的个数。
5、适用条件:
1、四格卡方表中的理论频数都应大于5,且n>40
2、当n>40,但理论频数大于 1 且小于5时,此时计算卡方值的通用公式需要进行校正,或者用fisher精确检验,在R语言中的函数为fisher.test()。
6、校正后的卡方值计算公式:
在这里插入图片描述
二、例题计算

假设我们现在有这样一份原始数据:(乱造的)
一文详解 如何用 R 语言进行卡方检验。_第4张图片
我们想探究一下感冒与喝牛奶之间是否有关联,接下来,我们将原始数据转换为四格卡方值,因为两个变量都只有两个值(是与否),所以就是四格卡方检验,当然可能您要检验的其他两个变量之间有其他的特征值,比如有变量天气(晴天,雨天,阴天,下雪)与变量出门(是,否),那这个时候就成了4*2格卡方检验,好了,简单的提一下,不扯远了~,那么经过统计转换后的四格卡方数据如下:
一文详解 如何用 R 语言进行卡方检验。_第5张图片
更一般的格式是这样的:

一文详解 如何用 R 语言进行卡方检验。_第6张图片
好了,现在的数据处理已经完了,接下来就该进行假设检验了,
让我们再回顾一下临界值法假设检验的步骤吧:
1 、给出原假设,备择假设
2 、找统计量,此时需要知道统计量的分布。
3、在给定显著性水平下,求出临界值,构造拒绝域。
4、求出观察值
5、将临界值与观察值进行比较,得出假设检验的结论。
好了,接下来就将问题代入到假设检验的步骤中吧。
小提示:卡方分布为右侧单边检验,如下,这就是一个卡方分布的概率密度函数。一文详解 如何用 R 语言进行卡方检验。_第7张图片
好了,现在正式开始临界值法 假设检验,先说下原理吧。
临界值法假设检验原理:在给定显著性水平α 和统计量的概率密度函数的条件下,我们可以求得拒绝域的临界值,如果我们计算出统计量的观察值落入了拒绝域内,即我们拒绝原假设,否则我们就接受原假设。
现在正式开始 ^ ^
STEP1:原假设:感冒与喝牛奶没有关系 (通常是我们希望推翻的假设,故又称零假设)
备择假设:感冒与喝牛奶有关系。
STEP2:找统计量,此时的统计量就是我们的卡方值计算公式,分布就是卡方分布。统计量:
在这里插入图片描述
STEP3:给定显著性水平α=0.05,此时自由度df=(行数–1)*(列数–1)=1
切勿认为,四格卡方数据中,行数=列数=3
现在,在卡方分布的条件下,我们就可以计算出拒绝域的临界值了:
我用R语言来求:
一文详解 如何用 R 语言进行卡方检验。_第8张图片
上面已经提到过,卡方检验为右侧单边检验,所以拒绝域就是K=[3.8414,∞] (临界值我取了个大概为3.8414)
STEP4:求观察值
求观察值这里,需要细讲一下,我们现在已知观察频数表,重要的是如何求得理论频数表,
一文详解 如何用 R 语言进行卡方检验。_第9张图片

现在我们再回头看我们的原假设:感冒与喝牛奶没有关系
在这个假设下,我们可以根据观察频数表求得感冒率:感冒人数 / 总人数=110/220=0.5,即感冒率就是0.5
那么,现在我们就开始填充上面的理论频数表:
1、先填充理论频数表中的喝牛奶这一行:
根据观察频数表我们知道现在喝牛奶的有120个人,感冒率为0.5,则理论频数表中的’a?’=120 × 感冒率=120*0.5=60,同理,不感冒率为1-0.5,则‘b?’=喝牛奶人数 ×不感冒率=120 ×(1-0.5)=60
2、再填充理论频数表中的不喝牛奶这一行:
不喝牛奶的有100人,感冒率为0.5,则‘c?’=100×0.5=50
同理,‘d?’=不喝牛奶人数 × 不感冒率=100×(1-0.5)=50
至此,我们的理论频数表就填充完成了,如下:
一文详解 如何用 R 语言进行卡方检验。_第10张图片
注意:当理论频数表中有理论值小于5时,则应该使用校正后的卡方值计算公式,公式已经写在上面。
可以尝试用R语言来检验一下是否计算正确:
一文详解 如何用 R 语言进行卡方检验。_第11张图片
可以看到,我们的计算结果正确。
现在我们开始计算观察值,也就是前面我们提到的卡方值通用公式计算:
一文详解 如何用 R 语言进行卡方检验。_第12张图片
当然,对于四格卡方检验,我们也可以拟合度公式来快速求出卡方值。

STEP5:可以很明显看出观察值89.83>3.8414,即我们的观察值落入了拒绝域内,我们就拒绝原假设,接受备择假设,即感冒与喝牛奶有关系。。

三、用R语言来进行卡方检验。
3.1、卡方检验的函数:
首先来看下R语言中进行卡方检验的公式:
一文详解 如何用 R 语言进行卡方检验。_第13张图片
特别需要注意一下这个参数correct,它默认的就是TRUE,即进行卡方值修正,也就是上面我们说的那个校正公式。
一文详解 如何用 R 语言进行卡方检验。_第14张图片
你看,现在的卡方值怎么为87.285,但是我们用通用公式计算的不是89.83多吗?,现在我把参数correct设置为F:
一文详解 如何用 R 语言进行卡方检验。_第15张图片
可以看到,现在卡方值和我们原来用通用公式计算的相同了,且P-value<2.2e-16,远小于我们的显著性水平α=0.05,即我们拒绝原假设。
3.2 P值检验法、
好了,既然说到用R来进行卡方检验了,就再提一下另外一种假设检验方法,即P值检验法,它的假设检验步骤如下:
1、给出原假设,备择假设。
2、给出统计量,需要已知该统计量的分布。
3、根据样本,求出该统计量的观察值,依据观察值与该统计量的分布函数,我们可以求出拒绝原假设的最小的显著性水平P。
4、比较P与给定的显著性水平α,若P<=α,则在显著性水平α下拒绝原假设,否则,接受原假设。
而我们用R语言进行假设检验,通常都是P值法假设检验,其实临界值法假设检验和P值法假设检验,二者是殊途同归。
从已求得的卡方观察值为89.3,那么拒绝原假设的最小的显著性水平P是多少呢?下面我将用卡方分布的分位数函数来求出P值:
一文详解 如何用 R 语言进行卡方检验。_第16张图片
我们可以看到,P值约为2.5985e-21,而chisq.test给出的P值应该是压缩了一些。
好了,以上就是这篇文章的全部内容了,本文基本纯手打,如果有错误,还请各位大佬指出,非常感谢!如果有帮助到您,欢迎点赞、收藏 ^ ^
参考:
https://www.jianshu.com/p/bb0bd72bc428

你可能感兴趣的:(一文详解 如何用 R 语言进行卡方检验。)