1.用R計算數據基本統計量(均值)
學習機器學習和數據挖掘中的各種算法和模型,需要掌握統計學的基本概念。統計學是通過搜索、整理、分析數據等手段,以達到推斷所測對象的本質,並預測對象未來走勢的一門綜合性科學。
簡單說,統計學是根據樣本估計總體的科學。它的一些思想和大數據思想有些相悖,不關注數據的大小,而是更關注數據的好壞。
分析數據的第一步要進行數據描述性分析,數據描述性分析指的是:通過繪制統計圖、編譯統計 表、描述統計量等方法來表數據數據的分布特征。
其中,描述統計量包括:中心趨勢度量、分散程度度量
中心趨勢度量 描述樣本數據的集中趨勢的統計量 均值、中位數、眾數、百分位數……
分散程度度量 又稱散布度量 方差、標准差、極差、百分位數……
對於R中的必會操作可以參見:R語言必會基礎語法
均值(mean)
均值數據的平均值
均值和期望:數據總體的平均值是均值,數據樣本的平均值是期望。
用R計算均值
函數:在R中,可以用mean()函數來計算樣本的均值
mean(x, trim=0, na.rm=FALSE)
其中,x是樣本數據(比如向量、矩陣、數組或數據框),trim是計算均值前去掉與均值差較大數據的比例, 缺省值為0,即包含全部數據。當na.rm=FALSE時,允許數據中有缺失數據。
例1
> data<-c(30,31,47,50,52,56,60,63,70,70,110)
> data
[1] 30 31 47 50 52 56 60 63 70 70 110
> result=mean(data);result
[1] 58.09091
mean()函數還可以計算一個矩陣的總體數據均值。
例2
> data<-1:12
> dim(data)<-c(3,4);data
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> result=mean(data);result
[1] 6.5
apply(x,1或2,計算函數 )
計算矩陣中每行或每列的均值,需要調用apply()函數。
其中,x是樣本數據,數字1表示求每行的數據平均值,數字2表示求每列的平均值。
還以上面的矩陣為例
例3
> result=apply(data,1,mean);result
[1] 5.5 6.5 7.5
> result=apply(data,2,mean);result
[1] 2 5 8 11
參數trim
均值的弱點是對異常值敏感,所以有的時候我們需要剔除掉一些數據,然后才能得到准確有意義的均值。
比如下面這組數據記錄學生的體重值:
750,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
其中有一個值少了個小數點,變成了750kg,此時計算均值就是有誤差的。所以需要把異常值替換掉。可以調用 mean()里的trim參數來處理。 trim的取值在0~0.5之間, 表示在計算均值前需要去掉的異常值比例。
當然,異常值也不是一定要剔除的,有些情況下,會專門做離群點分析。
例4
> data<-c(750,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
[1] 750.0 64.0 47.4 66.9 62.2 62.2 58.7 63.5 66.6 64.0 57.0 69.0
[13] 56.9 50.0 72.0
> result=mean(data,trim=0.1);result
[1] 62.53846
圖中所求的第一個均值是沒有剔除異常值時的均值,第二個為加入trim參數后的均值:
參數na.rm
有時樣本數據里有缺失值,比如下組數據:
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,NA
這樣在計算均值時就會出現錯誤,此時可以選用參數na.rm=TRUE來忽略控制。
例5
> data<-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,NA)
> result=mean(data,na.rm=TRUE);result
[1] 61.67143
> result=mean(data);result
[1] NA
圖中可以看到,在有缺失值的情況下,直接求均值,結果為NA:
補充:加權算術均值
每一個樣本數據x都有一個對應的權重W與之關聯,權重反映了對應數據x的重要程度。
2.用R計算數據基本統計量(中位數、百分位數)
中位數
定義:
為什么要有中位數?
我們要知道的是,均值描述並不總是可靠的或最佳的。均值對於極端值(例如離群點)很敏感, 比如整個公司薪水的均值由幾個極高收入的經理顯著推高。為了抵消少數極端值的影響,我們可以使用截尾均值(丟棄極端值后計算均值)。截尾均值一般是去掉高端和低端的2%數據。
但是,當異常值的價值非常大時,用截尾均值同樣會丟失大量的價值數據。
對於傾斜數據,更好的度量值是中位數。
中位數定義為數據排序位於中間位置的數據,比如一組樣本數據:3,1,7,5,9 則中位數為5。
中位數描述數據中心位置的數字特征,大體上比中位數大或小的數據個數為整個數據的一半。 對於對稱分布的數據,均值與中位數比較接近;對於偏態分布的數據,均值與中位數不同。在大部分實際應用中,數據都是不對稱的,如下圖,可能是正傾斜的(b),也可能是負傾斜的(c)。
中位數的顯著特點是不受異常值的影響,具有穩健性,因此中位數也是數據分析中相當重要的統計量。
median(x, na.rm = FALSE)
用R計算下組數據中位數
75, 64, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5
median(x, na.rm = FALSE) 是計算中位數函數。 x是數據樣本,na.rm=TRUE可以帶有缺失值的樣本(默認是FALSE)
> data<-c(75, 64, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5)
> result=median(data);result
[1] 62.85
百分位數
百分位數是中位數的推廣,下圖為某屬性X的數據分布圖
如圖所示,Q1,Q2,Q3稱為分位數。分位數是取自數據分布的每隔一定間隔的點,把數據划分為基本上大小相等的連貫集合。
二分位數:是一個數據點。相當於是中位數,將數據划分為高低兩半。(Q2)
四分位數:是三個數據點。將整個數據分為4個相等部分(Q1,Q2,Q3)
四分位數極差:Q1和Q3的距離。
quantile(x, probs = seq(0, 1, 0.25), na.rm = FALSE,names = TRUE, type = 7, ...)
x為樣本,probs指定百分位,默認是:0% 25% 75% 100% ,也可以手動指定。na.rm=TRUE可以處理缺失說明。
例子:計算下列數據的百分位數:
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<-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)
> result=quantile(data);result
0% 25% 50% 75% 100%
47.40 57.85 63.50 66.75 75.00
將上組數據的分位點變間隔變為20% :
> result=quantile(data,probs=seq(0,1,0.2));result
0% 20% 40% 60% 80% 100%
47.40 56.98 62.20 64.00 67.32 75.00
3.用R計算數據基本統計量(方差)
方差和標准差都是數據散布度量。這兩個值越小,意味着數據觀測趨向於非常靠近均值。
方差公式:
標准差是方差的平方根。
例子:計算學生體重的方差 75,64,47.4,66.9,62.2,62.2,58.7,63.5
計算方差
> data<-c(75,64,47.4,66.9,62.2,62.2,58.7,63.5)
> result=var(data);result
[1] 60.21268
計算標准差
> data<-c(75,64,47.4,66.9,62.2,62.2,58.7,63.5)
> result=sd(data);result
[1] 7.759683
計算變異系數
> data<-c(75,64,47.4,66.9,62.2,62.2,58.7,63.5)
> result=100*sd(data)/mean(data);result
[1] 12.41798
變異系數是標准差與其平均數的比,是一個百分數,用於比較兩組數據的散布程度,值越大,越散布。
4.隨機變量及其分布(二項分布)
隨機變量X(random variable)表示隨機試驗各種結果的實值單值函數。
描述一個隨機變量,不僅要說明它能夠取哪些值,而且還要關心它取這些值的概率。因此,引入隨機變量的分布函數概念。
對每個隨機變量X和每個實數集合A,可以計算X取A中值的概率。所有這些概率的集合就是隨機變量X的分布。
隨機變量以及分布函數主要有兩類:離散型分布和連續型分布。
離散型分布:當X只能取有限個不同值x1,x2,……Xk時,我們稱隨機變量X服從一個離散型分布。X稱為離散型隨機變量。比如用隨機變量X代表拋一枚硬幣的結果,則此時X是離散型隨機變量。因為X只能取0或1(正面或背面)。
連續型分布:對實軸的任意子集A,隨機變量X落在A中的概率是f在A上的積 分,那么我們說X服從連續型分布或者X是連續型隨機變量。一般我們都是討論X落入子集A的區間[a,b]的概率,則記為:
如圖:
如果對整個曲線做積分,相當於求整個曲線和x軸圍成的面積。所以結果是1。所以上式在圖中,相當於求a,b區間出現的概率。 針對連續型分布,求一個點的概率是沒有意義的(因為面積是0,即概率是0),所以要求一個 區間的概率。
常用的數據分布有如下幾種:
常見的一元離散型分布: 整數型均勻分布 二項分布 泊松分布 幾何分布 超幾何分布
常見的一元連續型分布: 實數型均勻分布 正態分布(高斯分布) γ(伽瑪)分布 指數分布 貝塔分布
多元離散型分布: 多項式分布
二元連續型分布: 二元正態分布
還有其他一些分布: weibull(韋伯)分布 F分布 T分布 β(貝塔)分布 χ²(卡方)分布 cauchy分布
其中,最常用和常見的有:正態分布、二項分布、指數分布
均勻分布
均勻分布是一種簡單的概率分布,分為離散型均勻分布和連續型均勻分布。
離散型均勻分布指的是整數的均勻分布。設隨機變量X可能取1,2,……n, 那么X的概率密度函數為: f(x)=1/n
連續型均勻分布指的是實數的均勻分布,在a~b區間上,隨機變量可以取任意一點。 那么X的概率密度函數為:f(x)=1/(b-a) a≦x≦b。
注:在實際生成生活中,如果是均勻分布,一般都是連續型均勻分布。
伯努利分布
伯努利分布是一種離散分布,有兩種可能的結果。1表示成功,出現的概率為p(其中0<p<1)。0表示失敗,出現的概率為q=1-p。即:若隨機變量X所能取的實驗結果只有兩種結果,則隨機變量X服從伯努利分布。
伯努利分布最簡單的實驗是拋一枚(只一次)硬幣出現的結果(正面或反面)。
伯努利分布概率函數:如果隨機變量X只取0和1兩個值,並且相應的概率為: Pr(X=1)=p,Pr(X=0)=1-p
則X的概率函數可以寫為:
二項分布
二項分布即重復n次獨立的伯努利試驗。在每次試驗中只有兩種可能的結果,而且兩種結果發生與否互相對立,並且相互獨立,與其它各次試驗結果無關,事件發生與否的概率在每一次獨立試驗中都保持不變, 則這一系列試驗總稱為n重伯努利實驗,當試驗次數為1時,二項分布就是伯努利分布。
二項分布概率函數:二項分布(Binomial Distribution),即重復n次的伯努利試驗(Bernoulli Experiment),用ξ表示隨機試驗的結果。如果事件發生的概率是p,則不發生的概率q=1-p,n次獨立重復試驗中發生k次的概率是:
其中,C(n,k)為:
rbinom(n,size,prob)
n是實驗次數。prob為單點分布的成功的概率。size為隨機數產生范圍,從0開始取值。如果是1,則取值為0或1。
利用R語言模擬一次伯努利實驗 (伯努利分布)
例如:拋一枚硬幣,出現正面記為1,背面記為0,正面和背面出現的概率都為0.5。
> rbinom(1,1,0.5)
[1] 1
第一個1表示實驗一次
第二個1表示隨便變量X的取值結果,如果寫1,表示去0或1兩種情況
第三是概率,表示出現1的概率
實驗如圖:
畫出伯努利分布 (實驗一次)的圖:
> result=rbinom(1,1,0.5);result
[1] 1
> plot(result)
代碼如圖:
畫出10次伯努利實驗的圖:
> result=rbinom(10,1,0.5);result
[1] 1 1 1 1 1 0 0 1 0 1
> plot(result)
畫出1000次伯努利實驗的圖,並以線圖模擬出實驗結果的概率密度:
> result=rbinom(1000,1,0.5);result
> plot(result)
> lines(result)
實驗如圖:
做1000次伯努利實驗,並調整概率為0.2,並模擬出概率密度圖來觀察結果:
> result=rbinom(1000,1,0.2);result
> plot(result)
> lines(result)
實驗如圖:
5.隨機變量及其分布(正態分布)
正態分布(Normal distribution)又名高斯分布(Gaussian distribution),是一個在數學、物理及工程等領域都非常重要的概率分布,在統計學的許多方面有着重大的影響力。可以說是最重要的一種分布,也是應用最廣泛的連續型分布。
正態分布是具有兩個參數μ和σ^2的連續型隨機變量的分布。
第一參數μ是遵從正態分布的隨機變量的均值(期望),這個參數決定了分布的位置。
第二個參數σ^2是此隨機變量的方差,這個參數決定了分布的幅度。
所以正態分布記作N(μ,σ^2 )。 遵從正態分布的隨機變量的概率規律為取 μ鄰近的值的概率大 ,而取離μ越遠的值的概率越小;σ越小,分布越集中在μ附近,σ越大,分布越分散。
當μ=0,σ^2 =1時,稱為標准正態分布,記為N(0,1)。
概率密度函數
如果連續型隨機變量X的概率密度函數 f(x|μ,σ^2)具有如下形式:
則稱X服從均值為μ,方差為σ^2的正態分布。
概率密度曲線圖
1.標准正態分布圖——N(0,1):
2.當隨機變量X服從N(μ,0.5),N(μ,0.1),N(μ,2)時的圖形:
6.隨機變量及其分布(指數分布)
指數分布(Exponential distribution)用來表示獨立隨機事件發生的時間間隔,許多電子產品的壽命分布一般服從指數分布。它在可靠性研究中是最常用的一種分布形式。
指數分布的區間是[0,∞),上式中λ > 0是分布的一個參數,常被稱為率參數(rate parameter)。即每單位時間發生該事件的次數。
如果一個隨機變量X 呈指數分布,則可以寫作:X ~ Exponential(λ)。指數分布的概率密度圖像如下圖:
用R模擬指數分布案例
概率密度函數
dexp( ):R中指數分布的概率密度函數
例1
在區間[-3,5]上,隨機變量X服從 X ~ Exponential(λ),試繪出 λ=0.5時對應的指數分布曲線
> x<-seq(-3,5,length.out=1000)
> y<-dexp(x,0.5)
> plot(x,y,type="l",main="指數分布")
繪制曲線如下圖:(length.out=1000:在指定區間內生成1000個數)
下面是length.out=10時,做出的圖像,可以看到與指數函數實際的概率密度圖像有着差異:
例2
在區間[0,5]上,繪出 Exponential(0.5), Exponential(1), Exponential(2), Exponential(5)的曲線
代碼:
> x<-seq(-3,5,length.out=1000)
> y<-dexp(x,0.5)
> plot(x,y,col="red",xlim=c(0,2),ylim=c(0,5),type="l",ylab="密度",xlab="",main="指數密度分布")
> lines(x,dexp(x,1),col="green")
> lines(x,dexp(x,2),col="blue")
> lines(x,dexp(x,5),col="orange")
> legend("topright",legend=paste("rate=",c(.5,1,2,5)),lwd=1,col=c("red","green","blue","orange"))
結果圖:
結果顯示:λ值越大,圖形越陡峭
累計分布函數
pexp():R中指數分布的累計分布函數
例3
繪出Exponential(0.5), Exponential(1), Exponential(2), Exponential(5)的累計分布曲線
代碼:
> x<-seq(-1,2,length.out=100)
> y<-pexp(x,0.5)
> plot(x,y,col="red",xlim=c(0,2),ylim=c(0,1),type="l",xaxs="i",yaxs="i",ylab="密度",xlab="",main="指數累計分布")
> lines(x,pexp(x,1),col="green")
> lines(x,pexp(x,2),col="blue")
> lines(x,pexp(x,5),col="orange")
> legend("bottomright",legend=paste("rate=",c(.5,1,2,5)),lwd=1,col=c("red","green","blue","orange"))
結果圖:
分布檢驗
檢驗一組樣本是否滿足指數分布
rexp():用於生成滿足指數分布的樣本數據
ks.test():Kolmogorov-Smirnov連續分布檢驗:檢驗單一樣本是不是服從某一預先假設的特定分布的方法,根據的是此樣本的累計分布函數來檢驗。
統計量D值越小,越接近0,表示樣本數據越接近指數分布p值,如果p-value小於顯著性水平α(0.05),說明不服從指數分布