R(12):第三章:3.1描述统计量

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/genome_denovo/article/details/82469044

《统计建模与R软件》薛毅

总结:3.1 节总结
均值计算,mean(x, trim = 0, na.rm = FALSE),x是向量,trim去除偏差值,na.rm去除NA值;顺序统计量(排序),sort;中位数median();百分比quantile(),上四分位,下四分位;记住脚步函数data_outline.R,里面包含本节所有计算函数。

第3章 数据描述性分析

统计分析分为统计描述和统计推断两个部分,统计描述是通过绘制统计图、编制统计表、计算统计量等方法来表述数据的分布特征。

3.1 描述统计量

要研究数据的数字特征,即分析数据的集中位置、分散程度和数据分布等。

3.1.1 位置的度量

用来描述定量资料的集中趋势的统计量常用的有均值、众数、中位数、百分数等。

1. 均值

在R语言中,可用mean()函数计算样本的均值,函数为:
mean(x, trim = 0, na.rm = FALSE)
其中x是对象(如向量、矩阵、数组或数据框),trim时在计算均值前去掉x两端观察者的比例,默认值为0,即包含全部数据;当na.rm = TRUE时,允许数据中有缺失数据,函数的返回值是对象的均值。
例如:
> w <- c(75.0, 64.0, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5, 66.6, 64.0, 57.0, 69.0, 56.9, 50.0, 72.0)
> mean(w)
[1] 62.36
如果数据中,某些数据是异常值,就不能简单的用mean(w)计算样本均值,如果一个数值是750,则计算的结果必然不是真实值,例如:
> w[1]<-750
> mean(w)
[1] 107.36
所以这个时候mean函数中的trim参数就起到了作用:
(python也有类似的功能,from scipy import stats; trim_mean(a, proportiontocut, axis=0);proportiontocut的功能和R的mean函数的trim的功能类似)
> mean(w, trim=0.1)
[1] 62.53846
其中trim的取值在0到0.5之间,表示在计算均值前需要去掉异常值的比例,利用这个参数可以有效地改善异常值对计算是影响。
na.rm是控制缺失数据的参数,例如:
> w
[1] 75.0 64.0 47.4 66.9 62.2 62.2 58.7 63.5 66.6 64.0 57.0
[12] 69.0 56.9 50.0 NA
> mean(w)
[1] NA
选用参数na.rm=TRUE可以很好地处理这个问题
> mean(w, na.rm=TRUE)
[1] 61.67143
对于sum()函数,此参数的意义是相同的,即na.rm=TRUE表示可以求带有缺失数据的和。

加权平均数
加权平均数即将各数值乘以相应的权数,然后加总求和得到总体值,再除以总的单位数
例子:
当一组数据中的某些数重复出现几次时,那么它们的平均数的表示形式发生了一定的变化.例如,某人射击十次,其中二次射中10环,三次射中8环,四次射中7环,一次射中9环,那么他平均射中的环数为:
(10*2+8*3+7*4+9*1)/10 = 8.1
这里,7,8,9,10这四个数是射击者射中的几个不同环数,但它们出现的频数不同,分别为4,3,1,2,数据的频数越大,表明它对整组数据的平均数影响越大
R中计算加权平均数的函数为,weighted.mean(),具体使用格式为:weight.mean(x, w, na.rm=FALSE)
其中x是数据向量;w是数据x的权,与x的维数相同;参数na.rm的意义与mean()函数相同。该函数可以对矩阵和数组计算加权平均数,但对数据框不适用(对于数据框weight.mean()函数的计算结果与矩阵 计算结果相同,而mean()函数对两者的计算结果则不同)

矩阵和数据框的平均数
如果需要得到矩阵各行各列的均值,需要调用apply()函数计算,例如,计算矩阵各行的均值,即:
> A<-matrix(1:6,nrow=2);A
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> apply(A,1,mean) #计算矩阵各个行的平均值
[1] 3 4
> apply(A,2,mean) #计算矩阵各个列的平均值
[1] 1.5 3.5 5.5
计算数据框,则mean()返回值就是向量
> apply(as.data.frame(A),1,mean)
[1] 3 4

2. 顺序统计量(排序)

设n个数据(观测值)按从小到大的顺序排列,则称其为顺序统计量
在R语言中,sort()函数可以给出观测量的顺序统计量。
> x <- c(75, 64, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5)
> sort(x)
[1] 47.4 58.7 62.2 62.2 63.5 64.0 66.9 75.0
sort函数的具体用法
sort(x, partial=NULL, na.last=NA, decreasing=FALSE, method=c(“shell”,”quick”), index.return=FALSE)
partial表示部分排序,na.last表示将NA值放到最后,decreasing逆向排序,method排序方法index.return逻辑变量,控制排序下标的返回值

3. 中位数

中位数定义为数据排序位于中间位置的值,即
当序列个数为奇数个时,中位数是序列从小到大排序后位于中间的数
当序列个数为偶数个时,中位数是序列从小到大排序后位于中间两位数加和的1/2
对于对称分布的数据,均值与中位数比较接近,对于偏态分布的数据,均值与中位数不同,中位数的另一个显著特点是不受异常值的影响,具有稳健性。
在R语言中,函数median()给出观测量的中位数,例如:
> x <- c(75, 64, 66.9, 62.2, 62.2, 58.7, 63.5)
> median(x)
[1] 63.5
median()函数的使用格式为
median(x, na.rm=FLASE)
其中x是数值型向量;na.rm时逻辑向量,当na.rm=TRUE时,函数可以处理带有缺失数据的向量,否则不能处理

4. 百分数

是将数值从小到大排序后,得到一定的分位区间,分为0.5分位数,就是中位数,0.75分位数和0.25分位数,称为上四分位和下四分位。上四分位和下四分位计算原理和中位数的计算原理相同。
在R语言中用quantile()函数计算观测量的百分数
> w <- c(75.0, 64.0, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5, 66.6, 64.0, 57.0, 69.0, 56.9, 50.0, 72.0)
> quantile(w)
0% 25% 50% 75% 100%
47.40 57.85 63.50 66.75 75.00
quantile()函数的一般使用格式为
quantile(x, probs=seq(0, 1, 0.25), na.rm=FALSE, names=TRUE, type=7, …)
其中x是由数值构成的向量,probs给出相应的百分位数,默认值是0, 1/4, 1/2, 3/4, 1;na.rm时逻辑向量,当na.rm=TRUE时,可以处理缺失数据
如果打算给出0%, 20%, 40%, 60%, 80%和100%的百分位数,可以选择
> quantile(w, probs=seq(0,1,0.2))
0% 20% 40% 60% 80% 100%
47.40 56.98 62.20 64.00 67.32 75.00

3.1.2 分散程度的度量

表示数据分散(或变异)程度的特征量有方差、标准差、极差、四分位极差、变异系数和标准误等。

扫描二维码关注公众号,回复: 3189369 查看本文章
1. 方差、标准差与变异系数

方差(variance)时描述数据取值分散性的一个度量。样本方差(sample variance)时样本相对于均值的偏差平方和的平均,记为s^2,标准差为s;变异系数时刻画数据相对分散性的一种度量,记为CV,CV=标准差/样本平均数*100%,用百分数表示;与分散程度有关的统计量还有下列数字特征,样本校正平方和,样本未校正平方和;在R语言中,若x是由样本构成的向量,则var(x)计算样本方差,sd(x)计算样本标准差,即sd(x)^2=var(x)
例如:
> w <- c(75.0, 64.0, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5, 66.6, 64.0, 57.0, 69.0, 56.9, 50.0, 72.0)
> var(w) #计算方差
[1] 56.47257
> sd(w) #计算标准差
[1] 7.514823
方差函数var()和标准差函数sd()的使用格式为:
var(x, y = NULL, na.rm = FALSE, use)
ad(x, na.rm = FALSE)
其中x是数值向量、矩阵或数据框;na.rm是逻辑变量,当na.rm=TRUE时,可处理缺失数据。
对于变异系数、校正平方和、未校正平方和等指标,需要编写简单的程序。
> cv <- 100*sd(w)/mean(w); cv #计算变异系数得出的数值是百分比
[1] 12.05071
> css <- sum((w-mean(w))^2); css #计算样本校正平方和
[1] 790.616
> uss <- sum(w^2); uss #计算样本未校正平方和
[1] 59122.16

2. 极差与标准误

样本极差(记为R)的计算公式为:
R=max(x)-min(x)
其中x是由样本构成的向量,样本极差是描述样本分散性的数字特征。当数据越分散,其极差越大
样本上、下四分位数之差称为四分位差(或半极差),记为R1,即:
R1=Q3-Q1=quantile(w)['75%']-quantile(w)['25%'] #w记为一组由数值构成的向量
四分位差是度量样本分散性的重要数字特征,特别对于具有异常值的数据,它作为分散性具有稳健性。
样本标准误

3.1.3 分布形状的度量

样本的偏度(skewness)系数和峰度(kurtosis)系数

1. 偏度系数,skewness

偏度系数是刻画数据的对称性指标,关于均值对称的数据其偏度系数为0,右侧更分散的数据偏度系数为正,左侧更分散的数据偏度系数为负。
偏度:偏度用于衡量向量x的对称性;若偏度为负, 则x均值左侧的离散度比右侧强;若偏度为正, 则x均值左侧的离散度比右侧弱;对于正态分布(或严格对称分布)偏度等于0。

2. 峰度系数,kurtosis

当数据的总体分布为正态分布时,峰度系数近似为0;当分布较正态分布的尾部更分散时,峰度系数为正;否则为负。当峰度系数为正时,两侧极端数据较多;当峰度系数为负时,两侧极端数据较少。
最后编写一个统一的函数(程序名:data_outline.R),计算样本的各种描述性统计量。

data_outline <- function(x) {
n <- length(x)
m <- mean(x)
v <- var(x)
s <- sd(x)
me <- median(x)
cv <- 100*s/m
css <- sum((x-m)^2)
uss <- sum(x^2)
R <- max(x)-min(x)
R1 <- quantile(x, 3/4)-quantile(x,1/4)
sm <- s/sqrt(n)
g1 <- n/((n-1)*(n-2))*sum((x-m)^3)/s^3
g2 <- ((n*(n+1))/((n-1)*(n-2)*(n-3))*sum((x-m)^4)/s^4 - (3*(n-1)^2)/((n-2)*(n-3)))
data.frame(N=n, Mean=m, Var=v, std_dev=s, Median=me, std_mean=sm, CV=cv, CSS=css, USS=uss, R=R, R1=R1, Skewness=g1, Kurtosis=g2, row.names=1)
}

函数的输入变量x是数值型向量,由样本构成。函数的返回值是数据框,包含以下指标:length样本个数;mean均值;var方差;sd标准差;median中位数;cv变异系数;css校正平方和;uss未校正平方和;R极差;R1样本半极差;sm标准误;g1(Skewness)样本峰度系数;g2(kurtosis)样本偏度系数。
> source("/Users/xxx/Desktop/data_outline.R")
> w <- c(75.0, 64.0, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5, 66.6, 64.0, 57.0, 69.0, 56.9, 50.0, 72.0)
> data_outline(w)
N Mean Var std_dev Median std_mean CV
15 62.36 56.47257 7.514823 63.5 1.940319 12.05071
CSS USS R R1 Skewness Kurtosis
790.616 59122.16 27.6 8.9 -0.4299561 0.09653947

猜你喜欢

转载自blog.csdn.net/genome_denovo/article/details/82469044