R语言教程之频率和交叉表Frequencies and Crosstabs
本节介绍从分类变量创建频率和应急表,以及独立性测试,关联度测量和图形显示结果的方法。
生成频率表
R提供了许多创建频率和应急表的方法。下面介绍三种。在下面的例子中,假设A,B和C表示分类变量。
表
可以生成使用频率表表()函数,使用所述比例的表prop.table()使用的功能,和边际频率margin.table() 。
# 2-Way Frequency Table
attach(mydata)
mytable <- table(A,B) # A will be rows, B will be columns
mytable # print table
margin.table(mytable, 1) # A frequencies (summed over B)
margin.table(mytable, 2) # B frequencies (summed over A)
prop.table(mytable) # cell percentages
prop.table(mytable, 1) # row percentages
prop.table(mytable, 2) # column percentages
table()也可以基于3个或更多分类变量生成多维表。在这种情况下,使用ftable()函数可以更有吸引力地打印结果。
# 3-Way Frequency Table
mytable <- table(A, B, C)
ftable(mytable)
表忽略缺失值。要在计数中包含NA作为类别,请包括表格选项exclude = NULL(如果变量是矢量)。如果变量是一个因素,则必须使用newfactor < – factor(oldfactor,exclude = NULL)创建新因子。
XTABS
该XTABS()函数允许您创建使用公式样式输入交叉表。
# 3-Way Frequency Table
mytable <- xtabs(~A+B+c, data=mydata)
ftable(mytable) # print table
summary(mytable) # chi-square test of indepedence
如果公式左侧包含一个变量,则假定它是一个频率向量(如果数据已经列表,则很有用)。
交叉表
的交叉表()中的函数gmodels包产生在PROC FREQ仿照交叉制表SAS或SPSS交叉表。它有很多选择。
# 2-Way Cross Tabulation
library(gmodels)
CrossTable(mydata$myrowvar, mydata$mycolvar)
可以选择报告百分比(行,列,单元格),指定小数位数,产生卡方检验,Fisher检验和McNemar检验的独立性,报告预期值和残差值(皮尔逊,标准化,调整标准化),包括缺失值为有效,使用行和列标题进行注释,并将格式设置为SAS或SPSS样式输出!
有关详细信息,请参阅帮助(CrossTable)。
独立测试
卡方检验
对于双向表,您可以使用chisq.test(mytable )来测试行和列变量的独立性。默认情况下,p值是从测试统计量的渐近卡方分布中计算出来的。可选地,p值可以通过蒙特卡洛模拟推导出来。
费舍尔精确测试
fisher.test(x )提供了一个独立性的确切测试。x是矩阵形式的二维列联表。
Mantel – Haenszel测试
使用mantelhaen.test(x )函数对零假设执行Cochran-Mantel-Haenszel卡方检验,假设两个名义变量在每个层中都是条件独立的,假设没有三向相互作用。x是三维列联表,其中最后一个维是指地层。
对数线性模型
您可以使用MASS包中的loglm()函数来生成对数线性模型。例如,假设我们有一个基于变量A,B和C的三维列联表。
library(MASS)
mytable <- xtabs(~A+B+C, data=mydata)
我们可以执行以下测试:
相互独立:A,B和C是成对独立的。loglm(~A+B+C, mytable)
部分独立性:A部分独立于B和C(即,A独立于复合变量BC)。loglin(~A+B+C+B*C, mytable)
条件独立: A独立于B,给定C.loglm(~A+B+C+A*C+B*C, mytable)
没有三方互动loglm(~A+B+C+A*B+A*C+B*C, mytable)
Martin Theus和Stephan Lauer 使用马赛克图写了一篇关于可视化对数线性模型的优秀文章。
协会措施
vcd软件包中的assocstats(mytable )函数计算rxc表的phi系数,应急系数和Cramer's V。vcd软件包中的kappa(mytable)函数计算Cohen's kappa和加权kappa作为混淆矩阵。请参阅理查德达林顿关于交叉表中关联度量的文章,对这些统计数据进行精彩的回顾。
可视化结果
使用vcd软件包可视化分类数据之间的关系(例如镶嵌和关联图)。
使用ca软件包进行对应分析(直观地查看应急表中的行和列之间的关系)。
要练习制作这些图表,请尝试DataCamp上的数据可视化课程。
将频率表转换为“原始”平面文件
最后,可能有些时候你需要原始的“平面文件”数据帧而不是频率表。Marc Schwartz在Rhelp邮件列表上提供了用于将表格转换回数据框的代码。
想学到更多关于R语言的,我给大家介绍一个国外比较火的网站 https://www.tatvic.com,这是一项了不起的研究!