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. percent
no 130 68.8 68.8
yes 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$smoke
birthwt$low no yes Totalno 86 44 130yes 29 30 59Total 115 74 189Row percent birthwt$smoke
birthwt$low no yes Totalno 86 44 130(66.2) (33.8) (100)yes 29 30 59(49.2) (50.8) (100)Column percent birthwt$smoke
birthwt$low no % yes %no 86 (74.8) 44 (59.5)yes 29 (25.2) 30 (40.5)Total 115 (100) 74 (100)
多维列联表
- 涉及≥3个分类变量的列联表
table(), prop.table(), addmargins()
等语法同样适用,不再赘述
独立性检验
χ2\chi^2χ2检验
期望频数列联表生成语法:chisq.test(列联表)$expected
,用于评价使用何种检验方法 (见下)。各检验方法具体使用场合总结如下:
名称 | 场合 | 语法 |
---|---|---|
Pearson χ2\chi^2χ2检验 | 二维列联表,每个单元格期望频数≥5 |
chisq.test(列联表,correct=FALSE)
|
Pearson χ2\chi^2χ2检验带连续性校正 | 二维列联表,存在单元格期望频数≥1且≤5 |
chisq.test(列联表) # correct 参数默认为TRUE,故无需声明
|
Fisher精确概率检验 | 二维列联表,总记录数n<40 或 存在单元格期望频数<1 |
fisher.test(列联表)
|
> chisq.test(table(birthwt$low,birthwt$smoke))$expectedno yesno 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,具体语法如下:
函数 | 语法1 | 语法2 |
---|---|---|
cs() :用于计算RR
|
cs(数据框名$结局变量,数据框名$因素变量)
|
cs(cctable=列联表)
|
cc() :用于计算OR
|
cc(数据框名$结局变量,数据框名$因素变量)
|
cc(cctable=列联表)
|
需要注意的是:
- 若将列联表作为输入,需要将其作为参数
cctable
声明 - 若将列联表作为输入,列联表必须为结局变量在前、因素变量在后的形式
> cc(birthwt$low,birthwt$smoke) # 语法1birthwt$smoke
birthwt$low no yes Totalno 86 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.026
Fisher's exact test (2-sided) P value = 0.036 > mytable<-table(birthwt$low,birthwt$smoke) # 注意该列联表生成时将关心的结局变量放在前面
> cc(cctable=mytable) # 语法2no yes Totalno 86 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.026
Fisher's exact test (2-sided) P value = 0.036
cc()
除了给出检验结果外,还能生成一个不同组比值 (Odds)的变化图:
分层情形下的独立性检验:Mantel-Haenszel检验
M-H检验:检验两分类变量在第三个变量 (分层变量)的调整下是否仍然独立。
列联表写法:table(数据框名$待检验变量1,数据框名$待检验变量2,数据框名$用于分层的变量3)
函数 | 语法 |
---|---|
M-H检验,不进行连续性校正 |
mantelhaen.test(列联表,correct=FALSE)
|
M-H检验,进行连续性校正 |
mantelhaen.test(列联表) # 默认校正,无需声明
|
M-H检验,连续性校正,并生成OR图 (需要epiDisplay 包)
|
mhor(mhtable=列联表)
|
> mytable<-table(birthwt$low,birthwt$smoke,birthwt$race)
> mantelhaen.test(mytable,correct=FALSE) # 声明不进行连续性校正Mantel-Haenszel chi-squared test without continuitycorrectiondata: mytable
Mantel-Haenszel X-squared = 9.4134, df = 1, p-value =
0.002154
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 > mhor(mhtable=mytable)Stratified analysis by Var3 OR lower lim. upper lim. P value
Var3 white 5.66 1.657 25.14 0.00179 # 可见,白人亚组中吸烟对低体重的OR最大
Var3 black 3.14 0.487 23.45 0.22797
Var3 other 1.25 0.273 5.28 0.75103
M-H combined 3.09 1.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检验
对同一对象进行两种处理,然后观察这两种处理的分类变量结果之间的一致性。最典型的例子是比较两种诊断方法的一致性。
检验 | 适用场合 | 语法 |
---|---|---|
McNemar检验,无连续性校正 | - |
mcnemar.test(列联表,correct=FALSE)
|
McNemar检验,有连续性校正 | 不一致结果的个案总数<40 |
mcnemar.test(列联表)
|
以下面的诊断一致性检验作为示例:
诊断试验A(+) | 诊断试验A(-) | |
---|---|---|
诊断试验B(+) | 11 | 2 |
诊断试验B(-) | 12 | 33 |
> my.matrix<-matrix(c(11,2,12,33),nrow=2)
> mcnemar.test(my.matrix)McNemar's Chi-squared test with continuity correctiondata: my.matrix
McNemar's chi-squared = 5.7857, df = 1, p-value = 0.01616
R语言笔记-分类变量列联表和独立性检验相关推荐
- R语言基础 | 卡方检验与列联表、独立性检验
专注系列化.高质量的R语言教程 推文索引 | 联系小编 | 付费合集 上篇介绍了三大检验的t检验和F检验,本篇接着介绍卡方检验.相比于前两者,我们其实更早地接触到卡方检验,它在高中数学教材中就已经出现 ...
- r语言 回归分析 分类变量_R语言进阶之广义线性回归
广义线性回归是一类常用的统计模型,在各个领域都有着广泛的应用.今天我会以逻辑回归和泊松回归为例,讲解如何在R语言中建立广义线性模型. 在R语言中我们通常使用glm()函数来构建广义线性模型,glm实际 ...
- R语言绘制分类变量柱状图
背景 Excel中无法实现分组区分颜色. 右边的图是我手动点击各个柱形修改分组颜色的. 请问如何在R和Excel中分别实现右图? 更新后完整解决方案: # 数据载入 ----------------- ...
- r语言 回归分析 分类变量_R语言 | 回归分析(二)
R语言 语言学与R语言的碰撞 Xu & Yang PhoneticSan 学习参考 Discovering Statistics Using R Statistics for Linguist ...
- r语言 回归分析 分类变量_R语言下的PSM分析分类变量处理与分析步骤
最近学习了PSM,我选择了用R去跑PSM,在这过程中遇到了许多问题,最后也都一一解决了,写下这个也是希望大家在遇到相同问题的时候能够得到帮助和启发,别的应该不会遇到太难的问题了哈哈.最近我也没做什么, ...
- R语言笔记1:t检验和Wilcoxon检验
转自新浪博客,转载地址:http://blog.sina.com.cn/s/blog_427c24ae0102wg7n.html 1.t检验 数据是高血压患者治疗前后舒张压的变化,这个内容最熟悉不过了 ...
- R语言 | 二分类和多分类的逻辑回归实现
目录 二分类逻辑回归 数据准备 模型构建 模型检验 多分类逻辑回归 二分类逻辑回归 首先,我先展示下我逻辑回归的总体代码,如果有基础的同志需要的话,可以直接修改数据和参数拿去用呀: library(l ...
- R语言的Copula变量相关性分析
在工程.水文和金融等各学科的研究中,总是会遇到很多变量,研究这些相互纠缠的变量间的相关关系是各学科的研究的重点.虽然皮尔逊相关.秩相关等相关系数提供了变量间相关关系的粗略结果,但这些系数都存在着无法克 ...
- R语言自定义多分类混淆矩阵可视化函数(mutlti class confusion matrix)、R语言多分类混淆矩阵可视化
R语言自定义多分类混淆矩阵可视化函数(mutlti class confusion matrix).R语言多分类混淆矩阵可视化 目录
- R语言笔记4_模型诊断(关于残差)
R语言笔记4_模型诊断(关于残差)及模型补救(Box-Cox变换) 文章目录 R语言笔记4_模型诊断(关于残差)及模型补救(Box-Cox变换) 检验线性关系 检验方差齐性 检验残差正态性 检验离群值 ...
最新文章
- pymysql模块操作数据库及连接报错解决方法
- 软件测试功能报告,软件功能测试报告
- [攻防世界 pwn]——forgot
- Ubuntu磁盘扩容及启动问题整理
- 男朋友和女朋友的区别。。。
- My.Ioc 代码示例——避免循环依赖
- python logger_牛逼!python中的logging模块居然这么好用!
- redisson版本_通用Redisson版本
- svm工具箱快速入手简易教程
- 时间序列预测在R中的应用 (Part1 简介和预测工具集)
- 【总结】编程语言的分类
- ROS配置ipv6方法
- vue cli 构架vux移动端模板
- 解决微信端苹果手机无法跳转页面
- 02_爬取灌篮高手全国大赛漫画
- 零成本、零流量,我是如何空手反套白狼?
- 她们不止“都挺好”自带”苏明玉“光环的美联人
- 今日立春,介绍一些立春的习俗吧
- 国仁老猫:抖音影视剪辑5种赚钱方法、18个素材网站、8.0剪辑方法防判搬运(建议收藏)
- 高德地图marker屏蔽Label
热门文章
- 每日一结(10.26)
- python打印古诗_python教程:利用python基础知识取出对应诗句
- 泛泛而谈的渲染学习记录(二)—— 高斯模糊卷积的线性分解理解
- 快速集成微信支付和支付宝支付
- 点餐app的初步总结
- D3D9学习笔记之顶点缓存与索引缓存
- ​【NeurIPS 2022】IPMT:用于小样本语义分割的中间原型挖掘Transformer
- pip 生成 requirement.txt 文件
- 环信第三方集成 -- 移动客服
- 用python画写轮眼_创意scratch编程课:火影经典忍术,宇智波佐助的写轮眼!