参考资料:R语言实战【第2版】
R语言提供了多种检验类别型变量独立性的方法。
1、卡方独立性检验
我们可以使用chisq.test()函数对二维表的行变量和列变量进行卡方独立性检验。
R
# 导入vcd包
library(vcd)
# 创建联列表
mytable<-xtabs(~Treatment+Improved,data=Arthritis)
# 查看列联表
mytable
# 卡方检验
chisq.test(mytable)
结果解读:卡方值为13.055,对应的p值为0.001463,小于0.05,说明治疗方案和改善水平之间存在显著的相关关系。对于本例而言,如果联列表中有一个单元格的数值小于5,则卡方值的计算需要进行矫正。
2、Fisher精确检验
我们可以使用fisher.test()函数进行Fisher精确检验。Fisher精确检验的原假设是:边界固定的列联表中行和列是相互独立的。其调用格式为:fisher.test(mytable),其中mytable是一个二维列联表。示例如下:
R
# 创建列联表
mytable<-xtabs(~Treatment+Improved,data=Arthritis)
# 查看列联表
mytable
# Fisher精确检验
fisher.test(mytable)
值得注意的是:这里的fisher.test()函数可以在任意行列数大于等于2的联列表上使用,但不能用于2×2的列联表。
3、Cochran-Mantel-Haenszel检验
mantelhaen.test()函数可用来进行Cochran-Mantel-Haenszel卡方检验,其原假设是,两个名义变量在第三个变量的每一层中都是条件独立的。下列大妈可以检验治疗情况和改善情况在性别的每一水平下是否独立。此检验假设不存在三阶交互作用(即治疗情况×改善情况×性别)。
R
# 创建三维的联列表
mytable<-xtabs(~Treatment+Improved+Sex,data=Arthritis)
# Cochran-Mantel-Haenszel检验
mantelhaen.test(mytable)
结果表明,患者接受的治疗方案与得到的改善情况在性别的每一水平下并不独立。
4、相关性的度量
如果在独立性检验中拒绝了原假设(即相互独立),那么我们的兴趣点就会转向用以衡量相关性强弱的相关性度量。vcd包中的assocstats()函数可以用来计算二维列联表的phi系数、列联系数和Cramer's V系数。
R
# 加载vcd包
library(vcd)
# 创建联列表
mytable<-xtabs(~Treatment+Improved,data=Arthritis)
# 联列表相关性分析
assocstats(mytable)
总体来说,较大的值意味着较强的相关性。vcd包也提供了kappa()函数,可以计算混淆矩阵的Cohen's kappa值以及加权的kappa值(举例说明,混淆矩阵可以表示两位判断者对于一系列对象进行分类所得结果的一致程度)。