R语言基础 | 卡方检验与列联表、独立性检验
专注系列化、高质量的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语言基础 | 卡方检验与列联表、独立性检验相关推荐
- R语言基础入门(全)
R 是门语言,也是个环境.个人认为R有点像matlab. R自带多种统计学及数字分析功能.R的功能也可以通过安装包(Packages,用户撰写的功能)增强,个人感觉这个就是插件.因为S的血缘,R比其他 ...
- %3c- r语言运算符,R语言基础教程之运算符
原标题:R语言基础教程之运算符 运算符类型 在R编程中有以下类型的运算符 - 算术运算符 关系运算符 逻辑运算符 赋值运算符 其他运算符1.算术运算符 下表显示了R语言支持的算术运算符.运算符对向量的 ...
- R语言基础知识详解及概括
R语言基础知识详解及概括 目录 R语言基础知识详解及概括 R数据可视化示例 R语言进行数据创建
- 数据分析必备:掌握这个R语言基础包1%的功能让你事半功倍!(附代码)
来源:大数据 本文约7100字,建议阅读15分钟. 本文介绍了utils包在R语言基础的用途. [ 导读 ]无论数据分析的目的是什么,将数据导入R中的过程都是不可或缺的.毕竟巧妇难为无米之炊.util ...
- R语言基础学习记录4:重要函数
时间: 2018-07-18(学习) 2018-07-22(学习记录) 教程:慕课网 <R语言基础> 讲师:Angelayuan 补充内容: R语言常用函数总结大全.gl()函数 学习内容 ...
- R语言基础数据操作fBasics
R语言基础数据操作&fBasics xlsx文件的导入 library(readxl) data1 <- read_excel("C:/Users/12241/Desktop/ ...
- R语言基础指令和并行算法初识(上篇)
一.R语言背景介绍 二. R语言基础指令 三. R语言并行算法 四. 计划打算 一.R语言背景介绍 1.2.起源:R是统计领域广泛使用的诞生于1980年左右的S语言的一个分支.可以认为R是S语言的一种 ...
- R语言基础图形元素——多边形
R语言基础图形元素--多边形 简介 1. `rect()`函数 2. `polygon()`函数 3. 综合使用示例 4. `box()`函数 参考书籍 简介 在R语言中,绘制多边形是非常方便的,一般 ...
- R语言基础知识入门学习(一)
目录 系列文章目录 一.软件下载 二.基本知识 1. 对象 2. 向量 3. 向量化 4. 因子 总结 系列文章目录 R语言基础知识入门学习(一) 一.软件下载 我们可以通过这个网址对R语言软件进行下 ...
最新文章
- ROS机器人程序设计(原书第2版)2.4.1 ROS文件系统导览
- java根据富文本生成pdf文件
- 深入浅出 Javascript API(二)--地图显示与基本操作
- SQLite数据库的使用——利用命令行或Navicat Premium创建数据库
- 代理猎手(Proxy Hunter)使用详细教程
- altium designer笔记
- 我还在努力,你千万不要喜欢上别人
- 杭电oj基础题目(1106、1108、1163、1164、1170、1194、1197)
- 实战:高级,高级 让 Kubectl的输出像彩虹一样绚丽多彩-2021.11.13
- python微服务开发pdf_《微服务设计》中文完整版PDF电子书下载
- JavaScript中实现键值对的方法
- Android加密篇 AES
- 打印机打印出来的条码是歪的怎么办
- DM backup database 报错[-7169](bakres与dmap消息通信失败)
- #BDA#笔记#阶段二:实践报告撰写备考
- Dungeon Master POJ - 2251
- 组合式专用铣齿机床设计(论文 CAD图纸)
- npm 初始化_初始化npm的最佳时间
- 解线性方程组的迭代法
- Excel VBA属性、方法、事件大全——Part12(Complete List of Excel VBA attribute/method and event)