文章目录

  • 频数表与列联表的生成
    • 一维频数表
    • 二维列联表
    • 多维列联表
  • 独立性检验
    • χ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=列联表)

需要注意的是:

  1. 若将列联表作为输入,需要将其作为参数cctable声明
  2. 若将列联表作为输入,列联表必须为结局变量在前、因素变量在后的形式
> 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语言笔记-分类变量列联表和独立性检验相关推荐

  1. R语言基础 | 卡方检验与列联表、独立性检验

    专注系列化.高质量的R语言教程 推文索引 | 联系小编 | 付费合集 上篇介绍了三大检验的t检验和F检验,本篇接着介绍卡方检验.相比于前两者,我们其实更早地接触到卡方检验,它在高中数学教材中就已经出现 ...

  2. r语言 回归分析 分类变量_R语言进阶之广义线性回归

    广义线性回归是一类常用的统计模型,在各个领域都有着广泛的应用.今天我会以逻辑回归和泊松回归为例,讲解如何在R语言中建立广义线性模型. 在R语言中我们通常使用glm()函数来构建广义线性模型,glm实际 ...

  3. R语言绘制分类变量柱状图

    背景 Excel中无法实现分组区分颜色. 右边的图是我手动点击各个柱形修改分组颜色的. 请问如何在R和Excel中分别实现右图? 更新后完整解决方案: # 数据载入 ----------------- ...

  4. r语言 回归分析 分类变量_R语言 | 回归分析(二)

    R语言 语言学与R语言的碰撞 Xu & Yang PhoneticSan 学习参考 Discovering Statistics Using R Statistics for Linguist ...

  5. r语言 回归分析 分类变量_R语言下的PSM分析分类变量处理与分析步骤

    最近学习了PSM,我选择了用R去跑PSM,在这过程中遇到了许多问题,最后也都一一解决了,写下这个也是希望大家在遇到相同问题的时候能够得到帮助和启发,别的应该不会遇到太难的问题了哈哈.最近我也没做什么, ...

  6. R语言笔记1:t检验和Wilcoxon检验

    转自新浪博客,转载地址:http://blog.sina.com.cn/s/blog_427c24ae0102wg7n.html 1.t检验 数据是高血压患者治疗前后舒张压的变化,这个内容最熟悉不过了 ...

  7. R语言 | 二分类和多分类的逻辑回归实现

    目录 二分类逻辑回归 数据准备 模型构建 模型检验 多分类逻辑回归 二分类逻辑回归 首先,我先展示下我逻辑回归的总体代码,如果有基础的同志需要的话,可以直接修改数据和参数拿去用呀: library(l ...

  8. R语言的Copula变量相关性分析

    在工程.水文和金融等各学科的研究中,总是会遇到很多变量,研究这些相互纠缠的变量间的相关关系是各学科的研究的重点.虽然皮尔逊相关.秩相关等相关系数提供了变量间相关关系的粗略结果,但这些系数都存在着无法克 ...

  9. R语言自定义多分类混淆矩阵可视化函数(mutlti class confusion matrix)、R语言多分类混淆矩阵可视化

    R语言自定义多分类混淆矩阵可视化函数(mutlti class confusion matrix).R语言多分类混淆矩阵可视化 目录

  10. R语言笔记4_模型诊断(关于残差)

    R语言笔记4_模型诊断(关于残差)及模型补救(Box-Cox变换) 文章目录 R语言笔记4_模型诊断(关于残差)及模型补救(Box-Cox变换) 检验线性关系 检验方差齐性 检验残差正态性 检验离群值 ...

最新文章

  1. pymysql模块操作数据库及连接报错解决方法
  2. 软件测试功能报告,软件功能测试报告
  3. [攻防世界 pwn]——forgot
  4. Ubuntu磁盘扩容及启动问题整理
  5. 男朋友和女朋友的区别。。。
  6. My.Ioc 代码示例——避免循环依赖
  7. python logger_牛逼!python中的logging模块居然这么好用!
  8. redisson版本_通用Redisson版本
  9. svm工具箱快速入手简易教程
  10. 时间序列预测在R中的应用 (Part1 简介和预测工具集)
  11. 【总结】编程语言的分类
  12. ROS配置ipv6方法
  13. vue cli 构架vux移动端模板
  14. 解决微信端苹果手机无法跳转页面
  15. 02_爬取灌篮高手全国大赛漫画
  16. 零成本、零流量,我是如何空手反套白狼?
  17. 她们不止“都挺好”自带”苏明玉“光环的美联人
  18. 今日立春,介绍一些立春的习俗吧
  19. 国仁老猫:抖音影视剪辑5种赚钱方法、18个素材网站、8.0剪辑方法防判搬运(建议收藏)
  20. 高德地图marker屏蔽Label

热门文章

  1. 每日一结(10.26)
  2. python打印古诗_python教程:利用python基础知识取出对应诗句
  3. 泛泛而谈的渲染学习记录(二)—— 高斯模糊卷积的线性分解理解
  4. 快速集成微信支付和支付宝支付
  5. 点餐app的初步总结
  6. D3D9学习笔记之顶点缓存与索引缓存
  7. ​【NeurIPS 2022】IPMT:用于小样本语义分割的中间原型挖掘Transformer
  8. pip 生成 requirement.txt 文件
  9. 环信第三方集成 -- 移动客服
  10. 用python画写轮眼_创意scratch编程课:火影经典忍术,宇智波佐助的写轮眼!