如何用r压缩列联表_列联表中变量独立性的判断(R语言版)

b4e774b5ada9ade8628969e0031c617e.png

阅读本章之前,你需要掌握的R语言编程知识

  • 矩阵的操作

问题引入:

为了研究吸烟是否与患肺癌相关,对63位肺癌患者及43名非肺癌患者(对照组)调查了其中的吸烟人数,得到2x2列联表,如下表所示:

4738866d91dd2242b4e01e9ef46e7a7e.png

根据以上数据,我们能否说明抽烟与肺癌之间存在关联?

1.何为列联表

由问题引入的表格,可以看出,该试验研究了两个变量(肺癌和吸烟)。其中肺癌的变量有两个值(患肺癌和不患肺癌),占据了第一行的位置,而吸烟这个变量也有两个值(吸烟和不吸烟),占据了第一列的位置。这两个变量之间有交叉,一共有2*2种情况。像这样的,由两个或两个以上的变量进行交叉分类的频数分布表就是列联表

2.列联表中变量独立性的判断

这里,我们不详细说统计学上的各种东西,而是给出相应的结论,并说明在R中是如何具体操作。

2.1 卡方检验

卡方检验,或称​

检验,被誉为二十世纪科学技术所有分支中的20大发明之一,它的发明者卡尔·皮尔逊是一位历史上罕见的百科全书式的学者,研究领域涵盖了生物、历史、宗教、哲学、法律。

卡方检验的具体分析过程如下:

对于一个​的

列联表 (一个变量有r个取值,另一个有c个取值,也即两因子)

:两个变量是独立的

两个变量是相关的

检验统计量: ​

其中,

拒绝域:

​,其中​
有​
个自由度。

注意:使用​

检验有下面两个假设条件

1. n个观测计数是总体的一个随机样本,可认为它是有​

种可能结果的多项实验

2.为了保证​

近似的有效性,要求对所有单元估计的期望计数​大于或等于5,样本数n>40

好了卡方检验的具体流程如上所示,是不是觉得很麻烦,但是用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

在介绍Fisher检验之前,先介绍一个概念,边际分布。在这题中,边际分布就是每行每列的和,也就是上述表中合计所在的行和列。

以本题为例,最小期望值T=(11*9)/33=3 < 5 ,因此不能采用卡方检验,而采用Fisher检验。

首先,构造假设

Fisher检验基于的是超几何分布,首先假设所有事件都是等可能性的,那么发生上述表中是事情的概率等同于22个预防注射组中有4人为阳性,同时11个对照组中5人为阳性的概率。

我们的备择假设(即原假设不成立)是二者有关联,然后考虑预防注射组中阳性人数小于4的各种极端情况,例如下图是预防注射组的22人全是呈现阴性,如下表所示。

ffa782cdc5db7f55a7c86622413180ea.png

利用超几何分布公式计算概率

因此,将预防注射组呈现阳性的人数分别为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

好了,关于列联表中变量独立性的判断的介绍就到这了,如果有什么问题,欢迎在下方留言,(*^▽^*)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值