我想估計3p威布爾分佈的尺度,形狀和閾值參數。r中三參數威布爾分佈的極大似然估計
我到目前爲止已經做的是以下幾點:
指的這個帖子,Fitting a 3 parameter Weibull distribution in R
我用過的功能
EPS = sqrt(.Machine$double.eps) # "epsilon" for very small numbers
llik.weibull <- function(shape, scale, thres, x)
{
sum(dweibull(x - thres, shape, scale, log=T))
}
thetahat.weibull <- function(x)
{
if(any(x <= 0)) stop("x values must be positive")
toptim <- function(theta) -llik.weibull(theta[1], theta[2], theta[3], x)
mu = mean(log(x))
sigma2 = var(log(x))
shape.guess = 1.2/sqrt(sigma2)
scale.guess = exp(mu + (0.572/shape.guess))
thres.guess = 1
res = nlminb(c(shape.guess, scale.guess, thres.guess), toptim, lower=EPS)
c(shape=res$par[1], scale=res$par[2], thres=res$par[3])
}
「預估計」我威布爾參數,以便我可以將它們用作MASS包的「fitdistr」函數中參數「start」的初始值。
您可能會問爲什麼我想估計兩次參數......原因是我需要估計值的方差 - 協方差矩陣,這也是由fitdistr函數估計的。
例:
set.seed(1)
thres <- 450
dat <- rweibull(1000, 2.78, 750) + thres
pre_mle <- thetahat.weibull(dat)
my_wb <- function(x, shape, scale, thres) {
dweibull(x - thres, shape, scale)
}
ml <- fitdistr(dat, densfun = my_wb, start = list(shape = round(pre_mle[1], digits = 0), scale = round(pre_mle[2], digits = 0),
thres = round(pre_mle[3], digits = 0)))
ml
> ml
shape scale thres
2.942548 779.997177 419.996196 ( 0.152129) (32.194294) (28.729323)
> ml$vcov
shape scale thres
shape 0.02314322 4.335239 -3.836873
scale 4.33523868 1036.472551 -889.497580
thres -3.83687258 -889.497580 825.374029
這工作得很好,其中形狀參數大於1的情況下不幸的是我的做法應該處理的情況下,形狀參數可以是小於1
的原因爲何這對於小於1的形狀參數是不可能的這裏描述:http://www.weibull.com/hotwire/issue148/hottopics148.htm
在情況1中,所有三個參數都是未知的,以下是說:
「定義ti的最小失效時間爲tmin。那麼當γ→tmin時,ln(tmin-γ)→-∞。如果β小於1,則(β-1)ln(tmin-γ)變爲+∞。對於給定的β,η和γ解,我們總是可以找到另一組解(例如,使γ更接近tmin),這將給出更大的似然值。因此,對於β,η和γ沒有MLE的解決方案。「
這使得有很大的意義。正是由於這個原因,我想這樣做,他們形容此頁面上的方式。
」在Weibull ++是一種基於梯度的算法,用於尋找β,η和γ的MLE解。 γ的範圍的上限任意設定爲tmin的0.99。根據數據集,本地最優或0.99tmin作爲γ的MLE解決方案返回。「
我想爲gamma設置一個可行的時間間隔(在我的代碼中稱爲'thres'),以便解決方案是之間(0,0.99 * t最小)。
有沒有人有一個想法如何解決這個問題呢?
在功能fitdistr似乎沒有機會做一個限制MLE,制約一個參數。
另一種方法是通過評分向量的外積來估計漸近方差,得分可以從上面使用的函數thetahat.weibul(x)中獲取矢量。但是手動計算外部產品(沒有函數)似乎非常耗時,並且不能解決約束ML估計的問題。
最好的問候, 添
感謝您的幫助。我已經瞭解如何在3p weibull情況下使用約束MLE解決閾值參數的最大化問題。獲取參數的置信區間也非常有幫助。不幸的是我需要估計的方差 - 協方差矩陣,因爲我也想爲3p weibull構建'Fisher Matrix Confidence Bounds'[http://reliawiki.org/index.php/The_Weibull_Distribution#Fisher_Matrix_Confidence_Bounds] 。 mle2是否有機會處理刪失的數據? – Tim91
你真的幫了我很多。我試着計算正常範圍內的方差 - 協方差矩陣(這是我正在尋找的)來計算可靠性和時間的Fisher-Matrix-Confidence-Bounds,這在上面的鏈接中有描述。 我期待的是,計算的var-cov-matrix(從log-scale var-cov-matrix轉換而來)應該接近var-cov-matrix在我的問題上,因爲對於這個特定的參數選擇, 「fitdistr」軟件包起作用了。不幸的是,它不是。 一個突出的任務是對被審查的數據做同樣的事情。 – Tim91
我想說的是,ml優化方法** bbmle :: mle2 **對於低於1的形狀參數不起作用,即使設置了short的約束。 'set.seed(1) DAT < - data.frame(X = rweibull(1000,0.53,365)+ 100) TMIN < - 日誌(0.99 *分鐘(DAT $ X)) M1 < (logshape),exp(logsc),exp(logthres)), data = dat, webr3_start(dat $ x), method =「L-BFGS-B」)' 優化錯誤(par = ... L-BFGS-B需要有限的'fn' – Tim91