统计学是搜集、分析、表述和解释数据的科学与艺术,掌握统计学相关知识可以帮助我们更好的发现数据背后隐藏的价值,R语言是现今最受欢迎的数据分析和可视化工具之一。本篇主要介绍如何用表格法来统计分析单变量数据、两个变量的数据,并用R语言作为统计分析工具。
数据可以分为分类型数据或数量型数据,分类型数据是用标签或名称来识别项目的类型,数量型数据是表示多少或大小的数值。
单变量的数据统计
频数分布是一种数据的表格汇总方法,表示在几个互不重叠组别中,每一组项目的个数(即频数)。
分类型数据统计
先用下面的样本数据来说明如何编制和解释分类型数据的频数分布。
1.可口可乐、健怡可乐、胡椒博士、百事可乐和雪碧是5种受欢迎的软饮料,可通过统计购买各类别饮料的次数分析它们受欢迎的程度,在R中导入“50次购买软饮料的样本数据”。
>library(xlsx)
> drink<-read.xlsx('/Users/liuqin/Documents/50次购买软饮料的样本数据.xlsx',1)
> head(drink)
购买记录 饮料类别
1 1 可口可乐
2 2 健怡可乐
3 3 百事可乐
4 4 健怡可乐
5 5 可口可乐
6 6 可口可乐
2.使用table()函数创建一个频数分布表,表中统计了50次购买中每一种饮料出现的次数,可口可乐出现19次排在首位,百事可乐居第二位,第三位是健怡可乐,雪碧和胡椒博士并列第四。
> drinktable<-with(drink,table(饮料类别))
> drinktable
饮料类别
百事可乐 胡椒博士 健怡可乐 可口可乐 雪碧
13 5 8 19 5
3.也可以将频数转化为相对频数分布和百分数频数分布,可以得到每一种饮料在购买的饮料所占比例,可口可乐受欢迎程度最高,所占比例为0.38或38%,胡椒博士和雪碧受欢迎程度最低,所占比例为0.1或10%。
> prop.table(with(drink,table(饮料类别)))
饮料类别
百事可乐 胡椒博士 健怡可乐 可口可乐 雪碧
0.26 0.10 0.16 0.38 0.10
> prop.table(with(drink,table(饮料类别)))*100
饮料类别
百事可乐 胡椒博士 健怡可乐 可口可乐 雪碧
26 10 16 38 10
数量型数据统计
频数分布也适用于数量型数据,下面的样本数据来说明如何编制和解释数量型数据的频数分布。
1.样本数据是一家小型会计事务所对20位客户完成年末审计所需的时间(单位:天),在R中导入“年末审计时间的样本数据”。
> time<-read.xlsx('/Users/liuqin/Documents/年末审计时间样本数据.xlsx',1)
> head(time)
客户 年末审计时间.单位.天.
1 1 12
2 2 15
3 3 20
4 4 22
5 5 14
6 6 14
2.数量型数据先要确定组数,然后确定每组组宽,最后确定组与组之间的组限。
由于样本数据较少,可选择5个组数。组宽可通过样本最大值33减去最小值12,将极差除以组数后得到近似组宽为4.2,取整为5。组限必须将最大值和最小值包含进去,所以可将上限定为34,下限定为10。
> 审计时间 <- c("10~14", "15~19", "20~24", "25~29", "30~34")
> breaks <- c(10,14,19,24,29,34)
3.使用cut()函数按照指定的断点来分割数据,得到各个分组,使用table()函数得到频数表。我们可以观察到最频繁发生的审计时间在15~19天这一组,有8个审计时间属于这一组,只有1次审计需要30天以上。
> timetable<- cut(time$年末审计时间.单位.天., breaks = breaks, labels = 审计时间, right = TRUE )
> table(审计时间=timetable)
审计时间
10~14 15~19 20~24 25~29 30~34
4 8 5 2 1
4.也可以将频数转化为相对频数分布和百分数频数分布,有0.4或40%的审计需要15~19天时间,只有0.05或5%的审计需要30天或更多时间。
> prop.table(table(审计时间=timetable))
审计时间
10~14 15~19 20~24 25~29 30~34
0.20 0.40 0.25 0.10 0.05
> prop.table(table(审计时间=timetable))*100
审计时间
10~14 15~19 20~24 25~29 30~34
20 40 25 10 5
两个变量的数据统计
以上讨论了利用表格法对一个分类或数量变量的数据进行统计,下面将介绍如何编制两个变量数据的表格统计。
交叉分组表是一种汇总两个变量数据的方法,虽然两个变量可以是分类的或数量的,但一个变量是分类的而另一个变量是数据的交叉分组表最为常见。
1.样本数据为洛杉矶地区100家饭店的质量等级和代表性餐价数据,在R中导入“100家洛杉矶饭店的质量等级和餐价样本数据”。
> mydata<-read.xlsx('/Users/liuqin/Documents/100家洛杉矶饭店的质量等级和餐价样本数据.xlsx',1)
> head(mydata)
饭店 质量等级 餐价.美元.
1 1 好 18
2 2 好 22
3 3 好 28
4 4 很好 38
5 5 很好 33
6 6 好 28
2.质量等级是一个分类变量,餐价是一个数量变量,使用xtabs()函数得到交叉分组表,左边栏对应质量等级变量,顶部边栏对应餐价变量。样本中质量等级为很好且餐价在20~29美元的饭店最多(22家),质量等级为优秀且餐价在10~19美元的饭店只有2家。
> 餐价<- c("10~19", "20~29", "30~39", "40~49")
> breaks <- c(10,19,29,39,49)
> 餐价<- cut(mydata$餐价.美元., breaks = breaks, labels = 餐价, right = TRUE )
> mytable<-xtabs(~mydata$质量等级+餐价,data=mydata)
> mytable
餐价
mydata$质量等级 10~19 20~29 30~39 40~49
好 13 14 1 0
很好 9 22 17 2
优秀 1 4 9 8
3.也可以将交叉分组表化为相对频数分布或百分数频数分布,样本中餐价在20~29美元且质量等级为很好的饭店占比最高,为22%,餐价在40~49美元且质量等级为好的饭店占比最低,为0%。
> prop.table(mytable)
餐价
mydata$质量等级 10~19 20~29 30~39 40~49
好 0.13 0.14 0.01 0.00
很好 0.09 0.22 0.17 0.02
优秀 0.01 0.04 0.09 0.08
4.使用pro.table()函数分别可生成边际比例,当参数为1时指代table()语句中的第一个变量,即质量等级变量,每一行是同一质量等级的餐价相对频数分布,对于质量等级最低的饭店,我们看到最大比例是较便宜的饭店(46%的饭店餐价是10~19美元,50%的饭店餐价是20~29美元)。对于质量等级最高的饭店,我们看到最大比例的是较贵的饭店(40.9%的饭店餐价是30~39美元,36.4%的饭店餐价是40~49美元)。
> prop.table(mytable,1)
餐价
mydata$质量等级 10~19 20~29 30~39 40~49
好 0.46428571 0.50000000 0.03571429 0.00000000
很好 0.18000000 0.44000000 0.34000000 0.04000000
优秀 0.04545455 0.18181818 0.40909091 0.36363636
5.当参数为2时指代table()语句中的第二个变量,即餐价变量,每一列是同一个餐价范围的质量等级相对频数分布,对于餐价最便宜的饭店,我们看到饭店质量等级较低的比例最高(56.5%的饭店质量等级为好,4.3%的饭店质量等级为优秀)。对于餐价最昂贵的饭店,我们看到饭店质量等级较高的比例最高(80%的饭店质量等级为优秀)。这个现象响应了一句老话“便宜没好货,好货不便宜”。
> prop.table(mytable,2)
餐价
mydata$质量等级 10~19 20~29 30~39 40~49
好 0.56521739 0.35000000 0.03703704 0.00000000
很好 0.39130435 0.55000000 0.62962963 0.20000000
优秀 0.04347826 0.10000000 0.33333333 0.80000000
下一篇《描述统计学之R语言实战2:图形法》将介绍如何使用R语言对单变量数据、两个变量数据进行图形显示。
网友评论