专注系列化高质量的R语言教程

推文索引 | 联系小编 | 付费合集


上篇介绍了三大检验的t检验和F检验,本篇接着介绍卡方检验。相比于前两者,我们其实更早地接触到卡方检验,它在高中数学教材中就已经出现,但用的却相对较少。

本篇目录如下:

  • 1 22列联表下的卡方检验

  • 2 一般情况的卡方检验

  • 3 chisq.test函数

1 22列联表下的卡方检验

卡方检验适用于计数事件的独立性检验。在高中阶段见到的就是22列联表(contingency table)。

以北师大版高中数学教材为例,为了研究吸烟与患肺癌是否有联系,有如下调查数据:

人数 患肺癌 未换肺癌
吸烟 56 1932
不吸烟 23 4567

如果吸烟者和不吸烟者的患肺癌概率具有显著差异,那么就可以认为吸烟和患肺癌之间存在联系,即二者不独立。

更一般的表示是:

频数 A1 A2
B1 a b
B2 c d

我们可以通过卡方统计量来检验变量A和B是否有关联。卡方统计量的计算公式为:

的数值越大,越有把握判定变量A和B存在关联(即不独立)。具体地,

  • 当时,没有充分证据表明A和B有关联,即认为A和B相互独立;

  • 当时,有90%的把握认为A和B有关联;

  • 当时,有95%的把握认为A和B有关联;

  • 当时,有99%的把握认为A和B有关联。

以上就是我们在高中阶段学习到的卡方检验的大致内容。

根据公式计算卡方统计量:

a = 56; b = 1932
c = 23; d = 4567 (a+b+c+d)*(a*d-b*c)^2/((a+b)*(c+d)*(a+c)*(b+d))
## [1] 62.69832

= 62.69832 > 6.635,因此我们可以有99%的把握认为吸烟和患肺癌存在关联。

stats工具包中,用于卡方检验的函数是chisq.test()

M <- as.table(rbind(c(56, 1932), c(23, 4567)))
dimnames(M) <- list(cancer = c("Y", "N"),smoke = c("Y", "N"))
M
##       smoke
## cancer    Y    N
##      Y   56 1932
##      N   23 4567chisq.test(M, correct = F)
##  Pearson's Chi-squared test
##
## data:  M
## X-squared = 62.698, df = 1, p-value = 2.409e-15

2 一般情况的卡方检验

将22列联表的边际频数补充完整,并记:

频数 A1 A2 总计
B1 a b a+b
B2 c d c+d
总计 a+c b+d n

使用频率代替概率,则有




若变量A和B没有关联,即相互独立,则应有

上式可看作事件的期望频率,期望频数为,实际频率为,实际频数为。显然,期望频率和实际频率的差距越小,越可以认为变量A和B相互独立。

对于更一般的列联表(和为行、列数),也可以使用类似的方法计算期望频率和期望频数。使用表示实际频数,表示实际频率,表示期望频数,表示期望频率,表示所有事件的频数之和,则卡方统计量为:

若变量A和B相互独立,则服从卡方分布,自由度为。

3 chisq.test函数

chisq.test()函数的语法结构如下:

chisq.test(x, y = NULL, correct = TRUE,p = rep(1/length(x), length(x)), rescale.p = FALSE,simulate.p.value = FALSE, B = 2000)

例1.1

参数x为列联表数据,一般应为矩阵,元素为非负整数。

## 同第1节的示例
m <- matrix(c(56, 1932, 23, 4567),nrow = 2, byrow = T)
mchisq.test(m, correct = F)##  Pearson's Chi-squared test
##
## data:  m
## X-squared = 62.698, df = 1, p-value = 2.409e-15

例1.2

若参数x为单行或单列矩阵,或原子向量,chisq.test()函数会进行拟合优度检验(goodness-of-fit test),即检验x中的频数分布是否符合给定的概率p,若p参数未给定,则默认为等概率。

chisq.test(x = c(56, 1932, 23, 4567), p = c(0.1, 0.35, 0.05, 0.5))
##  Chi-squared test for given probabilities
##
## data:  c(56, 1932, 23, 4567)
## X-squared = 1391.2, df = 3, p-value < 2.2e-16
  • x = c(56, 1932, 23, 4567)表示某事件被分为四组,各组频数分别为56、1932、23、4567;

  • p = c(0.1, 0.35, 0.05, 0.5)表示各组的期望概率;

  • p-value < 2.2e-16说明实际频率分布显著异于期望频率分布。

例2.1

参数p的元素之和应为1;如不为1,可设置参数rescale.p = TRUE,否则会报错。

chisq.test(c(56, 1932, 23, 4567), p = c(10, 35, 5, 50),rescale.p = T)
##  Chi-squared test for given probabilities
##
## data:  c(56, 1932, 23, 4567)
## X-squared = 1391.2, df = 3, p-value < 2.2e-16

例2.2

如果是未进行统计的原始数据,可以使用table()函数进行统计:

set.seed(1111)
x = rpois(50,5)
x
##  [1]  5  4  8  3  6 10  8  2  5  3  0  6  6  6  8  3  8  5  8  7  3  4  7 11  2
## [26]  4  1  4  6  3  7  8  5  4  3  1  5  2  4  1  8  5  6  5  3  9  4  8  9  5table(x)
## x
##  0  1  2  3  4  5  6  7  8  9 10 11
##  1  3  3  7  7  8  6  3  8  2  1  1chisq.test(table(x))
##  Chi-squared test for given probabilities
##
## data:  table(x)
## X-squared = 21.04, df = 11, p-value = 0.03296
  • 由于未设置参数p,默认概率相同,即检验x是否服从均匀分布;

  • p-value = 0.03296 < 0.05,因此不能认为x是等概率分布的。

例3

simulate.p.value = FALSE(默认情况),则p-value是根据理论上的卡方分布的概率密度函数进行计算的;若simulate.p.value = TRUE,则使用蒙特卡洛模拟计算p-value,参数B为模拟次数。

m <- matrix(c(56, 1932, 23, 4567),nrow = 2, byrow = T)
chisq.test(m, correct = F)
##  Pearson's Chi-squared test
##
## data:  m
## X-squared = 62.698, df = 1, p-value = 2.409e-15chisq.test(m, simulate.p.value = T,B = 999)
##  Pearson's Chi-squared test with simulated p-value (based on 999
##  replicates)
##
## data:  m
## X-squared = 62.698, df = NA, p-value = 0.001

R语言基础 | 卡方检验与列联表、独立性检验相关推荐

  1. R语言基础入门(全)

    R 是门语言,也是个环境.个人认为R有点像matlab. R自带多种统计学及数字分析功能.R的功能也可以通过安装包(Packages,用户撰写的功能)增强,个人感觉这个就是插件.因为S的血缘,R比其他 ...

  2. %3c- r语言运算符,R语言基础教程之运算符

    原标题:R语言基础教程之运算符 运算符类型 在R编程中有以下类型的运算符 - 算术运算符 关系运算符 逻辑运算符 赋值运算符 其他运算符1.算术运算符 下表显示了R语言支持的算术运算符.运算符对向量的 ...

  3. R语言基础知识详解及概括

    R语言基础知识详解及概括 目录 R语言基础知识详解及概括 R数据可视化示例 R语言进行数据创建

  4. 数据分析必备:掌握这个R语言基础包1%的功能让你事半功倍!(附代码)

    来源:大数据 本文约7100字,建议阅读15分钟. 本文介绍了utils包在R语言基础的用途. [ 导读 ]无论数据分析的目的是什么,将数据导入R中的过程都是不可或缺的.毕竟巧妇难为无米之炊.util ...

  5. R语言基础学习记录4:重要函数

    时间: 2018-07-18(学习) 2018-07-22(学习记录) 教程:慕课网 <R语言基础> 讲师:Angelayuan 补充内容: R语言常用函数总结大全.gl()函数 学习内容 ...

  6. R语言基础数据操作fBasics

    R语言基础数据操作&fBasics xlsx文件的导入 library(readxl) data1 <- read_excel("C:/Users/12241/Desktop/ ...

  7. R语言基础指令和并行算法初识(上篇)

    一.R语言背景介绍 二. R语言基础指令 三. R语言并行算法 四. 计划打算 一.R语言背景介绍 1.2.起源:R是统计领域广泛使用的诞生于1980年左右的S语言的一个分支.可以认为R是S语言的一种 ...

  8. R语言基础图形元素——多边形

    R语言基础图形元素--多边形 简介 1. `rect()`函数 2. `polygon()`函数 3. 综合使用示例 4. `box()`函数 参考书籍 简介 在R语言中,绘制多边形是非常方便的,一般 ...

  9. R语言基础知识入门学习(一)

    目录 系列文章目录 一.软件下载 二.基本知识 1. 对象 2. 向量 3. 向量化 4. 因子 总结 系列文章目录 R语言基础知识入门学习(一) 一.软件下载 我们可以通过这个网址对R语言软件进行下 ...

最新文章

  1. ROS机器人程序设计(原书第2版)2.4.1 ROS文件系统导览
  2. java根据富文本生成pdf文件
  3. 深入浅出 Javascript API(二)--地图显示与基本操作
  4. SQLite数据库的使用——利用命令行或Navicat Premium创建数据库
  5. 代理猎手(Proxy Hunter)使用详细教程
  6. altium designer笔记
  7. 我还在努力,你千万不要喜欢上别人
  8. 杭电oj基础题目(1106、1108、1163、1164、1170、1194、1197)
  9. 实战:高级,高级 让 Kubectl的输出像彩虹一样绚丽多彩-2021.11.13
  10. python微服务开发pdf_《微服务设计》中文完整版PDF电子书下载
  11. JavaScript中实现键值对的方法
  12. Android加密篇 AES
  13. 打印机打印出来的条码是歪的怎么办
  14. DM backup database 报错[-7169](bakres与dmap消息通信失败)
  15. #BDA#笔记#阶段二:实践报告撰写备考
  16. Dungeon Master POJ - 2251
  17. 组合式专用铣齿机床设计(论文 CAD图纸)
  18. npm 初始化_初始化npm的最佳时间
  19. 解线性方程组的迭代法
  20. Excel VBA属性、方法、事件大全——Part12(Complete List of Excel VBA attribute/method and event)

热门文章

  1. 可视化大屏原型制作 h5_使用HTML5制作音频播放器,第2部分:原型制作
  2. 介绍一款每日与明日星座查询工具
  3. 用js画出一个等腰三角形
  4. 使用pyautogui 自动翻页、截屏!
  5. 全国收单及网络支付机构腾付通已由中国科学院行政管理局实际控制
  6. 吴恩达机器学习第三章课堂笔记
  7. ROS2机器人应用简明教程01文档
  8. 通电自动高通900E是什么原理?
  9. 怎样区别感应电与漏电教你三招
  10. C# 网通短信网关 SGIP