数据准备
df <- read.table(file = "D:/Documents/R wd/df.csv", header = T, sep = ",", colClasses = c(year = "character", nitrogen = "character", variety = "character", block = "character")) # 数据导入。
df # 查看数据。
## year nitrogen variety block v1 v2 v3 v4 v5
## 1 2020 N1 a 1 1.26 2.14 3.4 4.66 3.25
## 2 2020 N1 a 2 1.20 2.90 4.1 5.30 1.27
## 3 2020 N1 a 3 1.30 3.00 4.3 5.60 2.24
## 4 2020 N1 b 1 1.08 1.72 2.8 3.88 1.00
## 5 2020 N1 b 2 1.05 1.65 2.7 3.75 3.12
## 6 2020 N1 b 3 1.15 1.35 2.5 3.65 4.57
## 7 2020 N2 a 1 1.32 3.78 5.1 6.42 5.85
## 8 2020 N2 a 2 1.28 4.32 5.6 6.88 6.48
## 9 2020 N2 a 3 1.35 3.95 5.3 6.65 7.21
## 10 2020 N2 b 1 1.33 3.47 4.8 6.13 6.56
## 11 2020 N2 b 2 1.28 2.72 4.0 5.28 8.43
## 12 2020 N2 b 3 1.30 3.90 5.2 6.50 7.55
## 13 2021 N1 a 1 1.19 3.61 4.8 5.99 3.11
## 14 2021 N1 a 2 1.21 3.29 4.5 5.71 2.54
## 15 2021 N1 a 3 1.24 3.26 4.5 5.74 1.28
## 16 2021 N1 b 1 1.09 2.71 3.8 4.89 3.24
## 17 2021 N1 b 2 1.28 2.32 3.6 4.88 1.27
## 18 2021 N1 b 3 1.35 1.95 3.3 4.65 1.15
## 19 2021 N2 a 1 1.45 4.35 5.8 7.25 5.74
## 20 2021 N2 a 2 1.40 3.80 5.2 6.60 6.85
## 21 2021 N2 a 3 1.37 4.23 5.6 6.97 7.42
## 22 2021 N2 b 1 1.28 2.72 4.0 5.28 8.20
## 23 2021 N2 b 2 1.15 3.35 4.5 5.65 5.70
## 24 2021 N2 b 3 1.24 3.46 4.7 5.94 6.00
7.2.2 独立性检验
独立性检验通常对两个变量进行检验,查看这两个类别变量之间是否存在某种联系。它是根据次数资料判断两类因子彼此相关或相互独立的假设检验。也就是分析列联表中行变量和列变量是否相互独立。
由联表中的数据算出随机变量的值,的值越大,说明“X与Y有关系”成立的可能性越大。
1.卡方独立性检验
卡方检验(chi square test)主要应用于定类变量和定类变量之间的关系,也称独立性检验,是一种非参数假设检验。其测定两个分类变量之间的相关程度,是利用类别变量的观测值频数与期望值频数进行构建的,公式如下:
其中, 为观测值频数, 为期望值频数。可以看到, 统计量其实反映了观察值频数和期望值频数之间的差距,当差距较小时,统计量的值也会变小。所以 检验正是通过计算 统计量与临界值进行比较来确定相关的显著性的。
假设检验问题由两个互斥的假设构成,其中一个叫做原假设,用H0表示;另一个叫做备择假设,用H1表示。在卡方检验中两个假设即为:H0:两个分类变量间独立;H1:两个分类变量间不独立。
结果的P-值小则代表拒绝原假设,即存在一定的关系;当P-值比较大时代表接受原假设,即不存在联系。例如:p = 0.05,代表变量之间无关的可能性小于5%,反过来,就是两者相关的概率大于95%,即拒绝原假设。
在R中使用chisq.test()函数对二维表的行变量和列变量进行卡方独立性检验。
library(vcd) # 调用vcd包。
mytable3 <- xtabs(~ year + nitrogen, data = df) # 构建year和nitrogen的列联表。
chisq.test(mytable3) # 检验独立性。这里p>0.05,表明year和nitrogen是相互独立的。
##
## Pearson's Chi-squared test
##
## data: mytable3
## X-squared = 0, df = 1, p-value = 1
mytable4 <- xtabs(~ nitrogen + variety, data = df) # 构建nitrogen和variety的列联表。
chisq.test(mytable4) # 检验独立性。这里p>0.05,表明nitrogen和variety是相互独立的。
##
## Pearson's Chi-squared test
##
## data: mytable4
## X-squared = 0, df = 1, p-value = 1
p值表示从总体中抽取的样本行变量与列变量是相互独立的概率。
2.Fisher精确检验
fisher.test()函数进行Fisher精确检验。Fisher精确检验的原假设是:边界固定
的列联表中行和列是相互独立的。其调用格式为fisher.test(mytable),其中的mytable是
一个二维列联表。fisher.test()函数可以在任意行列数大于等于2的二维列联表上使用,但不能用于2×2的列联表。
mytable5 <- xtabs(~ year + nitrogen, data = df) # 构建year和nitrogen的列联表。
fisher.test(mytable5) # 精确检验独立性。
##
## Fisher's Exact Test for Count Data
##
## data: mytable5
## p-value = 1
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 0.1537975 6.5020580
## sample estimates:
## odds ratio
## 1
3.Cochran-Mantel-Haenszel检验
mantelhaen.test()函数可用来进行Cochran—Mantel—Haenszel卡方检验,其原假设是,两
个名义变量在第三个变量的每一层中都是条件独立的。
mytable6 <- xtabs(~ year + nitrogen + variety, data = df) # 构建三变量的列联表。
mantelhaen.test(mytable6) # 检验独立性。
##
## Mantel-Haenszel chi-squared test without continuity correction
##
## data: mytable6
## Mantel-Haenszel X-squared = 0, df = 1, p-value = 1
## alternative hypothesis: true common odds ratio is not equal to 1
## 95 percent confidence interval:
## 0.2018352 4.9545378
## sample estimates:
## common odds ratio
## 1
7.2.3 相关性的度量
显著性检验评估了是否存在充分的证据以拒绝变量间相互独立的原假设。如果可
以拒绝原假设,那么你的兴趣就会自然而然地转向用以衡量相关性强弱的相关性度量。vcd包中的assocstats()函数可以用来计算二维列联表的phi系数、列联系数和Cramer’s V系数。
Phi系数适用于2×2列联表,列联系数和Cramer’s V系数适用于大于2×2列联表。
Phi系数:phi =1,表明变量完全相关;phi = 0,表明变量相互独立;越接近1,越相关;越接近0,越不相关。
列联系数:适用于大于2×2列联表,当表中两变量相互独立时,系数为0。其最大值依赖于行数和列数,但是不可能大于1。
Cramer’s V系数:两个变量相互独立时,等于0;两个变量完全相关时,等于1。
总体来说,较大的值意味着较强的相关性。
library(vcd) # 调用vcd包。
mytable7 <- xtabs(~ year + nitrogen, data = df) # 构建year和nitrogen的列联表。
assocstats(mytable7) # 相关性度量。较大的值意味着较强的相关性。
## X^2 df P(> X^2)
## Likelihood Ratio 0 1 1
## Pearson 0 1 1
##
## Phi-Coefficient : 0
## Contingency Coeff.: 0
## Cramer's V : 0
7.2.4 结果的可视化
7.2.5 将表转换为扁平格式
参考资料:
- 《R语言实战》(中文版),人民邮电出版社,2013.
- 独立性检验-百度,https://baike.baidu.com/item/%E7%8B%AC%E7%AB%8B%E6%80%A7%E6%A3%80%E9%AA%8C/4031921#reference-[2]-939046-wrap
- 统计学-分类数据与卡方检验-20180115,https://zhuanlan.zhihu.com/p/32952144
- R语言独立性检验,https://blog.csdn.net/m0_46291589/article/details/104396263