-
2020-10-21 22:06:46
文章目录
示例数据: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.0 Total 189 100.0 100.0
二维列联表
- 又称为交叉表,展现了两个分类变量下的频数统计
- 也可以使用
table
函数:table(数据框名$变量1,数据框名$变量2)
> table(birthwt$low,birthwt$smoke) no yes no 86 44 yes 29 30
- 生成边际频数 (行列subtotal汇总):
addmargins(频数表)
> addmargins(table(birthwt$low,birthwt$smoke)) no yes Sum no 86 44 130 yes 29 30 59 Sum 115 74 189
epiDisplay
包中的tabpct()
函数:给出含边际频数、按行&按列求百分比的列联表,还给出一个马赛克图;语法为tabpct(数据框名$变量1,数据框名$变量2)
> tabpct(birthwt$low,birthwt$smoke) Original table birthwt$smoke birthwt$low no yes Total no 86 44 130 yes 29 30 59 Total 115 74 189 Row percent birthwt$smoke birthwt$low no yes Total no 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))$expected no yes no 79.10053 50.89947 yes 35.89947 23.10053 # 期望频数均>5,无需进行连续性校正 > chisq.test(table(birthwt$low,birthwt$smoke),correct=FALSE) Pearson's Chi-squared test data: 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()
:用于计算RRcs(数据框名$结局变量,数据框名$因素变量)
cs(cctable=列联表)
cc()
:用于计算ORcc(数据框名$结局变量,数据框名$因素变量)
cc(cctable=列联表)
需要注意的是:
- 若将列联表作为输入,需要将其作为参数
cctable
声明 - 若将列联表作为输入,列联表必须为结局变量在前、因素变量在后的形式
> cc(birthwt$low,birthwt$smoke) # 语法1 birthwt$smoke birthwt$low no yes Total no 86 44 130 yes 29 30 59 Total 115 74 189 OR = 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) # 语法2 no yes Total no 86 44 130 yes 29 30 59 Total 115 74 189 OR = 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 continuity correction data: 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.00215 M-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 correction data: my.matrix McNemar's chi-squared = 5.7857, df = 1, p-value = 0.01616
更多相关内容 -
R语言列联表
2021-01-20 12:07:31主要聚焦于类别变量的频数表和列联表,以下是常用的函数和方法: table():使用 N 个类别型变量(因子)创建一个 N 维列联表 xtab():根据一个公式和一个矩阵或数据框创建一个 N 维列联表 CrossTable(): 函数有很多... -
论文研究 - 方列联表的扩展双变量T分布类型对称模型
2020-05-29 06:28:49如果合理假设具有不同自由度的不同边际方差的基础双变量t分布是合理的,则新模型可能适合于平方列联表。 随着自由度变大,建议的模型接近扩展的线性对角线参数对称模型,如果合理假设基本的二元正态分布,则该模型... -
Fisher的精确中P方法:Fisher的精确P中方法测试2x2列联表的行/列独立性。-matlab开发
2021-05-30 21:16:00它是用于离散数据的非参数统计检验确定两个变量之间是否存在非随机关联。 Mid-P 值是保守性之间的合理折衷普通精确检验和大样本方法的不确定性。 Mid-P 值通常表现良好,通常有点保守, 目前,许多领先的统计学家都... -
matlab 解决列联表问题,列联表那点事,别再傻傻分不清楚了
2021-04-21 14:24:58列联表是医学科研中最常见的数据存储格式(或者说数据类型)之一。通常,列联表的横纵方向展示的是两个不同的分类变量,最常见的类型就是四格表(即2×2的列联表)。如下图所示,横向变量是“是否患肺癌”,纵向变量是...列联表是医学科研中最常见的数据存储格式(或者说数据类型)之一。
通常,列联表的横纵方向展示的是两个不同的分类变量,最常见的类型就是四格表(即2×2的列联表)。如下图所示,横向变量是“是否患肺癌”,纵向变量是“是否吸烟”,都是二分类变量,表格中的数据展示的则是每个分类变量水平组合下的人数(频数)。
这是最简单的列联表数据,大家也最熟悉。当然,现实世界中,列联表的数据格式可不止这一种,下面我们一一熟悉一下,顺便了解一下如何对数据进行统计学检验。1拟合优度检验拟合优度检验针对的是样本数据的分布,即样本数据与已知总体的分布是否相同。
现欲研究男性群体中,所有血型所占比例是否相同。由卡方检验的结果可知,四种血型分布在男性中并不均匀。
如果事先知道四种血型在男性群体中的分布,要检验该样本是否符合该分布呢?这里的参数p定义的就是已知总体的频率分布。2卡方齐性检验和卡方独立性检验卡方齐性检验是用来比较不同分组下,各个类型的比例是否一致,即男女群体中,血型分布是否一样。
以上结果表明,在男女群体中,血型的分布无显著的统计学差异。
独立性检验结果与之相同,检验的就是血型分布与性别这个变量是否相关。3Cochran-Mantel-Haenszel卡方检验CMH检验是用来检验分层的分类变量,既然是分层,也就是说,至少是三维数据。每一维数据至少含有2个水平。除此之外,对于行变量为无序分类而列变量为有序分类的数据,由于不能忽略等级关系,所以也只能用CMH检验,而不能用Pearson卡方检验。
比如对于下面这个数据:
这个array一共分为三个维度,分层变量是penicillin的水平,一共5个水平(依次递增),另外两个变量是是否推迟(delay)注射,和结局(cured or died)。
CMH检验结果显示P值小于0.05,因此检验是有统计学意义的,OR=7,95%CI为1.027,47.725,如何解释?
也就是说在把penicillin进行分层之后,立即注射(delay=none)与推迟注射(delay=1.5h)的治愈率的OR值是7。这是合并后的OR值,与粗的OR,即不分层OR 进行比较,如果相差较大,则说明,penicillin是一个混杂因素。如果penicillin的水平与结局存在交互作用,这个方法也是可行的,如果存在三维的交互作用,则此方法不适用。
对于有序分类列变量资料:
如图所示,工作满意程度是一个四分类的等级变量,而工资水平也可以看成四分类的等级变量,最后得出的P值小于0.05,可以得出的结论是随着工资的提高,工作满意度也随之提高。如果是用一般的Pearson X2检验,只能比较不同工资水平下,对工作满意程度的人数构成比是否相同。4配对四格表卡方检验配对四格表常出现在“自身前后比较”的实验设计中,也常见于“筛检”试验中。
由p值可知,case与control之间存在统计学意义上的差异。此种情况下,如果要考查行列变量之间的相关性,则还是用chisq.test().5有序分类变量列联表检验有序分类资料是指R×C列联表中,行变量或者列变量是有序分类的,或者二者都是有序分类。对于分组变量(行变量)为有序分类资料,而列变量为无序分类资料,则直接将其看成R×C无序分类资料进行分析。对于行变量是无序分类,列变量(指标变量)是有序变量,比如药物的疗效,群众的满意程度,此种资料可用wilcox检验。对于两者均是有序分类的资料,此时,如果行列变量是同一属性,那就相当于是配对四格表资料的扩展。如果行列变量属性不同,则可以推断两个变量是否存在相关性,而且还可以推断这种相关是否为线性相关。前者用chisq.test(),后者可用lbl_test()(来自coin包)。
“好了,以上就是关于列联表常用检验方法的介绍。
最重要的一点是大家在使用之前必须搞清楚自己的数据特征和检验的目的。虽然看起来都是列联表,但是不同的数据采用的方法不同,得到的结果也不一样。
祝你眼明心亮!”END
-
第2章列联表和对应分析.ppt
2020-06-11 09:19:23中央财经大学统计学院 第 12 章 列联表和 对应分析 列联表中两个变量的独立性检验 对应分析 中央财经大学统计学院 2 学习目标 ? 列联表中两个变量独立性检验的原理 和软件结果解释 ? 对应分析的基本原理和软件结果... -
列联表与独立性检验(一维列联表 二维列联表 三维列联表 ; 卡方检验 Fisher精确检验 Cochran-Mantel-...
2022-05-18 16:40:42列联表 一维列联表 二维列联表 三维列联表 独立性检验 卡方检验 Fisher精确检验 Cochran-Mantel-Haenszel检验列联表
列联表可以告诉你组成表格的各种变量组合的频数或比例
一维列联表
data <- with(Arthritis,table(Improved)) ## 简单的频数统计表 data prop.table(data) ## 将频数转化为比例值 prop.table(data)*100 ## 转化为百分比
二维列联表
data <- xtabs(~Treatment+Improved, data = Arthritis) ## 生成二维列联表 data margin.table(data,1) prop.table(data,1) addmargins(data) addmargins(prop.table(data)) ## 添加所有变量的边际和 addmargins(prop.table(data,1),2) ## 仅添加各行的边际和 addmargins(prop.table(data,1),1) ## 仅添加各列的边际和 library(gmodels) CrossTable(Arthritis$Treatment,Arthritis$Improved)
三维列联表
data <- xtabs(~Treatment+Improved+Sex, data = Arthritis) data ftable(data) margin.table(data,1) margin.table(data,2) margin.table(data,3) margin.table(data,c(1,3)) ftable(prop.table(data,c(1,2))) ftable(addmargins(prop.table(data,c(1,2)),3))
独立性检验
对列联表中各变量之间是否相关或独立进行检验
卡方检验
library(vcd) data <- xtabs(~Treatment+Improved, data = Arthritis) ## 生成二维列联表 chisq.test(data) ## 卡方检验 data <- xtabs(~Sex+Improved, data = Arthritis) ## 生成二维列联表 chisq.test(data) ## 卡方检验
P值小于0.05,代表变量间不独立Fisher精确检验
data <- xtabs(~Treatment+Improved, data = Arthritis) ## 生成二维列联表 fisher.test(data)
Cochran-Mantel-Haenszel检验
data <- xtabs(~Treatment+Improved+Sex, data = Arthritis) ## 生成三维列联表 mantelhaen.test(data) ##必须是三维列联表
参考文献
Kabacoff, R. (2016). R 语言实战. Ren min you dian chu ban she.
-
应用SPSS软件进行列联表分析资料.docx
2020-09-24 12:52:57应 用 SPSS 软 件 进 行 列联表分析 应用SPSS软件进行列联表分析 在许多调查研究中所得到的数据大多为定性数据即名义或定序尺度测 量的数据例如在一项全球教育水平的研究中调查了 400余人的个人信息 包括性别学历... -
用SPSS进行列联表分析(Crosstabs)实例.doc
2020-11-24 11:40:08用SPSS进行列联表分析Crosstabs实例 列联表分析Crosstabs 列联表是指两个或多个分类变量各水平的频数分布表又称频数交叉表SPSS的Crosstabs过程为二维或高维列联表分析提供了22种检验和相关性度量方法其中卡方检验是... -
如何使用SPSS列联表分析,查看变量间的相关关系(下)
2021-04-12 17:14:07上一节,在IBM SPSS Statistics中我们已经将满意度重新编码为仅包含满意、不满意两个变量值的变量,并简单了解了列联表的变量选择面板。本节,将会通过实例进一步探究满意度与性别间的相关关系。 一、选择变量 ...上一节,在IBM SPSS Statistics中我们已经将满意度重新编码为仅包含满意、不满意两个变量值的变量,并简单了解了列联表的变量选择面板。本节,将会通过实例进一步探究满意度与性别间的相关关系。
一、选择变量
为了研究性别与满意度的相关关系,如图1所示,我们需要分别将性别、满意度变量添加到右侧的行、列中,形成二乘二的列联表。
图1:选择变量二、设置精确检验方法
然后,再单击“精确”选项,设置分析所用的精确检验方法。在进行非参数检验时,需要设置精确检验方法,用于计算检验对应的P值。
一般情况下,选择“仅渐进法(适用于较大样本或服从渐进分布的数据)”,如果数据不符合渐进分布,则要选择蒙特卡洛法。“精确”法,是在小样本量的情况下使用,计算量较大,对计算机的内存要求较高。
图2:精确检验选项
三、设置统计选项
完成精确检验设置后,如图3所示,打开“统计”按钮,选择其中的“卡方”选项,并在“名义”选项框中选择“列联系数”,以获得二乘二的卡方检验结果。
图3:设置统计选项四、设置单元格显示
最后,在单元格显示选项中,可以进一步设置分析结果的数据呈现方式。我们选择了以实测计数,并显示行(性别百分比)。
图4:单元格显示选项
五、分析结果
完成以上设置后,运行结果。首先,如图5所示,从频率表看到,男性与女性的满意占比都较不满意占比高,而且男性的满意占比似乎高于女性。
图5:频率表
为了进一步验证男性与女性的满意占比是否有显著性差异,我们可以观察卡方检验的数据。
如图6所示,可以看到,卡方的渐进显著性为0.015<0.05,表明男性与女性的满意占比有显著性差异,男性的满意占比显著高于女性。
图6:卡方检验与列联系数
以上就是IBM SPSS Statistics二乘二列联表分析的应用介绍。二乘二列联表的卡方检验应用较为广泛,可用于分析两个或多个变量间的相关关系,是一个相当实用的分析方法。
-
如何使用SPSS列联表分析,查看变量间的相关关系(上)
2021-04-09 17:11:20IBM SPSS Statistics的列联表分析,也称为交叉表分析,用于分析两个或以上分组变量的相关关系,在分析影响满意度的因素、药物有效性等方面都有很好的应用。 本文将以较为简单的二乘二列联表卡方检验为例,介绍一下... -
R实战 第十篇:列联表和频数表
2020-12-21 14:28:12列联表是观测数据按两个或更多属性(定性变量)分类时所列出的频数分布表,它是由两个以上的变量进行交叉分类的频数分布表。交互分类的目的是将两变量分组,然后比较各组的分布状况,以寻找变量间的关系。按两个变量... -
R 中创建绘制列联表
2022-05-03 13:26:00R 中创建绘制列联表 可以使用该table函数在 R 中创建列联表。例如,考虑以下带有随机数据的示例, set.seed(20) X<-sample(c("Yes","No"),10,replace=TRUE) #"No""Yes""Yes""No""No""Yes""No""Yes""No""No" ... -
sas之列联表分析及其检验
2010-12-15 21:56:36在统计实践中,人们经常需要对样本资料进行各种各样的分类,以便分析研究。如果对样本资料按照两个指标变量进行...这种对列联表中两分类变量是否独立的检验,也是假设检验的一个重要内容,称为列联表分析或列联表检验。 -
《第12章列联表和对应分析》-公开课件_二维表的一列对应
2019-12-29 16:37:54第12章 列联表和对应分析 列联表中两个变量的独立性检验 对应分析 学习目标 列联表中两个变量独立性检验的原理和软件结果解释 对应分析的基本原理和软件结果分析 例12.1美国的General Social Survey 二维列联表中的... -
列联表那点事,别再傻傻分不清楚了
2021-04-21 14:24:58列联表是医学科研中最常见的数据存储格式(或者说数据类型)之一。通常,列联表的横纵方向展示的是两个不同的分类变量,最常见的类型就是四格表(即2×2的列联表)。如下图所示,横向变量是“是否患肺癌”,纵向变量是... -
python列联表分析
2020-11-11 15:21:53python列联表分析,生成分类条形图,计算卡方,生成个案数据 ######################################## #### 创建 个案数据 供 spss excel 这样的软件分析 # ######################################## import ... -
chi2cont:chi2cont 对 m×n 列联表执行卡方检验-matlab开发
2021-05-30 11:47:47h = chi2cont(x) 对 m×n 列联表 x 中的数据执行卡方检验。 零假设是列(“处理”)之间的行变量分布(“结果”)没有差异。 测试结果在 h 中返回。 h=1 表示在 5% 显着性水平拒绝原假设。 h=0 表示不能在 5% 拒绝原... -
对应分析和列联表.ppt
2020-09-09 07:54:58中央财经大学统计学院 第 12 章 列联表和 对应分析 列联表中两个变量的独立性检验 对应分析 中央财经大学统计学院 2 学习目标 ? 列联表中两个变量独立性检验的原理 和软件结果解释 ? 对应分析的基本原理和软件结果... -
R语言构建仿真列联表并进行卡方检验(chisq.test):检验两个分类变量是否独立、输出期望的列联表
2021-10-14 13:54:43R语言构建仿真列联表并进行卡方检验(chisq.test):检验两个分类变量是否独立、输出期望的列联表 目录 R语言构建仿真列联表并进行卡方检验(chisq.test):检验两个分类变量是否独立、输出期望的列联表 #仿真... -
R语言入门之频率表和列联表
2020-12-21 14:28:12在这一期我们将要学习如何针对分类变量数据创建频率表和列联表,并且在此基础之上进行独立性检验、关联度测量以及相关数据的可视化。创建频率表和列联表R语言提供了许多方法来创建频率表和列联表,在这里我们主要... -
使用 nxm 列联表的 Fisher 精确检验:您对列联表大于 2*2 的 Fisher 精确检验有问题吗?-matlab开发
2021-06-01 12:45:00至于功能: [ Sig,PValue,ContigenMatrix ] = FisherExactTest( XVector,YVector ) 输入:两个变量X,Y的数据作为XVector和YVector 或者您可以只输入列联表。 输出:如果 X 和 Y 关联,“Sig”返回 1,否则返回 0 ... -
Python中的列联表
2021-04-26 19:00:13列联表是显示一个变量在行中分布而另一个变量在列中分布的表。它用于研究两个变量之间的相关性。它是一个多路表格,用于描述一个数据集,其中每个观察值属于多个变量中的每个变量的一个类别。同样,它基本上是两个或... -
R语言卡方独立性检验、使用chisq.test函数对列联表进行卡方检验、检验两个分类变量是否独立(自定义构建列联...
2022-04-25 16:21:15R语言卡方独立性检验、使用chisq.test函数对列联表进行卡方检验、检验两个分类变量是否独立 -
R语言使用chisq.test函数对列联表进行卡方检验、检验两个分类变量是否独立、查看expected属性来获取列联表...
2022-04-29 20:18:33R语言使用chisq.test函数对列联表进行卡方检验、检验两个分类变量是否独立、查看expected属性来获取列联表的期望频数 -
列联表分析
2018-11-27 16:28:53简要讲述了列联表分析的功能以及如何使用FREQ过程来实现。 -
R CrossTable生成二维列联表
2021-12-18 10:27:59对于二维列联表,table()函数的使用格式为: mytable <- table(A, B) ...函数仿照SAS中PROC FREQ或SPSS中CROSSTABS的形式生成二维列联表。 > library(gmodels) > CrossTable(Arthritis$Trea