1. 程式人生 > >判斷資料是否服從某一分佈(二)——簡單易用fitdistrplus包(轉發)

判斷資料是否服從某一分佈(二)——簡單易用fitdistrplus包(轉發)

文章轉發自https://www.cnblogs.com/ywliao/p/6297162.html

一、對資料的分佈進行初步判斷

    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(標準誤)更小。所以資料更服從指數分佈。