参考资料:R语言实战【第2版】
1、整体统计
对于R语言基础安装,可以使用summary()函数来获取描述性统计量。summary()函数提供了最小值、最大值、四分位数、中位数和算术平均数,以及因子向量和逻辑向量的频数统计。
myvars<-c("mpg","hp","wt")
summary(mtcars[myvars])
但基础安装没有提供偏度和峰度的计算函数。需要我们自定义函数来进行运算。
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))
}
myvars<-c("mpg","hp","wt")
sapply(mtcars[myvars],mystats)
Hmisc、pastecs和psych包中也都有计算描述性统计量的函数。首次使用前需要先行安装。
Hmisc包中的describe()函数可返回变量和观测的数值、缺失值和唯一值的数目、平均值、分位数,以及5个最大的值和5个最小的值。
library(Hmisc)
myvars<-c("mpg","hp","wt")
describe(mtcars[myvars])
pastecs包中的stat.desc()函数,可以计算种类繁多的描述性统计量。使用格式为:
stat.desc(x,basic=TRUE,desc=TRUE,norm=FALSE,p=0.95)
其中x是一个数据框或时间序列。
若basic=TRUE,则计算其中所有值、空值、缺失值的数量,以及最小值、最大值、值域,还有总和。
若desc=TRUE,则计算中位数、平均数、平均数标准误、平均数置信度为参数p的置信区间、方差、标准差以及变异系数。
若norm=TRUE,则返回正态分布统计量,包括偏度和峰度(以及他们的统计显著程度)和Shaprio-Wilk正态检验结果。
library(pastecs)
myvars<-c("mpg","hp","wt")
stat.desc(mtcars[myvars])
psych包也有一个名为describe()的函数,它可以计算非缺失值的数量、平均数、标准差、中位数、截尾平均数、绝对中位数、最小值、最大值、值域、偏度、峰度和平均值的标准误。
library(psych)
myvars<-c("mpg","hp","wt")
describe(mtcars[myvars])
2、分组统计
在比较多组个体或观测时,关注的焦点经常是各组的描述性统计信息,而不是样本整体的描述性统计信息。我们可以使用aggregate()函数来分组获取描述性统计量。
myvars<-c("mpg","hp","wt")
aggregate(mtcars[myvars],by=list(am=mtcars$am),mean)
aggregate(mtcars[myvars],by=list(am=mtcars$am),sd)
注意list(am=mtcars$am)的使用。如果使用的是list(mtcars$am),则am列将被标注为Group.1而不是am,不利于我们对分组数据的理解。
aggregate()函数仅允许在每次调用中使用平均数、标准差这样的单返回值函数。要解决这个问题,我们可以使用by()函数,格式为:
by(data,INDICES,FUN)
by(mtcars[myvars],mtcars$am,describe)
doBy包中summaryBy()函数的使用格式为:
summary(formula,data=dataframe,FUN=function)
其中formula接受以下格式:
var1+var2+var3+...+varN~groupvar1+groupvar2+...+groupvarN
在~左侧的变量为需要统计分析的数值型变量,而~右侧的变量是类别型的分组变量。function可以是内建函数也可以是自编函数。
install.packages("doBy")
library(doBy)
summaryBy(mpg+hp+wt~am,data=mtcars,FUN=mystats)
psych包中的describeBy()函数可以计算和describe()相同的统计量,只是按照一个或多个分组变量分层。但是,describeBy()函数不允许指定任意函数,所以它的普适性较低。若存在一个以上的分组变量,我们可以使用list(name1=groupvar1,name2=groupvar2,...,nameN=groupvarN)来表示它们,但这仅在分组变量交叉后不出现空白单元时有效。
library(psych)
describe(mtcars[myvars])
describeBy(mtcars[myvars],list(am=mtcars$am))
标签:myvars,语言,mtcars,am,统计分析,描述性,统计,函数
From: https://blog.csdn.net/maizeman126/article/details/140880763