統計分析分為統計描述和統計推斷兩個部分,統計描述是通過繪製統計圖、編制統計表、計算統計量等方法來表述數據的分佈特徵,它是數據分析的基本步驟,也是進行統計推斷的基礎。這裡結合R語言介紹統計描述,也就是數據的描述性分析,用R語言作數據的描述性分析,可以更加方便、直觀,有利於對統計描述的理解。
已知一組觀測數據為x1,x2,...,xn,它們可以是從所要研究的對象的總體X中取出的,這n個觀測值就構成一個樣本。在一些簡單的實際問題中,這n個觀測值就是所要研究問題的全體,數據分析的任務就是要對這全部n個數據進行分析,提取數據中包含的有用信息。
數據作為信息的載體,當然要分析數據中包含的主要信息,即要分析數據的主要特徵,也就是說,要研究數據的數字特徵。這些特徵就是在之前統計章節中所介紹的數據特徵,即數據的集中趨勢、分散趨勢和數據的分佈等。
數據的集中趨勢常用的衡量指標有均值、眾數、中位數、百分位數。
均值
在R語言中,可用mean()函數計算樣本的均值,其使用方法為:
mean(x,trim=0,na.rm=FALSE)
其中x是對象(如向量、矩陣、數組或數據框),trim是計算均值前去掉與均值差較大數據的比例,缺省值為0,即包括全部數據。當na.rm=TRUE,允許數據中有缺失值,函數的返回值是對象的均值。
> x<-1:12
> dim(x)<-c(3,4)
> x
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> mean(x)
[1] 6.5
注意,當x是矩陣或數組時,函數mean()返回的一個數而不是向量,即矩陣中全部數據的平均值。如需要得到矩陣各行各列的均值,需要調用apply()函數。
> #計算矩陣各行的均值
> apply(x,1,mean)
[1] 5.5 6.5 7.5
> #計算矩陣各列的均值
> apply(x,2,mean)
[1] 2 5 8 11
如果x是數據框,則mean()的返回值就是向量。
求和
求和函數sum()是與求均值相關的函數,其使用格式為:
sum(...,na.rm=FALSE)
如果x是向量,函數length(x)的返回值是向量x的長度,因此均值可由下面計算得出:
> w<-c(75.0,64.0,47.4,66.9,62.2,58.7,63.5,66.6,64.0,57.0,69.0,56.9,50.0,72.0)
> w.mean<-mean(w)
> w.mean
[1] 62.37143
> w[1]<-750
> w
[1] 750.0 64.0 47.4 66.9 62.2 58.7 63.5 66.6 64.0 57.0 69.0 56.9
[13] 50.0 72.0
> mean(w)
[1] 110.5857
> mean(w,trim=0.1)
[1] 62.56667
使用trim參數可以有效減少由於輸入誤差對計算的影響,trim的取值在0至0.5之間,表示在計算均值前需要去掉異常值的比例,利用這個參數可以有效的改善異常值對計算額影響。
如果向量中存在異常值NA,此時用mean()方法無法得出得出結果,而na.rm是控制缺失數據的參數。
> w<-c(75.0,64.0,47.4,66.9,62.2,58.7,63.5,66.6,64.0,57.0,69.0,56.9,50.0,72.0,NA)
> mean(w)
[1] NA
> mean(w,na.rm=TRUE)
[1] 62.37143
加權平均值
與均值函數mean()相關的函數還有weighted.mean(),即計算數據的加權平均值,具體使用格式為:
weighted.mean(x,w,na.rm=FALSE)
其中x是數值向量,w是數據x的權,與x的維數相同。該函數可以對矩陣和數組計算加權平均值,但對數據框不適用。
排序
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(x,decreasing=TRUE)
[1] 75.0 66.9 64.0 63.5 62.2 62.2 58.7 47.4
中位數
median()函數用於計算數據的中位數,其使用 格式為:median(x,na.rm=FALSE)
> x<-c(75,64,47.4,66.9,62.2,NA,58.7,63.5)
> x
[1] 75.0 64.0 47.4 66.9 62.2 NA 58.7 63.5
> median(x)
[1] NA
> median(x,na.rm=TRUE)
[1] 63.5
百分位數
quantile()函數用於計算數據的百分位數,其使用格式為:
quantile(x,probs-seq(0,1,0.25),na.rm=FALSE,names=TRUE)
其中x是向量,probs是給出相應的百分位數,缺省值是0、1/4、1/2、3/4。
> x<-c(75,64,47.4,66.9,62.2,58.7,63.5)
> quantile(x,probs=seq(0,1,0.2))
0% 20% 40% 60% 80% 100%
47.40 59.40 62.72 63.80 66.32 75.00
數據的分散趨勢常用的衡量指標有方差、標準差、極差、四分位極差、變異係數和標準誤等。
方差和標準差
R語言中,若x是由樣本構成的向量,則var(x)計算樣本方差,sd(x)計算樣本標準差,它們的使用格式為:
var(x,y=NULL,na.rm=FALSE,use)
sd(x,na.rm=FALSE)
與方差函數var()相關的函數還有:cov()函數求協方差矩陣,cor()求相關矩陣。
> var(x)
[1] 70.23238
> sd(x)
[1] 8.380476
極差和四分位極差
極差的計算公式為:
R = max(x) - min(x)
其中x是由樣本構成的向量,樣本極差是描述樣本分散性的數字特徵,當數據越分散,其極差越大。
樣本上、下四分位數之差稱為四分位極差,其計算公式為:
R1= Q3 - Q1
分佈形狀的度量指標主要有偏度係數和峰度係數。
偏度係數是刻劃數據的對稱性指標。關於均值對稱的數據其偏度係數為0,右側更分散的數據偏度係數為正,左側更分散的數據偏度係數為負數。
峰度係數:當數據的總體分佈為正態分佈時,峰度係數近似為0;當分佈較正態分佈的尾部更分散時,峰度係數為正,否則為負。當峰度係數為正時,兩側極端數據較多,當峰度係數為負時,兩側極端數據較少。
最後編寫一個統計函數,計算樣本的各種描述性統計量:
> 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)
+ }
> w<-c(75.0,64.0,47.4,66.9,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 CSS USS
1 14 62.37143 60.81451 7.798366 63.75 2.084201 12.50311 790.5886 55253.32
R R1 Skewness Kurtosis
1 27.6 9.4 -0.4240699 -0.1252641