2017-06-12 419 views
1

我試圖使用fitdist()功能從fitdistrplus包到我的數據代入不同的分佈。比方說,我的數據是這樣的:錯誤:函數MLE失敗,錯誤代碼來估計參數100

x = c (1.300000, 1.220000, 1.160000, 1.300000, 1.380000, 1.240000, 
1.150000, 1.180000, 1.350000, 1.290000, 1.150000, 1.240000, 
1.150000, 1.120000, 1.260000, 1.120000, 1.460000, 1.310000, 
1.270000, 1.260000, 1.270000, 1.180000, 1.290000, 1.120000, 
1.310000, 1.120000, 1.220000, 1.160000, 1.460000, 1.410000, 
1.250000, 1.200000, 1.180000, 1.830000, 1.670000, 1.130000, 
1.150000, 1.170000, 1.190000, 1.380000, 1.160000, 1.120000, 
1.280000, 1.180000, 1.170000, 1.410000, 1.550000, 1.170000, 
1.298701, 1.123595, 1.098901, 1.123595, 1.110000, 1.420000, 
1.360000, 1.290000, 1.230000, 1.270000, 1.190000, 1.180000, 
1.298701, 1.136364, 1.098901, 1.123595, 1.316900, 1.281800, 
1.239400, 1.216989, 1.785077, 1.250800, 1.370000) 

接下來,如果我跑fitdist (x, "gamma")一切都很好,但如果我用fitdist (x, "beta")代替我收到以下錯誤:

Error in start.arg.default(data10, distr = distname) : 
    values must be in [0-1] to fit a beta distribution 

好了,所以我不是天然英語,但據我明白這種方法需要數據是在範圍[0,1],因此我通過使用x_scaled = (x-min(x))/max(x)縮放。這給了我在那個完美的相關原始載體x該範圍值的向量。

由於x_scaledclass matrix,我使用as.numeric()轉換成數字向量。然後將模型與fitdist(x_scale,"beta")相匹配。

這一次,我收到以下錯誤:

Error in fitdist(x_scale, "beta") : 
    the function mle failed to estimate the parameters, with the error code 100 

所以之後,我一直在做一些搜索引擎查詢,但我並沒有發現任何有用的東西。有沒有人對這裏發生了什麼事情有所瞭解?謝謝

回答

2

通過讀入的源代碼,則可以發現,fitdist默認估計方法是mle,這將調用mledist從相同的包,這將構建你所選擇的分佈的負對數似然並使用optimconstrOptim進行數值最小化。如果數值優化過程出現任何問題,您將收到錯誤信息。

這似乎是錯誤發生的原因,因爲當x_scaled包含0或1時,在計算β分佈的負對數似然性時會出現一些問題,所以數值優化方法將會被破壞。一個鬼把戲是讓x_scaled <- (x - min(x) + 0.001)/(max(x) - min(x) + 0.002),所以在x_scaled沒有0也不是1,和fitdist會工作。

+0

相當不錯的方法!你是黑客!這解決了問題,非常感謝你! :) – EuGENE

相關問題