独立性检验
1. 卡方检验
对于2维的频率表,我们可以使用R语言的卡方检验函数chisq.test()来进行独立性检验,用以判断行变量和列变量之间是否相关。其实独立性检验本身就是用来判断变量之间相关性的方法,如果两个变量彼此独立,那么两者统计上就是不相关的。
需要注意的是卡方检验要求列联表中每格的数值或者期望值大于5,如果该条件不满足,那么R中就会使用Yate’s矫正公式进行计算:
代码语言:javascript复制A <- c(rep("male",15),rep("female",20),rep("male",15))#创建变量A
B <- c(rep("healthy",4),rep("sick",35),rep("healthy",11))# 创建变量B
C <- c(rep("smoker",26), rep("nonsmoker",24)) # 创建变量C
mydata <- data.frame(A,B,C) # 利用以创建的变量构建数据框
mytable <- table(A,C) #生成二维频数表
chisq.test(mytable) #卡方检验判断A和B的相关性
Pearson's Chi-squared test with Yates'continuity correction
data: mytable
X-squared = 0.0033387, df = 1, p-value = 0.9539
在这里,卡方检验的假设检验是:
(1) 零假设(H0):吸烟和性别不相关(实际分布和理论分布一致)。
(2) 备择假设(H1):吸烟和性别相关(实际分布和理论分布不一致)。
(3) 检验水准:alpha=0.05
以alpha=0.05的检验水准来看,由于p-value >0.05,所以在这里吸烟行为和性别无关。
在这里,P值是用卡方分布计算出来的,我们也可以是用蒙特卡洛(Monte Carlo)算法来计算p值,只要加上参数simulate.p.value = FALSE,在这里就不详细介绍了,有兴趣的朋友可以自己去了解了解。
2. 费希尔精确检验(Fisher Exact Test)
费希尔精确检验是一个基于超几何分布的检验变量间独立性的方法,在R语言中可以直接使用fisher.test(x)函数来进行计算,这里x通常就是一个二维的列联表。
代码语言:javascript复制fisher.test(mytable)
在R中输出的结果有p值、备择假设、95%置信区间、OR值,从结果来看p-value>0.05,说明吸烟和性别不相关,这个结论和卡方检验的结果一致。
3. Mantel-Haenszel检验
Mantel-Haenszel检验又称为Cochrane-Mantel-Haenszel(CMH)检验,它主要针对的是分层数据,它的零假设是两个分类变量在调整组间差异后是彼此独立的,他们之间是没有其它的交互作用。在R语言中我们可以通过mantelhaen.test(x)函数来实现,这里x通常是一个三维数据表。
代码语言:javascript复制mytable <- table(C, B, A) #将性别作为调整的因素
代码语言:javascript复制mantelhaen.test(mytable) #进行CMH检验,判断在矫正性别后,吸烟和健康之间是否有关
从上面的结果可以看出,以alpha=0.05为检验水准时,p-value < 0.05说明在矫正性别之后吸烟和健康有关,同时依据OR值大于1可以说明吸烟是健康的危险因素。CMH检验还在Meta分析中有着巨大的作用,在后续的内容中我会详细讲解。