先引用一段R IN ACTION 的话:R提供了多种检验类别型变量独立性的方法。本节中描述的三种检验分别为卡方独立性检验、Fisher精确检验和Cochran-Mantel–Haenszel检验。
你可以使用chisq.test()函数对二维表的行变量和列变量进行卡方独立性检验。示例参见代码清单7-13。
# Listing 7.13 - Chis-square test of independence
> library(vcd)
> mytable <- xtabs(~Treatment+Improved, data=Arthritis) --这里是要检验的两个列属性:Treatment ,Improved,构建一个交叉相乘表。
> mytable
Improved
Treatment None Some Marked --这里显示交叉相乘的结果
Placebo 29 7 7
Treated 13 7 21
> chisq.test(mytable) --下面使用了卡方函数测量两个变量是否对立。
Pearson's Chi-squared test
data: mytable
X-squared = 13.055, df = 2, p-value = 0.001463 --从结果显示, p-value非常小, 可认为是Treatment ,Improved不独立, 存在某种相关关系。
下面我们再用卡方独立检查函数检查一组相互独立的属性, 以进行对比学习:
> mytable <- xtabs(~Sex+Improved, data=Arthritis)
> mytable
Improved
Sex None Some Marked
Female 25 12 22
Male 17 2 6
> chisq.test(mytable)
Pearson's Chi-squared test
data: mytable
X-squared = 4.8407, df = 2, p-value = 0.08889 --从这个列在看出, Sex, Improved之间是相对独立的。
那么问题来类, 卡方函数是根据什么原理来判断两个属性是否相对独立的呢? 查了些资料, 卡方函数的计算原理如下:
首先我们介绍一下相关的一个重要概念: 变量类型。
一:分类变量(定性的变量)
该类变量如分类, 等级等等, 如男女, 用于表示变量的属性, 他的取值一定是离散的, 而且不同的取值, 代表不同的性质。
二:定量变量(定量的变量)
该类变量一般为实数, 表示大小不同的度量。
研究不同类型变量的相关性, 自然方法上也会用一些区别:
一:定量变量: 回归分析(三点图, 相关系数等等)
二:定性变量:独立性检查(卡方独立性检查等等)
显然, 卡方独立检测, 是针对分类变量(也叫定性)来使用的, 其基础原理也不复杂, 更多的是使用了概率算法, 如下:
Sex 与Improved到底是否相关?
> addmargins(mytable)
Improved
Sex None Some Marked Sum
Female 25 12 22 59
Male 17 2 6 25
Sum 42 14 28 84
假设: 如果Sex与Improved相互独立, 那么Female的治愈比例和Male的治愈比例应该是大致相等的, 否则可以认为Sex与Improved之间存在某种关系, 影像了Improved的情况, 导致不同性别的Improved情况存在差异.
用公式来表示关系如下:
Female(Marked/SUM(Female)) = Male(Marked/sum(Male))
22/59 = 6/25
0. 37 = 0.24
当数据量巨大的时候, 上述等式应该与接近, 假设在大量数据下, 上述等式还是存在很大差异, 这说明两个变量之间不相互对立。
上述只是基本原理, 卡方检查在此基础上做了很多数学处理(用兴趣的可以查询详情), 建立了卡方检查表作为对立性检查的参考:
当 p-value < 0.1时就可以认为他们之间没有显著的相关性。