前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R in action读书笔记(5)-第七章:基本统计分析

R in action读书笔记(5)-第七章:基本统计分析

作者头像
统计学家
发布2019-04-10 17:18:49
5310
发布2019-04-10 17:18:49
举报
文章被收录于专栏:机器学习与统计学

7.1描述性统计分析

>vars<-c("mpg","hp","wt")

>head(mtcars[vars])

mpg hp wt

MazdaRX4 21.0 110 2.620

MazdaRX4 Wag 21.0 110 2.875

Datsun710 22.8 93 2.320

Hornet4 Drive 21.4 110 3.215

HornetSportabout 18.7 175 3.440

Valiant 18.1 105 3.460

7.1.1方法云集

对于基础安装,你可以使用summary()函数来获取描述性统计量。

>summary(mtcars[vars])

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()函数,其使用格式为:

sapply(x,FUN,options)

其中的x是你的数据框(或矩阵),FUN为一个任意的函数。如果指定了options,它们将被传递

给FUN。你可以在这里插入的典型函数有mean、sd、var、min、max、median、length、range

和quantile。函数fivenum()可返回图基五数总括(Tukey’s five-number summary,即最小值、

下四分位数、中位数、上四分位数和最大值)。

通过sapply()计算描述性统计量

>mystats<-function(x,na.omit=FALSE){

+ 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[vars],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

Hmisc包中的describe()函数可返回变量和观测的数量、缺失值和唯一值的数目、平均值、

分位数,以及五个最大的值和五个最小的值

通过Hmisc包中的describe()函数计算描述性统计量:

>describe(mtcars[vars])

mtcars[vars]

3 Variables 32 Observations

---------------------------------------------------------------

mpg

n missing unique Info Mean .05 .10

32 0 25 1 20.09 12.00 14.34

.25 .50 .75 .90 .95

15.43 19.20 22.80 30.09 31.30

lowest: 10.4 13.3 14.3 14.7 15.0

highest:26.0 27.3 30.4 32.4 33.9

---------------------------------------------------------------

hp

n missing unique Info Mean .05 .10

32 0 22 1 146.7 63.65 66.00

.25 .50 .75 .90 .95

96.50 123.00 180.00 243.50 253.55

lowest: 52 62 65 66 91,highest: 215 230 245 264 335

---------------------------------------------------------------

wt

n missing unique Info Mean .05 .10

32 0 29 1 3.217 1.736 1.956

.25 .50 .75 .90 .95

2.581 3.325 3.610 4.048 5.293

lowest: 1.513 1.615 1.835 1.935 2.140

highest:3.845 4.070 5.250 5.345 5.424

pastecs包中有一个名为stat.desc()的函数,它可以计算种类繁多的描述性统计量。使用

格式为:stat.desc(x,basic=TRUE,desc=TRUE,norm=FALSE,p=0.95)

其中的x是一个数据框或时间序列。若basic=TRUE(默认值),则计算其中所有值、空值、缺失

值的数量,以及最小值、最大值、值域,还有总和。若desc=TRUE(同样也是默认值),则计算

中位数、平均数、平均数的标准误、平均数置信度为95%的置信区间、方差、标准差以及变异系

数。最后,若norm=TRUE(不是默认的),则返回正态分布统计量,包括偏度和峰度(以及它们

的统计显著程度)和Shapiro–Wilk正态检验结果。这里使用了p值来计算平均数的置信区间(默

认置信度为0.95)。

通过pastecs包中的stat.desc()函数计算描述性统计量

>stat.desc(mtcars[vars])

mpg hp wt

nbr.val 32.0000000 32.0000000 32.0000000

nbr.null 0.0000000 0.0000000 0.0000000

nbr.na 0.0000000 0.0000000 0.0000000

min 10.4000000 52.0000000 1.5130000

max 33.9000000 335.0000000 5.4240000

range 23.5000000 283.0000000 3.9110000

sum 642.9000000 4694.0000000 102.9520000

median 19.2000000 123.0000000 3.3250000

mean 20.0906250 146.6875000 3.2172500

SE.mean 1.0654240 12.1203173 0.1729685

CI.mean.0.95 2.1729465 24.7195501 0.3527715

var 36.3241028 4700.8669355 0.9573790

std.dev 6.0269481 68.5628685 0.9784574

coef.var 0.2999881 0.4674077 0.3041285

psych包也拥有一个名为describe()的函数,它可以计算非缺失值的数量、

平均数、标准差、中位数、截尾均值、绝对中位差、最小值、最大值、值域、偏度、峰度和平均

值的标准误。通过psych包中的describe()计算描述性统计量:

> describe(mtcars[vars])

vars n mean sd median trimmed mad min max

mpg 1 32 20.09 6.03 19.20 19.70 5.41 10.40 33.90

hp 2 32 146.69 68.56 123.00 141.19 77.10 52.00 335.00

wt 3 32 3.22 0.98 3.33 3.15 0.77 1.51 5.42

range skew kurtosis se

mpg 23.50 0.61 -0.37 1.07

hp 283.00 0.73 -0.14 12.12

wt 3.91 0.42 -0.02 0.17

7.1.2分组计算描述性统计量

在比较多组个体或观测时,关注的焦点经常是各组的描述性统计信息,而不是样本整体的描述性统计信息。使用aggregate()分组获取描述性统计量

>aggregate(mtcars[vars],by=list(am=mtcars$am),mean)

am mpg hp wt

1 0 17.14737 160.2632 3.768895

2 1 24.39231 126.8462 2.411000

>aggregate(mtcars[vars],by=list(am=mtcars$am),sd)

am mpg hp wt

1 0 3.833966 53.90820 0.7774001

2 1 6.166504 84.06232 0.6169816

注意list(am=mtcars$am)的使用。如果使用的是list(mtcars$am),则am列将被标注为Group.1而不是am。你使用这个赋值指定了一个更有帮助的列标签。如果有多个分组变量,可以使用by=list(name1=groupvar1, name2=groupvar2, ... , groupvarN)这样的语句。

遗憾的是,aggregate()仅允许在每次调用中使用平均数、标准差这样的单返回值函数。

它无法一次返回若干个统计量。要完成这项任务,可以使用by()函数。格式为:by(data,INDICES,FUN)

其中data是一个数据框或矩阵,INDICES是一个因子或因子组成的列表,定义了分组,FUN是任

意函数。使用by()分组计算描述性统计量:

doBy包和psych包也提供了分组计算描述性统计量的函数,doBy包中summaryBy()函数的使用格式为:

summaryBy(formula,data=dataframe,FUN=function)其中的formula接受以下的格式:

var1+var2+…+varN~grounpvar1+goupvar2+…+groupvarN

在~左侧的变量是需要分析的数值型变量,而右侧的变量是类别型的分组变量。function

可为任何内建或用户自编的R函数。

使用doBy包中的summaryBy()分组计算概述统计量

>library("doBy", lib.loc="d:/ProgramFiles/R/R-3.1.3/library")

>summaryBy(mpg+hp+wt~am,data=mtcars,FUN=mystats)

am mpg.n mpg.mean mpg.stdev mpg.skew mpg.kurtosis hp.n

1 0 1917.14737 3.833966 0.01395038 -0.8031783 19

2 1 1324.39231 6.166504 0.05256118 -1.4553520 13

hp.mean hp.stdev hp.skew hp.kurtosis wt.n wt.mean

1160.2632 53.90820 -0.01422519 -1.2096973 19 3.768895

2126.8462 84.06232 1.35988586 0.5634635 13 2.411000

wt.stdev wt.skew wt.kurtosis

10.7774001 0.9759294 0.1415676

20.6169816 0.2103128 -1.1737358

psych包中的describe.by()函数可计算和describe相同的描述性统计量,只是按照一个

或多个分组变量分层,使用psych包中的describe.by()分组计算概述统计量.

>describe.by(mtcars[vars],mtcars$am)

group:0

vars n mean sd median trimmed mad min max

mpg 1 19 17.15 3.83 17.30 17.12 3.11 10.40 24.40

hp 2 19 160.26 53.91 175.00 161.06 77.10 62.00 245.00

wt 3 19 3.77 0.78 3.52 3.75 0.45 2.46 5.42

range skew kurtosis se

mpg 14.00 0.01 -0.80 0.88

hp 183.00 -0.01 -1.21 12.37

wt 2.96 0.98 0.14 0.18

-----------------------------------------------

group:1

vars n mean sd median trimmed mad min max

mpg 1 13 24.39 6.17 22.80 24.38 6.67 15.00 33.90

hp 2 13 126.85 84.06 109.00 114.73 63.75 52.00 335.00

wt 3 13 2.41 0.62 2.32 2.39 0.68 1.51 3.57

range skew kurtosis se

mpg 18.90 0.05 -1.46 1.71

hp 283.00 1.36 0.56 23.31

wt 2.06 0.21 -1.17 0.17

describe.by()函数不允许指定任意函数,所以它的普适性较低。若存在一个以上的分组变量,你可以使用list(groupvar1, groupvar2, ... , groupvarN)来表示它们。但这仅在分组变量交叉后不出现空白单元时有效。

>library("reshape", lib.loc="d:/ProgramFiles/R/R-3.1.3/library")

>dstats<-function(x)(c(n=length(x),mean=mean(x),sd=sd(x)))

>dfm<-melt(mtcars,measure.vars=c("mpg","hp","wt"),id.vars=c("am","cyl"))

>cast(dfm,am+cyl+variable~.,dstats)

am cyl variable n mean sd

1 0 4 mpg 3 22.900000 1.4525839

2 0 4 hp 3 84.666667 19.6553640

3 0 4 wt 3 2.935000 0.4075230

4 0 6 mpg 4 19.125000 1.6317169

5 0 6 hp 4 115.250000 9.1787799

6 0 6 wt 4 3.388750 0.1162164

7 0 8 mpg 12 15.050000 2.7743959

8 0 8 hp 12 194.16666733.3598379

9 0 8 wt 12 4.104083 0.7683069

10 1 4 mpg 8 28.075000 4.4838599

11 1 4 hp 8 81.875000 22.6554156

12 1 4 wt 8 2.042250 0.4093485

13 1 6 mpg 3 20.566667 0.7505553

14 1 6 hp 3 131.666667 37.5277675

15 1 6 wt 3 2.755000 0.1281601

16 1 8 mpg 2 15.400000 0.5656854

17 1 8 hp 2 299.500000 50.2045815

18 1 8 wt 2 3.370000 0.2828427

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习与统计学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档