往期文章中,我们已经学会了使用图形探索数据,例如可以用条形图了解类别变量的分布,用堆砌条形图或分组条形图比较不同类别的组间差异。同时,我们也学会了使用直方图、密度图、箱线图以及点图了解连续型变量的分布,比较组间差异。
而图形探索数据之后,通常的做法是进行描述性统计分析。
本期的R语言实现过程较为简单,但重要的是理解各个统计量的意义,统计量数值的大小能说明什么问题?
大家看的愉快。
1
数据集
本期使用Motor Trend杂志的车辆路试(mtcars)数据集。我们关注的变量是每加仑汽油行驶的英里数(mpg)、马力(hp)、车重(wt)。
#创建一个自己想调取的变量集
myvars <- c('mpg','hp','wt')
#查看所需数据集
head(mtcars[myvars])
|
| mpg | hp | wt |
| --- | --- | --- | --- |
| Mazda RX4 | 21.0 | 110 | 2.620 |
| Mazda RX4 Wag | 21.0 | 110 | 2.875 |
| Datsun 710 | 22.8 | 93 | 2.320 |
| Hornet 4 Drive | 21.4 | 110 | 3.215 |
| Hornet Sportabout | 18.7 | 175 | 3.440 |
| Valiant | 18.1 | 105 | 3.460 |
2
入门
我们首先从基础安装包入手,利用summary( )函数获取统计量。
#创建一个自己想调取的变量集
myvars <- c('mpg','hp','wt')
#查看所需数据集
summary(mtcars[myvars])
mpg | hp | wt |
---|---|---|
Min. :10.40 | Min. : 52.0 | Min. :1.513 |
1st Qu.:15.43 | 1st Qu.: 96.5 | 1st Qu.:2.581 |
Median :19.20 | Median :123.0 | Median :3.325 |
Mean :20.09 | Mean :146.7 | Mean :3.217 |
3rd Qu.:22.80 | 3rd Qu.:180.0 | 3rd Qu.:3.610 |
Max. :33.90 | Max. :335.0 | Max. :5.424 |
summary( )函数提供了最小值、最大值、四分位数和数值型变量的均值,以及因子和逻辑型变量的频数统计。我们也可以使用apply( )函数或sapply( )函数计算选择的任意统计量。
他们的使用格式为:sapply( x, FUN, options)
其中 x 是你的数据框,FUN是任意函数。如果指定了options,他们将被传递给FUN。例如你可以在这里插入mean( ),sd( ),var( ),min( ),max( ),median( ),length( ),range( ),quantile( )。函数fivenum( )可以返回图基五总数(最小值、下四分位数,中位数、上四分位数、最大值)。
#创建一个计算函数FUN
#将行删除设为FALSE
mystats <- function(x,na.omit=F){
#如果存在缺失值
if(na.omit)
#找一个不缺失数据填补那个缺失值
x <- x(!is.na(x))
#计算均值
m <- mean(x)
#计算变量长度
n <- length(x)
#计算标准差
s <- sd(x)
#计算偏度
skew <- sum((x-m)^3/s^3)/n
#计算峰度
kurt <- sum((x-m)^4/s^4)/n - 3
#返回计算数据
return(c(n=n,mean=m,stdev=s,skew=skew,kurtosis=kurt))
}
#计算所选统计量
sapply(mtcars[myvars],mystats)
mpg | hp | wt | |
---|---|---|---|
n | 32.000000 | 32.0000000 | 32.00000000 |
mean | 20.090625 | 146.6875000 | 3.21725000 |
stdev | 6.026948 | 68.5628685 | 0.97845744 |
skew | 0.610655 | 0.7260237 | 0.42314646 |
kurtosis | -0.372766 | -0.1355511 | -0.02271075 |
对于mpg来说,其偏度(skew)为+0.6,分布呈现右偏;峰度(kurtosis)为-0.37,比正态分布稍平。
3
进阶
pastecs包中的stat.desc( )函数能返回种类繁多的描述性统计量。
使用格式为:
stat.desc(x,basic=T,desc=T,norm=F,p=0.95)
其中 x 代表数据框,basic默认值为TRUE,计算所有值、空值、缺失值的数量、最大值、最小值、值域、总和。desc默认值为TRUE,计算中位数、均值、均值的标准误差、均值置信度为95%的置信区间、方差、标准差、变异系数。若norm=TRUE,返回偏度和峰度(以及他们的统计显著程度)、Shapiro-Wilk正态检验结果。
install.packages('pastecs')
library('pastecs')
stat.desc(mtcars[myvars],norm = T)
mpg | hp | wt | |
---|---|---|---|
nbr.val | 32.0000000 | 32.00000000 | 32.00000000 |
nbr.null | 0.0000000 | 0.00000000 | 0.00000000 |
nbr.na | 0.0000000 | 0.00000000 | 0.00000000 |
min | 10.4000000 | 52.00000000 | 1.51300000 |
max | 33.9000000 | 335.00000000 | 5.42400000 |
range | 23.5000000 | 283.00000000 | 3.91100000 |
sum | 642.9000000 | 4694.00000000 | 102.95200000 |
median | 19.2000000 | 123.00000000 | 3.32500000 |
mean | 20.0906250 | 146.68750000 | 3.21725000 |
SE.mean | 1.0654240 | 12.12031731 | 0.17296847 |
CI.mean.0.95 | 2.1729465 | 24.71955013 | 0.35277153 |
var | 36.3241028 | 4700.86693548 | 0.95737897 |
std.dev | 6.0269481 | 68.56286849 | 0.97845744 |
coef.var | 0.2999881 | 0.46740771 | 0.30412851 |
skewness | 0.6106550 | 0.72602366 | 0.42314646 |
skew.2SE | 0.7366922 | 0.87587259 | 0.51048252 |
kurtosis | -0.3727660 | -0.13555112 | -0.02271075 |
kurt.2SE | -0.2302812 | -0.08373853 | -0.01402987 |
normtest.W | 0.9475647 | 0.93341934 | 0.94325772 |
normtest.p | 0.1228814 | 0.04880824 | 0.09265499 |
4
精通
对于有类别型变量的数据来说,我们往往需要分组计算统计量。
by( data ,* INDICES *, FUN)
其中data代表数据框,INDICES是一个因子,FUN是任意函数
#调用mystats中的所有函数
dstats <- function(x)sapply(x,mystats)
#传递dstats并进行分组
by(mtcars[myvars],mtcars$am,dstats)
mtcars$am: 0 | |||
---|---|---|---|
mpg | hp | wt | |
n | 19.00000000 | 19.00000000 | 19.0000000 |
mean | 17.14736842 | 160.26315789 | 3.7688947 |
stdev | 3.83396639 | 53.90819573 | 0.7774001 |
skew | 0.01395038 | -0.01422519 | 0.9759294 |
kurtosis | -0.80317826 | -1.20969733 | 0.1415676 |
mtcars$am: 1 | |||
---|---|---|---|
mpg | hp | wt | |
n | 13.00000000 | 13.0000000 | 13.0000000 |
mean | 24.39230769 | 126.8461538 | 2.4110000 |
stdev | 6.16650381 | 84.0623243 | 0.6169816 |
skew | 0.05256118 | 1.3598859 | 0.2103128 |
kurtosis | -1.45535200 | 0.5634635 | -1.1737358 |
今天的文章就到这里,最关键的还是数学方面的理解。
祝福冰姐又老了一岁,谢谢各位。
下期再见。
你可能还想看
等你很久啦,长按加入古同社区
image
网友评论