描述统计量
2018-09-03
2018-09-03
数据描述性分析-描述统计量
对于任何一个数据,在进行正式的统计推断以前,都有必要作一些简单的描述性分析。描述性分析可以帮助我们获得对数据的整体概念,也可以帮助我们很早地发现异常观测,以及重要的趋势。所谓描述性分析就是对一组数据的各种特征进行分析,以便于描述样本的各种特征及其所代表的总体的特征。
什么叫做统计量?从定性的角度来讲,凡是能由样本计算出来的量就叫作统计量,可以看出,一个统计量仅与样本本身有关,而与样本分布或参数没有关系。而描述统计量就是用于描述性分析的统计量。我们从三个方面来介绍常用的描述统计量。
1 位置度量
1.1 样本均值
样本均值是指样本的平均数,数学表达式为\[\bar{x}=\frac{1}{n}\sum\limits_{i=1}^nx_i\]它描述数据的平均水平。
在R中,用mean()
函数计算样本均值,调用方法是
mean(x,trim=0,na.rm=F,...)
trim是计算均值前去掉x两端观察值的比例,当trim=0时,计算的是算数平均值,当trim不为零时,计算对称截断算数平均值,计算之前先从两边去掉trim倍数量的观测值(原因是为了使该统计量更能描述总体的特征,类似于比赛中去掉一个最高分,去掉一个最低分后再算均值的做法),na.rm是不允许有缺失值,若na.rm为T,则表示算的是去除缺失值之后的均值。
x<-c(5,10,3,20)
mean(x) # x为计算对象
## [1] 9.5
x若为矩阵或数组,那mean()
返回的就是全部数据的均值:
x<-1:15;#生成一个1到15的序列,步长默认为1
dim(x)<-c(3,5);#把x转化为一个3行5列的数组
mean(x) # x为计算对象
## [1] 8
求矩阵各行各列的均值,需要用到apply()
函数,例如:
x<-1:15;
dim(x)<-c(3,5);
x#显示x
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 4 7 10 13
## [2,] 2 5 8 11 14
## [3,] 3 6 9 12 15
apply(x,1,mean)#对行求均值,若要对列求均值,只需把第二个参数的值换为2即可
## [1] 7 8 9
1.2 顺序统计量
顺序统计量又叫做次序统计量。在下述定义中,大写\(X\)表示随机变量,小写\(x\)表示随机变量的取值。设\(X_1,...X_n\)是来自总体\(X\)的样本,\(x_1,...x_n\)为样本观测值,将\(x_1,...x_n\)按照从小到大的顺序排列为\(x_{(1)}\leq x_{(2)} \leq...\leq x_{(n)}\),当样本\(X_1,...X_n\)取值为\(x_1,...x_n\)时,定义\(X_{(K)}\)(第\(k\)个顺序统计量)取值为\(x_{(k)}\)\((k=1,2,...n)\),称\(X_{(1)},...X_{(n)}\)为\(X_1,...X_n\)的顺序统计量。
举一个简单而直观的例子:
样本 | \(X_1\) | \(X_2\) | \(X_3\) | \(X_4\) | \(X_5\) |
---|---|---|---|---|---|
样本观测值 | 1 | 5 | 2 | 4 | 8 |
在表格中,样本观测值是1,5,2,4,8,给样本观测值排序,可得\(1\leq 2\leq 4 \leq 5 \leq 8\),那么,第一个顺序统计量(也叫最小顺序统计量)\(X_{(1)}=X_1\),第二个顺序统计量\(X_{(2)}=X_3\),第三个顺序统计量\(X_{(3)}=X_4\),第四个顺序统计量\(X_{(4)}=X_2\),第五个顺序统计量(也叫最大顺序统计量)\(X_{(5)}=X_5\)。
在R中,用sort()
函数可以给出观测数据的顺序统计量的值,order()
函数可以返回排序下标,通过下标我们可以清楚的得知顺序统计量,例如
x<-c(5,10,3,20,4,6,9)
sort.int(x) # x为计算对象
## [1] 3 4 5 6 9 10 20
order(x)
## [1] 3 5 1 6 7 2 4
顺序统计量具有非常良好的性质,它是充分统计量,简单地说就是,它包含了样本中关于感兴趣问题的所有信息,充分统计量在参数估计中非常有用,从充分统计量出发,可以找到参数的一致最小方差无偏估计,简单地说就是在参数的所有无偏估计类中找到方差最小的那一个。除此之外,顺序统计量有一些性质不依赖于母体的分布并且计算量小使用方便,因此在质量管理、可靠性分析等方面也得到广泛应用。
1.3 样本中位数
从顺序统计量出发,我们可以构造出样本中位数,样本中位数表示一组数据按大小顺序排列时,中间位置的那个数值,通俗地讲,样本的所有观测值中,有一半数比中位数大,有一半数比中位数小。中位数的计算会面临以下两种情况:即\[当n为奇数时,m_e=x_{\frac{n+1}{2}}\]\[当n为偶数时,m_e=\frac{1}{2}(x_{\frac{n}{2}}+x_{\frac{n}{2}+1})\] 既然中位数和均值都可以描述数据集中趋势,那它们的区别在哪里呢?均值是对所有数据平均后计算的一般水平代表值,数据信息提取地最充分,但是均值受极端值得影响很大,个别的极端值会直接影响均值的变化,而中位数不受异常值影响,具有稳健性。
在R中,用median()
函数可以给出观测量的中位数,例如
x<-c(5,10,3,20)
median(x) # x为计算对象
## [1] 7.5
1.4 百分位数
数据按由小到大的顺利排列,它的\(p(0<p<1)\)分位点定义为\[当np不是整数时,m_p=x_{[np]+1}\]\[当np是整数时,m_p=\frac{1}{2}(x_{np}+x_{np+1})\]其中,\([np]\)表示\(np\)的整数部分。 百分位数描述的是小于某个样本值的集合占整个样本集合的百分比,数据升序排列100p%数据不超过p分位数。75%分位数称为上四分位数,25%分位数称为下四分位数。
举一个简单而直观的例子,你考试考了80分,全班有70%同学的成绩都小于80分,那么对于整个班级的考试成绩所构成的一个样本集合来说,第七十个百分位数就等于80。百分位数的意义在于,我们可以了解到某一个样本在整个样本集合中所处的位置或者某个样本组的值大概是怎么分布的。
在R中,用quantile()
函数可以给出观测量的百分位数,调用格式为
quantile(x,probs=seq(0,1,0.25))
probs参数表示输出的百分位数序列,默认输出是0,下四分位数,中位数,上四分位数,1,如要修改输出序列,只需将0.25改为其他0到1之间的数即可,它表示步长。例如
x<-c(5,10,3,20)
quantile(x)#默认状态
## 0% 25% 50% 75% 100%
## 3.0 4.5 7.5 12.5 20.0
quantile(x,probs=seq(0,1,0.1)) # 取步长为0.1,则输出0到1之间的10个百分位数
## 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
## 3.0 3.6 4.2 4.8 6.0 7.5 9.0 11.0 14.0 17.0 20.0
2 分散程度度量
2.1 样本方差
方差是用来描述随机变量取值相对于均值离散程度的度量,样本方差记为\(S_n^2\),即\[S_n^2=\frac{1}{n-1}\sum\limits_{i=1}^n(X_i-\bar{X})^2\]其中\(\bar{X}\)是样本均值。 我们注意到,样本方差定义中,分母为\(n-1\),此时我们称之为\(S_n^2\)的自由度,自由度就是指可自由变化量的个数。在样本方差中,我们有\(n\)个样本\(X_1,...X_n\),它们都可以自由变化,但由于其中一个已用于估计总体均值,故还有\(n-1\)个可自由变化。
在R中,用var()
函数可以给出观测量的方差
x<-c(5,10,3,20)
var(x)
## [1] 57.66667
2.2 样本标准差
样本方差开方为样本标准差,记为\(S_n\),即\[S_n=\sqrt{S_n^2}=\sqrt{\frac{1}{n-1}\sum\limits_{i=1}^n(X_i-\bar{X})^2}\] 那么问题来了,方差可以衡量数据离散程度,标准差也可以用来衡量离散程度,既然先有了方差,为什么还要再用标准差。我们可以想想,一直以来,我们想要衡量的是随机变量取值相对于均值的离散程度,单位一样才能衡量数据,由此看来,在这里,方差只不过是中间计算过程,最终衡量相对均值离散程度的是标准差。
在R中,用sd()
函数可以给出观测量的标准差
x<-c(5,10,3,20)
sd(x)
## [1] 7.593857
2.3 变异系数
我们说标准差是衡量随机变量取值相对于均值的离散程度,但并不是有了标准差之后就万事大吉了,当我们比较两组数离散程度大小时,如果这两组数据测量尺度相差太大,或者数据量纲不同,直接使用标准差来进行比较不合适,为了消除测量尺度和量纲的影响,我们采用变异系数来描述。记为\(CV\),即\[CV=\frac{S_n}{\bar{X}}\times100\%\] 可以看到,变异系数是无量纲的,因此可以衡量两组数据离散程度大小,变异系数越大,说明离散程度越大。
在R中,可以编写简单的代码来计算变异系数,例如
x<-c(5,10,3,20)
cv=sd(x)/mean(x)#计算变异系数
cv#显示cv的值
## [1] 0.7993534
2.4 样本极差与半极差
极差是度量样本分散性的重要数字特征,它反映的是一组数据的变化范围。极差越大,表示数据越分散。样本极差记为\(R\),即\[R=max(x)-min(x)\] 半极差也是度量样本分散性的重要数字特征,特别对于具有异常值的数据,它作为分散性度量指标,具有稳健性,因此在稳健性数据分析中具有重要作用。半极差记为\(R_1\),\[R_1=Q_3-Q_1\].其中,\(Q_3\)表示上四分位数(75%分位数),\(Q_1\)表示下四分位数(25%分位数)
在R中,可以编写简单的代码来计算极差和半极差,例如
x<-c(1,3,2,6,4,9,7)
R=max(x)-min(x)#极大值减去极小值
R#显示R
## [1] 8
Q=quantile(x)#计算默认情况下的百分位数
Q
## 0% 25% 50% 75% 100%
## 1.0 2.5 4.0 6.5 9.0
R_1=Q[4]-Q[2]#75%百分位数减去25%百分位数
R_1
## 75%
## 4
2.5 样本标准误
样本标准误记为\(s_m\),即\[s_m=\sqrt{\frac{1}{n(n-1)}\sum\limits_{i=1}^n(X_i-\bar{X})^2}=\frac{S_n}{\sqrt{n}}\] 我们看样本标准误和样本标准差简直长得一模一样,但其实两者完全不同。总的来说,标准差表示数据的离散程度,或者说数据的波动大小;而标准误则表示抽样误差的大小,标准误越大,表示抽样误差越大。从公式中可以看出,标准误是在标准差的基础上消去了数据量带来的影响,对一些数据量相差大的数据集来说,标准误比标准差更有意义。
举一个简单而直观的例子,一个学校有1000名学生,那么这1000名学生可以作为这个学校学生的总体。我为了了解所有学生的身高选择随机抽样,抽了50人。这50人就是一个样本,但是只抽一次太随机了,于是我就抽样10次,每次都是50人,那我现在就有10个均值和10个标准差,以这10个均值作为原始数据,仍然能计算出一个均值和一个标准差,这就是理论上标准误的含义,他代表的是我抽的样本能不能很好地去近似总体。
在R中,可以编写简单的代码来计算标准误,例如
x<-c(5,10,3,20)
l=length(x)#计算样本量大小
s_m=sd(x)/sqrt(l)#根据公式求出标准误
s_m
## [1] 3.796929
3 分布形状的度量
偏度系数和峰度系数是对数据集分布形状的度量。
3.1 样本偏度系数
样本的偏度系数在此记为\[k_1=\frac{n}{(n-1)(n-2)S_n^3}\sum\limits_{i=1}^n(X_i-\bar{X})^3\]
偏度系数衡量了数据集的对称程度,偏度系数越接近0,说明数据集越对称,越远离0表示数据集越不对称。当偏度系数为正时,说明数据在右侧更加分散,当偏度系数为负时,说明数据在左侧更加分散。
在R中,可以调用skewness()
函数来计算偏度系数,skewness()
在PerformanceAnalytics
包中,由于该程序包由好几个包支撑,因此加载该包之前要先下载xts
包,zoo
包和quadprog
包。这几个包都是比较新的包,需要前往官网 https://cran.r-project.org/ 下载。
# install.packages("xts")#下载并安装xts程序包
# install.packages("zoo")
# install.packages("quadprog")
# install.packages("PerformanceAnalytics")
library(PerformanceAnalytics)#加载PerformanceAnalytics程序包
x<-c(5,10,3,20)
skewness(x)
## [1] 0.6961231
3.2 样本峰度系数
样本峰度系数在此记为\(k_2\),即\[k_2=\frac{n(n+1)}{(n-1)(n-2)(n-3)S_n^4}\sum\limits_{i=1}^n(X_i-\bar{X})^4\]
峰度系数可以看成是衡量与正态分布形状相似程度的指标,当峰度系数为正时,数据分布形状(用频数分布曲线来描述)的顶端比正态分布的顶端更尖峭,尾部比正态分布的尾部更长(说明两侧极端数据多);当峰度系数为负时,数据分布形状的顶端比正态分布的顶端更扁平,尾部比正态分布的尾部更短。
正态分布的峰度系数和偏度系数都为0,但并不是说峰度系数和偏度系数为0的分布就是正态分布,检验数据集分布是否为正态分布,需要严格的假设检验。
在R中,可以调用kurtosis()
函数来计算偏度系数,kurtosis()
在PerformanceAnalytics
包中。在下载该程序包之前的操作参考上文峰度系数。
# install.packages("xts")#下载并安装xts程序包
# install.packages("zoo")
# install.packages("quadprog")
# install.packages("PerformanceAnalytics")
library(PerformanceAnalytics)#加载PerformanceAnalytics程序包
library(PerformanceAnalytics)
x<-c(5,10,3,20)
kurtosis(x)
## [1] -1.082094
4 参考文献
[1]薛毅. 统计建模与R软件[M]. 清华大学出版社, 2007.
[1]王兆军. 数理统计教程[M]. 高等教育出版社, 2014.
[2]https://baike.baidu.com/item/%E7%BB%9F%E8%AE%A1%E5%AD%A6/1175?fr=aladdin
[3]https://zhidao.baidu.com/question/625332021324499404.html