1、R语言学习系列24频率表和列联表22.频率表和列联表分类变量包括无序分类变量、有序分类变量。对于分类变量的描 述统计,主要是对分类变量各水平值分别进行频数和比例计算, 再进 步计算所需的一些相对频数指标。一、一维列联表1.频数统计分类变量的分析,首先要了解:各类别的样本数(频数),以及 占总样本量的百分比;对有序分类变量,还需要了解:累积频数、累 积百分比。使用table()函数生成简单的频数统计表,基本格式为:table(var1, var2, ,varN)将N个分类变量(因子)创建一个 N维列联表。50.00000 16.66667 33.333332.集中/离散趋势观察原始频数,或者使用
2、众数。对于分类变量,集中 /离散趋势是一体的。3.相对频数指标(1 )比(Riatio )两个有关指标之比A/B,用来反映相对的大小关系,例如,月销 售额/销售人数;(2) 构成比用于描述事物内部各构成部分所占的比重,例如,百分比、累积 百分比;(3) 率(Rate)率是具有时间概念或速度、强度意义的指标,表示某个时期内某 事件发生的频率或强度,例如速率、频率、费率、发病率等。二、二维列联表1.r x c二维列联表:(1) 共n个样本;(2) 按两种属性 A B,属性A有r个水平值:A,Ar;属 性B有c个水平值:B,Bc.属性A=A,属性B=B的样本数为nj .(3) ni.= “属性A=A
3、”的合计数,m二“属性B=B”的合计二堆的丰朝联農斷 11舍 讣gnla眄Art-*%舍 计in Jnfl注:多分类变量对应高维列联表。生成二维列联表使用函数table(),基本格式为:table(A,B)其中,A为行变量,B为列变量。或者使用函数xtabs(),基本格式为:xtabs(A+B, data二mydata)其中,mydata为矩阵或数据框;要进行交叉分类的变量放在 右侧, 以+作为分隔符,若某个变量写在左侧,则为频数向量,常用于数据 已经被表格化时。注:table函数默认忽略NA值,若要将NA直作为一个类别, 需要使用参数useNA二ifanymytable - xtabs( T
4、reatme nt+lmproved, data=Arthritis) #生成治疗方法与疗效的二维列联表(频数)mytableImprovedTreatme nt None Some MarkedPlacebo 29 7 7Treated 13 7 21prop.table(mytable) #各单元格占的比例(所有行列总和 =1)ImprovedTreatme nt None Some MarkedPlacebo 0.34523810 0.08333333 0.08333333Treated 0.15476190 0.08333333 0.25000000margi n.table(myta
5、ble,1) #对第1个变量(行变量)生成边际频数Treatme ntPlacebo Treated43 41prop.table(mytable,1) #对第1个变量(行变量)生成边际比例(每行和=1)ImprovedTreatme nt None Some MarkedPlacebo 0.6744186 0.1627907 0.1627907Treated 0.3170732 0.1707317 0.5121951#可见与安慰剂组相比,治疗组的治愈率从 16%!高到51%margin.table(mytable,2) #对第2个变量(列变量)生成边际频数ImprovedNone Some
6、Marked42 14 28prop.table(mytable, 2) #对第2个变量(列变量)生成边际比例(每列和=1)ImprovedTreatme nt None Some MarkedPlacebo 0.6904762 0.5000000 0.2500000Treated 0.3095238 0.5000000 0.7500000addmargi ns(mytable) #将边际求和结果添加到表格(频数)ImprovedTreatme nt None Some Marked SumPlacebo 29 7 7 43Treated 13 7 21 41Sum 42 14 28 84ad
7、dmargi ns(prop.table(mytable) #将边际求和结果添加到表格(比例)ImprovedTreatme nt None Some Marked SumPlacebo 0.34523810 0.08333333 0.08333333 0.51190476Treated 0.15476190 0.08333333 0.25000000 0.48809524Sum 0.50000000 0.16666667 0.33333333 1.00000000addmargi ns(prop.table(mytable, 1), 2) # 只添加列边际ImprovedTreatme nt
8、 None Some Marked SumPlacebo 0.6744186 0.1627907 0.1627907 1.0000000Treated 0.3170732 0.1707317 0.5121951 1.0000000addmargi ns(prop.table(mytable, 2), 1) # 只添加行边际ImprovedTreatme nt None Some MarkedPlacebo 0.6904762 0.5000000 0.2500000Treated 0.3095238 0.5000000 0.7500000Sum 1.0000000 1.0000000 1.000
9、00002. gmodels 包中的函数 CrossTable()该函数仿照SAS中PROC FRE或SPSS中 CROSSTABS形式生成二维列联表。它有很多选项,可以做许多事情:计算(行、列、单元 格)的百分比;指定小数位数;进行卡方、 Fisher和McNemar独立 性检验;计算期望和(皮尔逊、标准化、调整的标准化)残差;将缺 失值作为一种有效值;进行行和列标题的标注;生成 SAS或 SPSS风格的输出。library(gmodels)CrossTable(Arthritis$Treatment, Arthritis$lmproved)t# 11 Cciwrrt? IM OB |N |
10、 I chi-square contribution IN / Row Tot-al | N / Col Total I N / Table ratal |Total Obser.ations -fn Table: E4| Ar th r 111 sjlnj rovedArthritisSTreatmrit | None | Sofnt三、多维列联表table()和xtabs()都可以基于三个或更多的分类变量(因子)生 成多维列联表。margin.table() 、prop.table()禾口 addmargins()函数也可类似推广到多维。另外,ftable()函数可以用一种紧凑的“平铺式”
11、输出多维列 联表。mytable-xtabs(Treatme nt+Sex+lmproved,data=Arthritis)mytable,Improved = NoneSexTreatme nt Female MalePlacebo 19 10Treated 6 7,Improved = SomeSexTreatme nt Female MalePlacebo 7 0Treated 5 2,Improved = MarkedSexTreatme nt Female MalePlacebo 6 1Treated 16 5ftable(mytable)Improved None Some Mar
12、kedTreatme nt SexPlacebo Female19 76Male100 1Treated Female6 516Male72 5margi n. table(mytable,1)#边际频数Treatme ntPlacebo Treated43 41margi n.table(mytable,2)SexFemale Male59 25margi n.table(mytable,3)ImprovedNone Some Marked42 14 28margi n. table(mytable,c(1,3)#相当于1:治疗方法x 3:疗效的二维列联表ImprovedTreatme nt
13、 None Some MarkedPlacebo 29 7 7Treated 13 7 21ftable(prop.table(mytable,c(1,2) #紧凑形式显示Improved1:治疗方法X 2:性别的各类疗效情况(比例)None Some MarkedTreatme nt SexPlacebo Female0.59375000 0.21875000 0.18750000Male0.90909091 0.00000000 0.09090909Treated Female0.22222222 0.18518519 0.59259259Male0.50000000 0.14285714
14、 0.35714286ftable(addmarg in s(prop.table(mytable, c(1,2), 3)#继续给第3变量添加边际Improved None Some Marked SumTreatme nt SexPlacebo Female0.59375000 0.21875000 0.18750000 1.00000000Male0.90909091 0.00000000 0.09090909 1.00000000Treated Female0.22222222 0.18518519 0.59259259 1.00000000Male0.50000000 0.142857
15、14 0.35714286 1.00000000ftable(addmargi ns(prop.table(mytable, c(1,2), 3)*100#继续改成百分比ImprovedTreatme nt SexNone Some Marked SumPlacebo Female59.375000 21.875000 18.750000 100.000000Male90.909091 0.000000 9.090909 100.000000Treated Female22.222222 18.518519 59.259259 100.000000Male50.000000 14.285714
16、 35.714286 100.0000002.多维列联表的图形展示一一马赛克图单个分类变量,可以使用柱状图或者饼图;若存在两个分类变量, 可以使用三维柱状图;两个以上的分类变量可以使用马赛克图。马赛克图中,嵌套矩形面积正比于单元格频率,其中该频率即多 维列联表中的频率。颜色和/或阴影可表示拟合模型的残差值。使用mosaic()函数,基本格式为:mosaic(table)其中,table为数组形式的列联表;或者用mosaic(formula, data=)其中,formula为形如var1+var2+的公式,data为数据框或表格;可选项shade二TRUE各根据拟合模型的皮尔逊残差值对图形上色
17、; lege nd二TRUE将展示残差的图例。library(vcd)ftable(Tita nic)Survived No YesClass Sex Age1st Male Child 0 5Adult 118 57Female Child 0 1Adult 4 1402nd Male Child 0 11Adult 154 14Female Child 0 13Adult 13 803rd Male Child 35 13Adult 387 75Female Child 17 14Adult 89 76Crew Male Child 0 0Adult 670 192Female Child
18、 0 0Adult 3 20mosaic(Tita nic, shade=TRUE, lege nd=TRUE) mosaic(Class+Sex+Age+Survived, data=Tita nic, shade=TRUE, lege nd=TRU E)#上面两种代码效果相同上图为按船舱等级、乘客性别和年龄层绘制的泰坦尼克号幸存者 的马赛克图。可以看出:(1)从船员到头等舱,存活率陡然提高;(2)大部分孩子都处在三等舱和二等舱中;(3)在头等舱中的大部分女性都存活了下来, 而三等舱中仅有一半女性存活;(4)船员中女性很少,导致该组的 Survived 标签重叠(图底部 的 No 和 Yes)扩展的马赛克图添加了颜色和阴影来表示拟合模型的残差值: 蓝色阴影表明, 在假定生存率与船舱等级、 性别和年龄层无关的 条件下,该类别下的生存率通常超过预期值。红色阴影则含义相反。图形表明, 在模型的独立条件下, 头等舱女性存活数和男性船员 死亡数超过模型预期值。 如果存活数与船舱等级、 性别和年龄层独立, 三等舱男性的存活数比模型预期值低。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1