table <- table(data$low)
table
0 1
130 59
prop.table(table)#百分比
0 1
0.6878307 0.3121693
table1 <- table(data$low,data$smoke)
table1
0 1
0 86 44
1 29 30
addmargins(table1)
0 1 Sum
0 86 44 130
1 29 30 59
Sum 115 74 189
prop.table(table1,margin = 1)##行比例
0 1
0 0.6615385 0.3384615
1 0.4915254 0.5084746
prop.table(table1,margin = 2)##列比例
0 1
0 0.7478261 0.5945946
1 0.2521739 0.4054054
t检验(连续变量)和卡方检验(分类变量)-CSDN博客
一文汇总卡方检验全部内容 - 知乎 (zhihu.com)
对于一般的列联表,可以使用函数chisq.test()进行 卡方检验。例如,要想知道母亲吸烟情况和新生儿低体重之间的关系是否独立,可以使用下面的命令:
mytable <-table(data$smoke,data$low)
mytable
chisq.test(mytable)
Pearson's Chi-squared test with Yates' continuity correction
data: mytable
X-squared = 4.2359, df = 1, p-value = 0.03958
函数chisq:test()的参数correct用于设置是否进行连续性校正,默认为TRUE,故在输出中有说明“Pearson's Chi-squared test with Yates'continuity correction”。对于频数表中每个单元格的期望频数都比较大(大于5)的大样本,可以将这个参数设为FALSE,即不进行连续性校正。
期望频数表查看:
chisq.test(mytable)$expected
0 1
0 79.10053 35.89947
1 50.89947 23.10053
每个单元格的期望频数都比较大,所以可以尝试将参数correct设为FALSE:
chisq.test(mytable,correct = F)
Pearson's Chi-squared test
data: mytable
X-squared = 4.9237, df = 1, p-value = 0.02649
不论是否进行连续性校正,母亲吸烟情况与新生儿低体重都存在显著的关联(p<0.05)。
如果观察总记录数n小于40,或者频数表里的某个期望频数很小(小于1),则需要使用Fisher精确概率检验。函数fisher.test()可用于执行该检验。即使期望频数都较大,仍然可以尝试使用Fisher精确概率检验。
fisher.test(mytable)
Fisher's Exact Test for Count Data
data: mytable
p-value = 0.03618
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
1.028780 3.964904
sample estimates:
odds ratio
2.014137
函数fisher.test()不仅可以运用于四格表,还可以运用于行列数大于2的列联表。
library(epiDisplay)
cs(data$smoke,data$low)
Exposure Outcome Non-exposed Exposed Total Negative 86 29 115 Positive 44 30 74 Total 130 59 189 Rne Re Rt Risk 0.34 0.51 0.39 Estimate Lower95ci Upper95ci Risk difference (attributable risk) 0.17 0.02 0.31 Risk ratio 1.5 1.02 2.21 Attr. frac. exp. -- (Re-Rne)/Re 0.33 Attr. frac. pop. -- (Rt-Rne)/Rt*100 % 13.56 Number needed to harm (NNH) 5.88 3.26 58.85 or 1/(risk difference)
两个变量的关联有可能受到第三个变量的影响,因此我们有必要检验两个分类变量在调整(控制)第三个变量的情况下是否独立。Cochran-Mantel-Haenszel x²检验常用于探索变量间的混杂因素。其零假设是:两个分类变量在第三个变量的每一层都是条件独立的。函数mantelhaen.test()可以用来进行该检验。
mytable1 <-table(data$smoke,data$low,data$race)
mantelhaen.test(mytable1)
Mantel-Haenszel chi-squared test with continuity correction
data: mytable1
Mantel-Haenszel X-squared = 8.3779, df = 1, p-value = 0.003798
alternative hypothesis: true common odds ratio is not equal to 1
95 percent confidence interval:
1.490740 6.389949
sample estimates:
common odds ratio
3.086381
参考:
1:R语言医学数据分析实战/赵军编著.--北京:人民邮电出版社,2020.8