R小姐:描述性统计分析


往期文章中,我们已经学会了使用图形探索数据,例如可以用条形图了解类别变量的分布,用堆砌条形图或分组条形图比较不同类别的组间差异。同时,我们也学会了使用直方图、密度图、箱线图以及点图了解连续型变量的分布,比较组间差异。

而图形探索数据之后,通常的做法是进行描述性统计分析。

本期的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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容

  • 前面简要介绍了R语言的基本数据结构和基础图形,本节将简单介绍如何得到数据的描述性统计分析,以及进一步了解列联表(也...
    井底蛙蛙呱呱呱阅读 2,174评论 0 1
  • sapply( )函数 r语言中summary()函数提供了最小值、最大值、四分位数和数值型变量的均值,以及因子向...
    肖玉贤阅读 4,478评论 0 0
  • 计算机二级C语言上机题库(南开版) 1.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平...
    MrSunbeam阅读 6,366评论 1 42
  • 在别人的口中你银装素裹 我的青丝待不来春光却倏然白头 在飘摇的冷风中 孤舟缓慢而又急促 我不该是垂钓江雪的老翁 南...
    言壳阅读 347评论 0 1
  • 有没有一片叶子 带着你的讯息 飘落至我脚下 我却并不知悉 有没有一粒沙子 可以看见你的世界 吹进我的眼中 却刺痛我...
    时光带不走的珊珊2018阅读 314评论 4 9