一、對數據的分布進行初步判斷
1.1 原理
對於不同的分布,有特定的偏度(skewness)和峰度(kurtosis),正態分布、均勻分布、邏輯斯諦分布、指數分布的偏度和峰度都是特定的值,在偏度-峰度圖中是特定的點,而伽馬分布和對數正態分布在偏度-峰度圖中是一條直線,貝塔分布在偏度-峰度圖中是一片區域。因此可以通過未知分布的偏度峰度值(在圖中是一個觀察點),與各種分布的偏度峰度點(線、區域)進行對比,判斷未知分布數據大致可能的一個或幾個分布。
1.2 R代碼
library(fitdistrplus)
descdist(data, discrete = FALSE, boot = NULL, method = "unbiased",
graph = TRUE, obs.col = "darkblue", obs.pch = 16, boot.col = "orange") #data就是輸入的數據,向量;discrete是否使離散的分布;boot,默認從數據的bootstrap樣品中得到偏度-峰度點;method,默認“unbiased樣品的無偏估計值,也可“sample",樣品值;graph,是否圖畫出來;obs.col,點的顏色;obs.pch,點的樣式;boot.col,點圖中bootstap樣品的顏色。
二、進一步判斷數據對某分布的服從程度
2.1 原理
通過maximum likelihood (mle), moment matching (mme), quantile matching (qme) or maximizing goodness-of-fit estimation (mge)幾種方法將單變量分布擬合為非截尾數據。
2.2 R代碼
fitdist(data, distr, method = c("mle", "mme", "qme", "mge"),
start=NULL, fix.arg=NULL, discrete=FALSE, keepdata = TRUE, keepdata.nb=100, ...) #data,輸入的數據;distr,待擬合的分布,偏度-峰度圖上出現的分布,也可以是自己寫的函數;method方法,默認mle(最在大似然估計);start,如果有自己寫的分布並且需要填入起始變量值的話,start就是需要輸入的分布起始值;fix.arg,指定待擬合分布的參數;discrete是否是離散的分布;keepdata,確定返回的是數據集還是數據子集,默認返回數據集;keepdata.nb,如果keepdata值為FALSE,keppdata.nb的值決定長度大於多少的子集才返回。
三、實例
例一
引入《判斷數據是否服從某一分布(一)》中例二。
數據:
某公司接到一次電話的時間間隔,30個數據(單位:分鍾):
0.8 11.7 2.8 11.9 6.1 1
34.8 3.8 5.2 15.0 10.3 12.3
8.2 0.6 1.7 14.5 8.3 28.9
3.1 7.3 10.2 8.9 0.1 15.5
5.7 0.7 8.3 0.9 40.7 2.9
分析:
library(fitdistrplus)
x<-c(0.8,11.7,2.8,11.9,6.1,1,
34.8,3.8,5.2,15.0,10.3,12.3,
8.2,0.6,1.7,14.5,8.3,28.9,
3.1,7.3,10.2,8.9,0.1,15.5,
5.7,0.7,8.3,0.9,40.7,2.9)
descdist(x)
由圖可知,觀察點接近的分布有gamma分布和指數分布。
首先判斷數據對gamma分布的服從程度:
fitdist(x, "gamma")
再判斷對指數分布的服從程度:
fitdist(x, "exp")
由上述結果可知,指數分布的Std.Error(標准誤)更小。所以數據更服從指數分布。
參考文獻
https://cran.r-project.org/web/packages/fitdistrplus/fitdistrplus.pdf