R语言描述性统计函数总结

描述性统计
1, 使用summary()函数来获取描述性统计量
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  

2, 使用apply()函数或sapply()函数计算所选择的任意一个描述性统计量
sapply()函数的格式为
sapply(x,FUN, options)
参数x为数据框或矩阵,FUN为一个任意的函数。
options为函数FUN需要的参数,如果不需要参数也可以不写

典型的描述性统计函数有mean(), sd(), var(), min(), max(), median(), length(), range(), quantile()及可以返回图基五数总括(即最小值,下四分位数,中位数,上四分位数,最大值)的函数fivenum()
注意基础安装的函数没有提供偏度和峰度的计算函数

自定义描述性统计函数

> 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[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
> apply(mtcars[myvars],2,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

3, 通过Hmisc包中的describe()函数计算描述性统计量
Hmisc包中的describe()函数可返回变量和观测的数量,缺失值,唯一值的数目,Info(关于变量的连续性的统计量),Gmd(基尼均差),平均值,分位数以及五个最大的值和五个最小的值
例子

> library(Hmisc)
> Hmisc::describe(mtcars[myvars])
mtcars[myvars] 

 3  Variables      32  Observations
------------------------------------------------------------------------------------------
mpg 
       n  missing distinct     Info     Mean      Gmd      .05      .10      .25      .50 
      32        0       25    0.999    20.09    6.796    12.00    14.34    15.43    19.20 
     .75      .90      .95 
   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 distinct     Info     Mean      Gmd      .05      .10      .25      .50 
      32        0       22    0.997    146.7    77.04    63.65    66.00    96.50   123.00 
     .75      .90      .95 
  180.00   243.50   253.55 

lowest :  52  62  65  66  91, highest: 215 230 245 264 335
------------------------------------------------------------------------------------------
wt 
       n  missing distinct     Info     Mean      Gmd      .05      .10      .25      .50 
      32        0       29    0.999    3.217    1.089    1.736    1.956    2.581    3.325 
     .75      .90      .95 
   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
------------------------------------------------------------------------------------------
> 

4, pastecs包中有一个名为stat.desc()函数可以计算描述性统计量
其格式为
stat.desc(x,basic=TRUE,desc=TRUE,norm=FALSE,p=0.95)
参数x 是一个数据框或时间序列
参数basic=TRUE(默认值),则计算其中的所有值,空值,缺失值的数量以及最小值,最大值,值域,合计
参数desc=TRUE(默认值)则计算中位数,平均数,平均数的标准误差,平均数置信度为0.95的置信区间,方程,标准差,以及变异系数。
参数norm=FALSE,若norm=TRUE则返回正太分布统计量,包括偏度和峰度(以及它们的统计显著程度)和shapiro-wilk正态检验结果。
参数p值用来设置计算平均数的置信区间(默认的置信度为0.95)
例子

> stat.desc(mtcars[myvars])
                     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
> stat.desc(mtcars[myvars],norm = TRUE)
                     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
> 

5, 使用psych包中的describe()函数进行描述性统计
它可以计算非缺失值的数量,平均数,标准差中位数,截尾均值,绝对中位差,最小值,最大值,值域,偏度,峰度和平均值的标准误差
例子:

 library(psych)
> myvars <- c("mpg","hp","wt")
> describe(mtcars[myvars])
    vars  n   mean    sd median trimmed   mad   min    max  range skew kurtosis    se
mpg    1 32  20.09  6.03  19.20   19.70  5.41 10.40  33.90  23.50 0.61    -0.37  1.07
hp     2 32 146.69 68.56 123.00  141.19 77.10 52.00 335.00 283.00 0.73    -0.14 12.12
wt     3 32   3.22  0.98   3.33    3.15  0.77  1.51   5.42   3.91 0.42    -0.02  0.17
> 

6, 分组计算描述性统计量
(1),可以通过函数aggregate()函数来进行分组获取描述性统计量
但是aggregate()函数仅允许在每次调用中使用平均数,标准差这种单返回函数,它无法一次返回若干个统计量
注意对于函数aggregate()它的参数by=list(),可以对用来分组的列进行命名,如果不进行命名,则列自动命名为group.1,这样的名字,例如list(am=mtcars a m ) 使 使 l i s t ( m t c a r s am)的使用,如果使用的是list(mtcars am),则am列将被标注为group.1而不是am。
例子

aggregate(mtcars[myvars],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

(2),使用by()函数进行分组获取描述性统计量
by()函数的功能和aggregate()函数的功能相同,但是by()函数可以一次性的返回多个描述性统计量
其格式为
by(data,indices,fun)
参数data是一个数据框或矩阵,indices是一个因子或因子组成的列表,定义了分组,FUN是任一函数
例子

dstats <- function(x)sapply(x,mystats)
> myvars <- c("mpg","hp","wt")
> 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

(3),doBy包和psych包中也提供了分组计算的描述性统计量的函数
doBy保中的summaryBy()函数的使用格式为:
summaryBy(formula,data=dataframe,FUN=function)
其中formula的格式为
var1 + var2 + var3+…~groupvar1 + groupvar2 + …
左侧是需要分析的数值型变量,右侧是进行分组的类别型变量,function为任何内建或用户自定义的函数
summaryBy()函数和by函数的作用一样只是格式不一样
例子

 myvars <- c("mpg","hp","wt")
> summaryBy(mpg+hp+wt~am,data=mtcars,FUN=mystats)
  am mpg.n mpg.mean mpg.stdev   mpg.skew mpg.kurtosis hp.n  hp.mean hp.stdev     hp.skew
1  0    19 17.14737  3.833966 0.01395038   -0.8031783   19 160.2632 53.90820 -0.01422519
2  1    13 24.39231  6.166504 0.05256118   -1.4553520   13 126.8462 84.06232  1.35988586
  hp.kurtosis wt.n  wt.mean  wt.stdev   wt.skew wt.kurtosis
1  -1.2096973   19 3.768895 0.7774001 0.9759294   0.1415676
2   0.5634635   13 2.411000 0.6169816 0.2103128  -1.1737358

psych包中的describeBy()函数可以计算和describe()函数相同的描述性统计量,
其格式与aggregate()函数很相似只是没有指定FUN函数作用也类似。
例子

library(psych)
> describeBy(mtcars[myvars],list(am=mtcars$am))

 Descriptive statistics by group 
am: 0
    vars  n   mean    sd median trimmed   mad   min    max  range  skew kurtosis    se
mpg    1 19  17.15  3.83  17.30   17.12  3.11 10.40  24.40  14.00  0.01    -0.80  0.88
hp     2 19 160.26 53.91 175.00  161.06 77.10 62.00 245.00 183.00 -0.01    -1.21 12.37
wt     3 19   3.77  0.78   3.52    3.75  0.45  2.46   5.42   2.96  0.98     0.14  0.18
------------------------------------------------------------------- 
am: 1
    vars  n   mean    sd median trimmed   mad   min    max  range skew kurtosis    se
mpg    1 13  24.39  6.17  22.80   24.38  6.67 15.00  33.90  18.90 0.05    -1.46  1.71
hp     2 13 126.85 84.06 109.00  114.73 63.75 52.00 335.00 283.00 1.36     0.56 23.31
wt     3 13   2.41  0.62   2.32    2.39  0.68  1.51   3.57   2.06 0.21    -1.17  0.17

总结:R软件自带的描述性统计函数为summary()但是它不能计算数据的偏度和峰度
psych包中的descrebe()函数含有大部分统计性函数而且相对于summary()函数也包括其没有的数据的偏度和峰度
by()函数可以进行分组计算描述性统计
psych包中的describeBy()函数也可以分组计算描述性统计但是它不指定统计函数,其返回结果和describeBy()中包含的函数是一样的只是进行了分组计算

发布了39 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42712867/article/details/98070596
今日推荐