![b4e774b5ada9ade8628969e0031c617e.png](https://i-blog.csdnimg.cn/blog_migrate/8421197a3b502bd13ab3efb0d3304d03.png)
阅读本章之前,你需要掌握的R语言编程知识
- 矩阵的操作
问题引入:
为了研究吸烟是否与患肺癌相关,对63位肺癌患者及43名非肺癌患者(对照组)调查了其中的吸烟人数,得到2x2列联表,如下表所示:
![4738866d91dd2242b4e01e9ef46e7a7e.png](https://i-blog.csdnimg.cn/blog_migrate/db06b61384f81facc23de50b8bd606d0.png)
根据以上数据,我们能否说明抽烟与肺癌之间存在关联?
1.何为列联表
由问题引入的表格,可以看出,该试验研究了两个变量(肺癌和吸烟)。其中肺癌的变量有两个值(患肺癌和不患肺癌),占据了第一行的位置,而吸烟这个变量也有两个值(吸烟和不吸烟),占据了第一列的位置。这两个变量之间有交叉,一共有2*2种情况。像这样的,由两个或两个以上的变量进行交叉分类的频数分布表就是列联表。
2.列联表中变量独立性的判断
这里,我们不详细说统计学上的各种东西,而是给出相应的结论,并说明在R中是如何具体操作。
2.1 卡方检验
卡方检验,或称
卡方检验的具体分析过程如下:
对于一个的
检验统计量:
其中,
拒绝域:
注意:使用
1. n个观测计数是总体的一个随机样本,可认为它是有
2.为了保证
好了卡方检验的具体流程如上所示,是不是觉得很麻烦,但是用R语言却很方便。
在R语言中使用chisq.test函数 进行卡方检验。它的具体用法为:
chisq.test(x, y = NULL, correct = TRUE,
p = rep(1/length(x), length(x)), rescale.p = FALSE,
simulate.p.value = FALSE, B = 2000)
参数解释:
X : 数值向量、矩阵或因子
y : 如果x是矩阵,y可以忽略。如果x是因子,y必须是同样长度的因子
其余的参数用到的不多,如果用到,可以查询相关资料。
下面我们来看看针对该道问题,如何进行卡方检验
首先,我们构造假设
其中,自由度为1
然后,在RStudio中,对该题目数据进行卡方检验
> a <- matrix(c(60,3,32,11),ncol = 2)
> chisq.test(a)
程序的结果是
Pearson's Chi-squared test with Yates' continuity
correction
data: a
X-squared = 7.9327, df = 1, p-value = 0.004855
p值为0.0048,小于0.05,因此拒绝原假设,而认为肺癌跟吸烟有关。
2.2 Fisher检验
2.1中介绍了卡方检验,这是一种“近似"的检验,样本容量大越大,检验的近似性越好。但是对于小样本(单元估计的期望值小于5),渐进卡方检验的p值可能不是实际精确p值的很好估计,此时,可以采用Fisher精确检验方法。
问题引入:
某医师为研究乙肝免疫球蛋白预防胎儿宫内感染HBV的结果,将33例HBsAg阳性孕妇随即分为预防注射组和对照组,结果由下表所示,问两组新生儿的HBV总体感染率有无差别?
![a80e86b92502f3b63d513b4f0f94809b.png](https://i-blog.csdnimg.cn/blog_migrate/92ed0266b7031d2c0a26e66d7f457772.jpeg)
在介绍Fisher检验之前,先介绍一个概念,边际分布。在这题中,边际分布就是每行每列的和,也就是上述表中合计所在的行和列。
以本题为例,最小期望值T=(11*9)/33=3 < 5 ,因此不能采用卡方检验,而采用Fisher检验。
首先,构造假设
Fisher检验基于的是超几何分布,首先假设所有事件都是等可能性的,那么发生上述表中是事情的概率等同于22个预防注射组中有4人为阳性,同时11个对照组中5人为阳性的概率。
我们的备择假设(即原假设不成立)是二者有关联,然后考虑预防注射组中阳性人数小于4的各种极端情况,例如下图是预防注射组的22人全是呈现阴性,如下表所示。
![ffa782cdc5db7f55a7c86622413180ea.png](https://i-blog.csdnimg.cn/blog_migrate/8de4835de27124f7efd2fa47714d2a2d.jpeg)
利用超几何分布公式计算概率
因此,将预防注射组呈现阳性的人数分别为4,3,2,1,0的超几何概率值相加,即可得到Fisher检验的精确p值。
p值大于0.05,不能拒绝原假设,因此可以认为二者之间无关联
但是,这样计算是不是非常复杂,好在R语言中有相应的函数fisher.test,其用法如下:
fisher.test(x, y = NULL, workspace = 200000, hybrid = FALSE,
hybridPars = c(expect = 5, percent = 80, Emin = 1),
control = list(), or = 1, alternative = "two.sided",
conf.int = TRUE, conf.level = 0.95,
simulate.p.value = FALSE, B = 2000)
常用参数解释
x:二维矩阵或者因子
y:因子,如果x为矩阵,忽略
alternative : 备择假设是两侧检验(two sides),大于(greater),小于(less)
conf.level: 置信水平,默认0.95
因此上述问题,用R语言进行Fisher检验,步骤如下
> c <- matrix(c(4,5,18,6),ncol = 2)
> fisher.test(c,alternative = "less")
结果为:
Fisher's Exact Test for Count Data
data: c
p-value = 0.1081
alternative hypothesis: true odds ratio is less than 1
95 percent confidence interval:
0.000000 1.376403
sample estimates:
odds ratio
0.2791061
p值为0.108,和之前计算结果一样。
3.总结
本篇文章介绍了如何使用R语言检验列联表藏中变量的独立性,先将本章内容总结在下表中
![3bbf54f3134848aa5bd730ae11c1f8e1.png](https://i-blog.csdnimg.cn/blog_migrate/db0055f0a27454b6394c99034fc87982.png)
好了,关于列联表中变量独立性的判断的介绍就到这了,如果有什么问题,欢迎在下方留言,(*^▽^*)