列联表和卡方检验——统计学(十)

在研究某个事物或现象的过程中,往往需要综合考察多个方面的信息,而不仅仅局限于单一维度的分析。为了更全面地揭示数据之间的关系,可以采用交叉分析(也称为交互分析)的方法。交叉分析通过将多个变量联合考察,揭示它们之间的相互作用及关联性。列联分析和对应分析是交叉分析的两种典型形式,它们不仅能够分析变量之间的相关性,还能够简化数据、发现潜在的模式,因此也被视为数据降维分析的一种方法。

一、列联分析

对于定类或定序等定性数据的描述和分析,通常可使用列联表进行分析。这里主要介绍基于列联表χ2 检验的列联分析,并且在此基础之上进行独立性检验、关联度测量以及相关数据的可视化。
两个或两个以上变量交叉形成的二维频数分布表格,称之为列联表,对标多维联合概率密度函数
列联表中变量的属性或取值通常也叫做水平,列联表行变量的水平个数一般用 R 表示,列变量水平的个数一般用 C表示,一个 R 行 C 列的频数分布表叫做 R×C 列联表。
R×C 列联表中各元素 fij就是行列变量进行交叉分类得到的观测值个数所形成的频数分布,行合计表示行变量每个水平在列变量不同水平交叉分类的观测值总数;列合计表示列变量每个水平在行变量不同水平交叉分类的观测值总数;行合计加总应当等于列合计加总,记为总计频数。

#建立2维频率表
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) # 利用以创建的变量构建数据框
attach(mydata) #固定目标数据集
mytable <- table(A,B) # 在这里,A变量的信息变成行,B变成列
mytable # 输出表格
mytable # 输出表格
        B
A        healthy sick
  female       0   20
  male        15   15

二、χ2 分布与检验

列联表的分布主要有观测值分布和期望值分布,同时也计算了观测值和期望值之间的偏差。设 fijo表示各交叉分类频数的观测值,fije表示各交叉分类频数的期望值,则各交叉分类频数观测值与期望值的偏差为

fijofije

χ2统计量为

χ2=i=1rj=1c(fijofije)2fije

当样本量较大时,χ2统计量近似服从自由度为 (R−1)(C−1)的 χ2 分布,χ2值与期望值、观测值和期望值之差均有关,χ2值越大表明观测值与期望值的差异越大。

χ2检验主要有三个用途:单样本方差的同质性检验独立性检验适合性检验。适合性检验和独立性检验都是应用于离散型资料的假设检验,其基本原理是通过χ2值的大小来检验观测值(observed value, O理论值(expected value, E之间的偏离程度。

三、卡方检验R实现

独立性检验

独立性检验(independent test)是判断两个或两个以上因素之间是否具有关联关系的假设检验,常用列联表进行检验。而列联表又可分为2 x 2,2 x c , r x c的形式(r ≥ 3, c ≥ 3),然而实则上三种列联表的计算大同小异,不同的只是2 x 2列联表需要进行连续性矫正。下面将分别以几个例子展示chisq.test()在独立性检验方面的应用。

【例1】简单的2×2列联表的独立性检验。为防治小麦散黑穗病,播种前用某种药剂对小麦种子进行灭菌处理。以未经处理的小麦种子为对照,观察如下表所示,试分析种子灭菌对防止小麦散黑穗病是否有效?

处理方式 发病穗数 未发病穗数
种子灭菌 26 50
种子不灭菌 184 200
df <- matrix( c(26, 184, 50, 200), nr = 2,
dimnames = list(c("MJ", "WMJ"), c( "FB", "WFB" )) )
chisq.test(df)
chisq.test(df.table)
##### 运行结果  #####
Pearson's Chi-squared test with Yates' continuity correction
data:  df
X-squared = 4.2671, df = 1, p-value = 0.03886

由上面的结果可知,p值 = 0.03886 < 0.05,表明种子灭菌与否和散黑穗病发病穗数显著相关。本例中,种子灭菌的发病率显著低于种子未灭菌的,所以小麦种子用该药剂灭菌对防止小麦散黑穗病是有效的。

适合性检验

适合性检验(compatibility test)是比较观测值与理论值是否符合的假设检验。在生物学研究中,有很多情况都会使用到适合性检验,也成为拟合优度检验,下面我们以孟德尔经典的例子来展示chisq.test() 在适合性检验方面的应用。

【例2】 孟德尔用豌豆的两对相对性状进行杂交实验,黄色圆滑种子与绿色皱缩种子的豌豆杂交后,F2代分离的情况为:黄圆315、黄皱101、绿圆108、绿皱32,共556粒,问此结果是否符合自由组合定律9:3:3:1?
检验H0:符合自由组合定律;H1:不符合自由组合定律

x <- c(315, 101, 108, 32)  #输入样本资料
p <- c(9/16, 3/16, 3/16, 1/16)  #输入待检验的比例
chisq.test(x, p = p)
##### 运行结果  #####
Chi-squared test for given probabilities
data:  x
X-squared = 0.47002, df = 3, p-value = 0.9254

chisq.test直接的输出值包括了:卡方值、自由度和p值。从以上的p值来看,这次检验也是接受H0,即实验结果符合自由组合定律的。

2xC列联表的检验

【例3】 现随机抽样对性别和参与的党派进行调查,检验性别与党派是否有关。

M <- as.table(rbind(c(762, 327, 468), c(484, 239, 477)))
dimnames(M) <- list(gender = c("F", "M"),party = ("Democrat","Independent", "Republican"))
Xsq <- chisq.test(M)
##### 运行结果  #####
Pearson's Chi-squared test
data:  M
X-squared = 30.07, df = 2, p-value = 2.954e-07

卡方检验的p值小于0.01,说明性别与党派是有显著关系的。可以注意到,2 x c 列联表和2 x 2的代码,除了输入数据的差别外,其他也是几乎一致的。而r x c的代码也是更换输入数据的差别而已。

四、综合应用

#使用vcd包中Arthritis数据集
library(vcd)
#生成列联表格式
mytable <- xtabs(~Treatment+Improved,data = Arthritis)
#卡方检验
chisq.test(mytable)
	Pearson's Chi-squared test
data:  mytable
X-squared = 13.055, df = 2, p-value = 0.001463
#p值小于0.05,说明治疗情况和改善情况不独立。
#Fisher精确检验
library(vcd)
mytable <- xtabs(~Treatment+Improved,data = Arthritis)
#调用fisher.test()函数
fisher.test(mytable)
	Fisher's Exact Test for Count
	Data
data:  mytable
p-value = 0.001393
alternative hypothesis: two.sided
#P小于0.05,两者之间不独立
#Cochran-Mantel-Haenszel检验:为两个二分类变量进行分层卡方检验。
mytable <- xtabs(~Treatment+Improved+Sex,data = Arthritis)
#调用mantelhaen.test()函数
mantelhaen.test(mytable)
	Cochran-Mantel-Haenszel test
data:  mytable
Cochran-Mantel-Haenszel M^2 =
14.632, df = 2, p-value =
0.0006647
#结果表明,患者接受的治疗与得到的改善在性别的每一水平下并不独立

卡方独立性分析反过来想的话,其实就是相关性分析,因此卡方检验也可以在相关性分析中有用武之地。当然,Pearson Correlation和Fisher's exact test也是更为常用的相关性分析。

总结

列联分析和对应分析作为交叉分析的两种典型形式,不仅揭示了变量之间的关联性,还为数据降维提供了有效的手段。通过这些分析方法,研究者可以从多维数据中提取有价值的信息,简化数据结构,并通过可视化方式直观地展示数据的内在关系。这些方法在市场调研、社会科学、医学、教育等多个领域得到了广泛应用,为理解复杂现象提供了有力工具。

参考文献

  1. R | 卡方检验
  2. R语言入门之频率表和列联表
  3. R语言卡方检验
posted @   郝hai  阅读(3658)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示