失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > R语言笔记-分类变量列联表和独立性检验

R语言笔记-分类变量列联表和独立性检验

时间:2021-05-25 14:49:15

相关推荐

R语言笔记-分类变量列联表和独立性检验

文章目录

频数表与列联表的生成一维频数表二维列联表多维列联表独立性检验χ2\chi^2χ2检验相对危险度 (relative risk, RR)与比值比 (odds ratio, OR)分层情形下的独立性检验:Mantel-Haenszel检验配对列联表的一致性检验:McNemar检验

示例数据:MASS包中的birthwt数据集。

首先将数据集中的分类变量因子化,具体参考这里。

频数表与列联表的生成

一维频数表

仅展现1个分类变量频数统计语法:table(数据框名$变量名)

> table(birthwt$low)no yes 130 59

展现百分比,而非频数:prop.table(频数表)

> prop.table(table(birthwt$low))no yes 0.6878307 0.3121693 # 可使用round()保留小数,此处不再赘述

epiDisplay包中的tab1()函数:给出含百分比、累计百分比的一维频数表,并生成一个频数分布的条形图;语法为tab1(数据框名$变量名)

> tab1(birthwt$low)birthwt$low : Frequency Percent Cum. percentno 130 68.8 68.8yes 59 31.2 100.0Total 189 100.0 100.0

二维列联表

又称为交叉表,展现了两个分类变量下的频数统计也可以使用table函数:table(数据框名$变量1,数据框名$变量2)

> table(birthwt$low,birthwt$smoke)no yesno 86 44yes 29 30

生成边际频数 (行列subtotal汇总):addmargins(频数表)

> addmargins(table(birthwt$low,birthwt$smoke))no yes Sumno 86 44 130yes 29 30 59Sum 115 74 189

epiDisplay包中的tabpct()函数:给出含边际频数、按行&按列求百分比的列联表,还给出一个马赛克图;语法为tabpct(数据框名$变量1,数据框名$变量2)

> tabpct(birthwt$low,birthwt$smoke)Original table birthwt$smokebirthwt$low no yes Totalno86 44 130yes29 3059Total 115 74 189Row percent birthwt$smokebirthwt$lownoyes Totalno 8644 130(66.2) (33.8) (100)yes293059(49.2) (50.8) (100)Column percent birthwt$smokebirthwt$low no % yes %no86 (74.8) 44 (59.5)yes29 (25.2) 30 (40.5)Total 115 (100) 74 (100)

多维列联表

涉及≥3个分类变量的列联表table(), prop.table(), addmargins()等语法同样适用,不再赘述

独立性检验

χ2\chi^2χ2检验

期望频数列联表生成语法:chisq.test(列联表)$expected,用于评价使用何种检验方法 (见下)。各检验方法具体使用场合总结如下:

> chisq.test(table(birthwt$low,birthwt$smoke))$expectednoyesno 79.10053 50.89947yes 35.89947 23.10053 # 期望频数均>5,无需进行连续性校正> chisq.test(table(birthwt$low,birthwt$smoke),correct=FALSE)Pearson's Chi-squared testdata: table(birthwt$low, birthwt$smoke)X-squared = 4.9237, df = 1, p-value = 0.02649

相对危险度 (relative risk, RR)与比值比 (odds ratio, OR)

RR与OR的定义不再复习,请参考统计学书籍。epiDisplay包中的cs()cc()函数可用于计算RR、OR,具体语法如下:

需要注意的是:

若将列联表作为输入,需要将其作为参数cctable声明若将列联表作为输入,列联表必须为结局变量在前、因素变量在后的形式

> cc(birthwt$low,birthwt$smoke) # 语法1birthwt$smokebirthwt$low no yes Totalno86 44 130yes 29 30 59Total 115 74 189OR = 2.02 95% CI = 1.08, 3.78 Chi-squared = 4.92, 1 d.f., P value = 0.026Fisher's exact test (2-sided) P value = 0.036 > mytable<-table(birthwt$low,birthwt$smoke) # 注意该列联表生成时将关心的结局变量放在前面> cc(cctable=mytable) # 语法2no yes Totalno86 44 130yes 29 30 59Total 115 74 189OR = 2.02 95% CI = 1.08, 3.78 Chi-squared = 4.92, 1 d.f., P value = 0.026Fisher's exact test (2-sided) P value = 0.036

cc()除了给出检验结果外,还能生成一个不同组比值 (Odds)的变化图:

分层情形下的独立性检验:Mantel-Haenszel检验

M-H检验:检验两分类变量在第三个变量 (分层变量)的调整下是否仍然独立。

列联表写法:table(数据框名$待检验变量1,数据框名$待检验变量2,数据框名$用于分层的变量3)

> mytable<-table(birthwt$low,birthwt$smoke,birthwt$race)> mantelhaen.test(mytable,correct=FALSE) # 声明不进行连续性校正Mantel-Haenszel chi-squared test without continuitycorrectiondata: mytableMantel-Haenszel X-squared = 9.4134, df = 1, p-value =0.002154alternative hypothesis: true common odds ratio is not equal to 195 percent confidence interval:1.490740 6.389949sample estimates:common odds ratio 3.086381 > mhor(mhtable=mytable)Stratified analysis by Var3 OR lower lim. upper lim. P valueVar3 white 5.661.65725.14 0.00179 # 可见,白人亚组中吸烟对低体重的OR最大Var3 black 3.140.48723.45 0.22797Var3 other 1.250.273 5.28 0.75103M-H combined 3.091.491 6.39 0.00215M-H Chi2(1) = 9.41 , P value = 0.002 Homogeneity test, chi-squared 2 d.f. = 2.98 , P value = 0.225

mhor()函数还额外生成了一个不同层中OR差异的图:

配对列联表的一致性检验:McNemar检验

对同一对象进行两种处理,然后观察这两种处理的分类变量结果之间的一致性。最典型的例子是比较两种诊断方法的一致性。

以下面的诊断一致性检验作为示例:

> my.matrix<-matrix(c(11,2,12,33),nrow=2)> mcnemar.test(my.matrix)McNemar's Chi-squared test with continuity correctiondata: my.matrixMcNemar's chi-squared = 5.7857, df = 1, p-value = 0.01616

如果觉得《R语言笔记-分类变量列联表和独立性检验》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。