2017-10-19 74 views
2

所以我有這個離散數據集合my_dat,我試圖擬合曲線以便能夠根據my_dat生成隨機變量。我在連續數據上使用fitdistrplus取得了巨大成功,但嘗試將其用於離散數據時出現了許多錯誤。R:使用fitdistrplus來擬合離散數據直方圖上的曲線

表設置:

library(fitdistrplus) 

my_dat <- c(2,5,3,3,3,1,1,2,4,6, 
      3,2,2,8,3,4,3,3,4,4, 
      2,1,5,3,1,2,2,4,3,4, 
      2,4,1,6,2,3,2,1,2,4, 
      5,1,2,3,2) 

我看看數據的直方圖第一:

hist(my_dat) 

<code>hist(my_dat)</code>

由於數據的離散,我決定嘗試二項分佈或負二項分佈,以適應,這是我遇到麻煩:在這裏我嘗試定義每個:

fitNB3 <- fitdist(my_dat, discrete = T, distr = "nbinom") #NaNs Produced 
fitB3 <- fitdist(my_dat, discrete = T, distr = "binom") 

我收到兩個錯誤:

  1. fitNB3似乎運行,但指出,「公司生產的NaN」 - 任何人都可以讓我 知道爲什麼是這樣?
  2. fitB3根本沒有運行,並提供給我以下錯誤:「start.arg.default(data10,distr = distname)中的錯誤:分發binom的未知起始值。」 - 任何人都可以指出爲什麼這不起作用?我不清楚提供起始數字,因爲數據是離散的(我試圖在fitdist函數中使用start = 1,但我收到另一個錯誤:「fitdist中的錯誤(my_dat,discrete = T,distr =」binom「,start = 1 ):該函數MLE未能估計參數,錯誤代碼100"

我一直在紡紗我的車輪上這一段時間,但我會採取對這些錯誤的任何反饋

回答

0
  1. 請勿在離散數據上使用hist,因爲它不會執行您認爲正在執行的操作。

    比較plot(table(my_dat))hist(my_dat) ...然後思考你之前做過多少錯誤的印象。如果你必須使用hist,請確保你指定了中斷,不要依賴爲連續變量設計的默認值。

    Histogram and plot(table()) showing distinctly different appearance because hist is combining '1' and '2' into first bin

    hist(my_dat) 
    lines(table(my_dat),col=4,lwd=6,lend=1) 
    
  2. 無論你的模型可以適合作爲這兩個分佈從0,而不是1開始,並與你有值的大小,P(0)不會是可忽略小。

  3. 我在運行代碼時沒有遇到任何適合負二項式的錯誤。

  4. 您有相關配件二項式是您需要提供的參數,這是所謂的size(n)和prob(P)的初始值,所以 你需要說的這個問題是這樣的:

    fitdist(my_dat, distr = "binom", start=list(size=15, prob=0.2)) 
    

    但是,您將會遇到新的問題!優化器假定參數是連續的,並且將在size上失敗。

    在另一方面,這可能是一件好事,因爲未知ň MLE不是很乖,特別是當p小。

    通常,對於二項式,預計您會知道n。在這種情況下,p估計可以做如下:

    fitdist(my_dat, distr = "binom", fix.arg=list(size=20), start=list(prob=0.15)) 
    

    然而,隨着固定ñ,最大似然估計是在任何情況下簡單 - 你不需要爲一個優化。

    如果你真的不知道n,有很多比MLE更好的估計值,但這不在這個問題的範圍之內。