目录
上篇介绍了连续变量的统计描述的R语言相关函数,计算数值的相关统计指标。本文介绍分类变量的统计描述及如何在R语言中实现。
不同于连续变量,在统计分析中,分类变量的统计描述主要是汇总分类变量各类别例数及百分比。后续举例以R自带数据集mtcars为例。
一、一维列联表
1、table()函数
在对分类变量的统计描述中,table()函数是我们常用的一维列联表函数。
table(mtcars$cyl) 可以获取各类的频数。值得注意的是,如果想显示缺失数据,需要加上参数useNA="ifany"。
> table(mtcars$cyl)
4 6 8
11 7 14
> table(mtcars$am)
0 1
19 13
2、prop.table()函数
prop.table(table(mtcars$cyl)) 可以获得各类占总体的频率。
> prop.table(table(mtcars$cyl))
4 6 8
0.34375 0.21875 0.43750
> prop.table(table(mtcars$cyl))*100 #*100可以获得百分比
4 6 8
34.375 21.875 43.750
二、二维列联表
1、table()函数
table(A,B) ,A是行变量,B是列变量;
由结果可知,am=0列,cyl=4、6、8的频数依次是3、4、12;am=1列,cyl=4、6、8频数依次是8、3、2。
> table(mtcars$cyl,mtcars$am)
0 1
4 3 8
6 4 3
8 12 2
> prop.table(table(mtcars$cyl,mtcars$am)) #各单元占总体百分比
0 1
4 0.09375 0.25000
6 0.12500 0.09375
8 0.37500 0.06250
> prop.table(table(mtcars$cyl,mtcars$am),1)#各单元占行百分比
0 1
4 0.2727273 0.7272727
6 0.5714286 0.4285714
8 0.8571429 0.1428571
> prop.table(table(mtcars$cyl,mtcars$am),2)#各单元占列百分比
0 1
4 0.1578947 0.6153846
6 0.2105263 0.2307692
8 0.6315789 0.1538462
2、xtabs()函数
表达式为:xtabs(~A+B,data=mydata),结果同table()函数一致。求得各单元百分比用prop.table()函数。addmargins()函数可求边际和。
> xtabs(~cyl+am,data = mtcars)
am
cyl 0 1
4 3 8
6 4 3
8 12 2
> addmargins(xtabs(~cyl+am,data = mtcars)) #addmargins()函数可以求边际和
am
cyl 0 1 Sum
4 3 8 11
6 4 3 7
8 12 2 14
Sum 19 13 32
3、CrossTable()函数
gmodels
包中的
CrossTable()
函数也可以创建二维列联表。其函数表达式和table()函数相似。
> library(gmodels)
> CrossTable(mtcars$cyl,mtcars$am)
Cell Contents
|-------------------------|
| N |
| Chi-square contribution |
| N / Row Total |
| N / Col Total |
| N / Table Total |
|-------------------------|
Total Observations in Table: 32
| mtcars$am
mtcars$cyl | 0 | 1 | Row Total |
-------------|-----------|-----------|-----------|
4 | 3 | 8 | 11 |
| 1.909 | 2.790 | |
| 0.273 | 0.727 | 0.344 |
| 0.158 | 0.615 | |
| 0.094 | 0.250 | |
-------------|-----------|-----------|-----------|
6 | 4 | 3 | 7 |
| 0.006 | 0.009 | |
| 0.571 | 0.429 | 0.219 |
| 0.211 | 0.231 | |
| 0.125 | 0.094 | |
-------------|-----------|-----------|-----------|
8 | 12 | 2 | 14 |
| 1.636 | 2.391 | |
| 0.857 | 0.143 | 0.438 |
| 0.632 | 0.154 | |
| 0.375 | 0.062 | |
-------------|-----------|-----------|-----------|
Column Total | 19 | 13 | 32 |
| 0.594 | 0.406 | |
-------------|-----------|-----------|-----------|
三、多维列联表
如果有三个及以上的分类变量进行交叉汇总频数,就要生成多维列联表。table()函数和xtabs()函数都可以基于三个或者更多的分类变量生成多维列联表。prop.table()、addmargins()函数都可以推广使用。
> table(mtcars$cyl,mtcars$am,mtcars$gear)
, , = 3
0 1
4 1 0
6 2 0
8 12 0
, , = 4
0 1
4 2 6
6 2 2
8 0 0
, , = 5
0 1
4 0 2
6 0 1
8 0 2
> xtabs(~cyl+am+gear,data = mtcars)
, , gear = 3
am
cyl 0 1
4 1 0
6 2 0
8 12 0
, , gear = 4
am
cyl 0 1
4 2 6
6 2 2
8 0 0
, , gear = 5
am
cyl 0 1
4 0 2
6 0 1
8 0 2