在对某一统计数据进行深入分析之前,首先要对数据的多项数据特征进行描述,这些统计特征包括这养几个方面
集中趋势
离散趋势
偏度
峰度
使用R对这四个方面的特征进行探索,所用的数据集为R自带数据iris数据集
1. 集中趋势的描述
集中趋势的描述包括,均数、中位数、百分位数
data("iris")
head(iris)
apply(iris[,1:4],2,mean)
apply(iris[,1:4],2, median)
展示结果
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
> apply(iris[,1:4],2,mean)
Sepal.Length Sepal.Width Petal.Length Petal.Width
5.843333 3.057333 3.758000 1.199333
> apply(iris[,1:4],2, median)
Sepal.Length Sepal.Width Petal.Length Petal.Width
5.80 3.00 4.35 1.30
2. 离散趋势
描述离散趋势的统计指标有,方差,标准差,中位数绝对偏差,变异系数,四分位数,极差
# 离散程度
# 主要方差、标准差、中位数绝对偏差、变异系数、四分位数、极差
var(iris$Sepal.Length) #方差
sd(iris$Sepal.Length) #标准差
mad(iris$Sepal.Length) #中位数绝对偏差
range(iris$Sepal.Length) # 极差
quantile(iris$Sepal.Length) #四分位数
apply(iris[,1:4],2,quantile)
apply(iris[,1:4],2,sd) / apply(iris[1:4],2,mean) #变异系数
结果展示如下
> var(iris$Sepal.Length)
[1] 0.6856935
> sd(iris$Sepal.Length)
[1] 0.8280661
> mad(iris$Sepal.Length)
[1] 1.03782
> range(iris$Sepal.Length)
[1] 4.3 7.9
> quantile(iris$Sepal.Length)
0% 25% 50% 75% 100%
4.3 5.1 5.8 6.4 7.9
> apply(iris[,1:4],2,quantile)
Sepal.Length Sepal.Width Petal.Length Petal.Width
0% 4.3 2.0 1.00 0.1
25% 5.1 2.8 1.60 0.3
50% 5.8 3.0 4.35 1.3
75% 6.4 3.3 5.10 1.8
100% 7.9 4.4 6.90 2.5
> apply(iris[,1:4],2,sd) / apply(iris[1:4],2,mean)
Sepal.Length Sepal.Width Petal.Length Petal.Width
0.1417113 0.1425642 0.4697441 0.6355511
3. 偏度
偏度也称为偏态系数,用于衡量分布不对称程度或偏斜指标.
正态分布是一种无偏分布,其偏度等于0。相对于正态分布,右偏分布也称正偏分布,其偏度大于0;左偏分布,其偏度小于0 。
library(moments)
apply(iris[,1:4],2,skewness)
结果展示如下
> apply(iris[,1:4],2,skewness)
Sepal.Length Sepal.Width Petal.Length Petal.Width
0.3117531 0.3157671 -0.2721277 -0.1019342
当然是否正态分布,还需要进行假设检验,见之前所写的统计方法选择
4. 峰度
峰度又称为峰度系数,用于衡量数据尾部分散度的指标,直观来看,峰度反应了峰部的尖度。当数据为正态分布,峰度近似等于3。与正态分布相比较,峰度大于3,数据有较多远离平均值的极端数据,即数据有平峰厚尾性。反之,峰度小于3,数据分布具有尖峰细尾性。
library(moments)
apply(iris[,1:4], 2, FUN = kurtosis)
结果如下
> apply(iris[,1:4], 2, FUN = kurtosis)
Sepal.Length Sepal.Width Petal.Length Petal.Width
2.426432 3.180976 1.604464 1.663933
结果解释同上
5. 可视化偏度和峰度
同样使用上面的数据
library(ggplot2)
library(tidyr)
irislong <- gather(iris[,1:4], key = 'varname', value = 'value')
# 可视化数据分布
ggplot(irislong,aes(colours = varname, fill = varname, linetype = varname, alpha = 0.5)) +
theme_bw()+
geom_density(aes(value),bw = 0.5, alpha = 0.4)
从图中可以看出和计算结果呼应
6. 综合分析
其实针对上面提及到的四个方面的内容,已经有package将这些都做好
使用summary对数据进行分析
> summary(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 setosa :50
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 versicolor:50
Median :5.800 Median :3.000 Median :4.350 Median :1.300 virginica :50
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
可以看出,summary把每一列的数据的四分位数和平均数,中位数都进行了计算
使用Hmisc package进行分析
> describe(iris$Sepal.Length)
iris$Sepal.Length
n missing distinct Info Mean Gmd .05 .10 .25 .50
150 0 35 0.998 5.843 0.9462 4.600 4.800 5.100 5.800
.75 .90 .95
6.400 6.900 7.255
lowest : 4.3 4.4 4.5 4.6 4.7, highest: 7.3 7.4 7.6 7.7 7.9
可以看出,包括了观测数量,缺失值,基本描述参数,最大/最小的5个数据。当然也可以对几组数据同时使用
> describe(iris[,1:4])
iris[, 1:4]
4 Variables 150 Observations
------------------------------------------------------------------------------------------------
Sepal.Length
n missing distinct Info Mean Gmd .05 .10 .25 .50
150 0 35 0.998 5.843 0.9462 4.600 4.800 5.100 5.800
.75 .90 .95
6.400 6.900 7.255
lowest : 4.3 4.4 4.5 4.6 4.7, highest: 7.3 7.4 7.6 7.7 7.9
------------------------------------------------------------------------------------------------
Sepal.Width
n missing distinct Info Mean Gmd .05 .10 .25 .50
150 0 23 0.992 3.057 0.4872 2.345 2.500 2.800 3.000
.75 .90 .95
3.300 3.610 3.800
lowest : 2.0 2.2 2.3 2.4 2.5, highest: 3.9 4.0 4.1 4.2 4.4
------------------------------------------------------------------------------------------------
Petal.Length
n missing distinct Info Mean Gmd .05 .10 .25 .50
150 0 43 0.998 3.758 1.979 1.30 1.40 1.60 4.35
.75 .90 .95
5.10 5.80 6.10
lowest : 1.0 1.1 1.2 1.3 1.4, highest: 6.3 6.4 6.6 6.7 6.9
------------------------------------------------------------------------------------------------
Petal.Width
n missing distinct Info Mean Gmd .05 .10 .25 .50
150 0 22 0.99 1.199 0.8676 0.2 0.2 0.3 1.3
.75 .90 .95
1.8 2.2 2.3
lowest : 0.1 0.2 0.3 0.4 0.5, highest: 2.1 2.2 2.3 2.4 2.5
------------------------------------------------------------------------------------------------
psych package进行分析
这个包和上面的类似,同样使用的是describe这个函数。
> psych::describe(iris[,1:4])
vars n mean sd median trimmed mad min max range skew kurtosis se
Sepal.Length 1 150 5.84 0.83 5.80 5.81 1.04 4.3 7.9 3.6 0.31 -0.61 0.07
Sepal.Width 2 150 3.06 0.44 3.00 3.04 0.44 2.0 4.4 2.4 0.31 0.14 0.04
Petal.Length 3 150 3.76 1.77 4.35 3.76 1.85 1.0 6.9 5.9 -0.27 -1.42 0.14
Petal.Width 4 150 1.20 0.76 1.30 1.18 1.04 0.1 2.5 2.4 -0.10 -1.36 0.06
使用pastecs的stat.desc函数进行分析
这个包和上面的类似,使用的是stat.desc这个函数,但是这个包可以对峰度、偏度、正态分布进行检验。
> pastecs::stat.desc(iris[,1:4],basic = T,desc = T,norm = T,p = T)
Sepal.Length Sepal.Width Petal.Length Petal.Width
nbr.val 150.00000000 150.00000000 1.500000e+02 1.500000e+02
nbr.null 0.00000000 0.00000000 0.000000e+00 0.000000e+00
nbr.na 0.00000000 0.00000000 0.000000e+00 0.000000e+00
min 4.30000000 2.00000000 1.000000e+00 1.000000e-01
max 7.90000000 4.40000000 6.900000e+00 2.500000e+00
range 3.60000000 2.40000000 5.900000e+00 2.400000e+00
sum 876.50000000 458.60000000 5.637000e+02 1.799000e+02
median 5.80000000 3.00000000 4.350000e+00 1.300000e+00
mean 5.84333333 3.05733333 3.758000e+00 1.199333e+00
SE.mean 0.06761132 0.03558833 1.441360e-01 6.223645e-02
CI.mean.TRUE Inf Inf Inf Inf
var 0.68569351 0.18997942 3.116278e+00 5.810063e-01
std.dev 0.82806613 0.43586628 1.765298e+00 7.622377e-01
coef.var 0.14171126 0.14256420 4.697441e-01 6.355511e-01
skewness 0.30864073 0.31261470 -2.694109e-01 -1.009166e-01
skew.2SE 0.77924478 0.78927812 -6.801988e-01 -2.547904e-01
kurtosis -0.60581253 0.13870468 -1.416857e+00 -1.358179e+00
kurt.2SE -0.76961200 0.17620762 -1.799947e+00 -1.725403e+00
normtest.W 0.97609027 0.98491787 8.762681e-01 9.018349e-01
normtest.p 0.01018116 0.10115427 7.412263e-10 1.680465e-08
包括了可信区间这些数据,相当全面了。