2016-09-28 420 views
0

我嘗試用optim()函數估計三個參數a,b0和b1。但我總是得到錯誤: 優化錯誤(par = c(1,1,1),fn = logweibull,method =「L-BFGS-B」,: L-BFGS-B需要有限值'fn 「R optim()L-BFGS-B需要有限的'fn'值 - Weibull

t<-c(6,6,6,6,7,9,10,10,11,13,16,17,19,20,22,23,25,32,32,34,35,1,1,2,2,3,4,4,5,5,8,8,8,8,11,11,12,12,15,17,22,23) 
d<-c(0,1,1,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1) 
X<-c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) 

logweibull <- function (a,b0,b1) {a <- v[1];b0 <- v[2]; b1 <- v[3]; 
sum (d*log(t^a*exp(b0+X*b1)-t^a*exp(b0+X*b1))) + sum (d + log((a*t^(a-1))/t^a)) } 

v<-c(1,1,1) 

optim(par=c(1,1,1) ,fn = logweibull, method = "L-BFGS-B",lower = c(0.1, 0.1,0.1), upper = c(100, 100,100),control = list(fnscale = -1)) 

你能幫我嗎?你知道我做錯了什麼?

+0

'logweibull < - 功能(A,B0,B1){一個< - V [1]; B0 < - V [2]; b1 <-v [3]; sum(d * log(t^a * exp(b0 + X * b1)) - t^a * exp(b0 + X * b1))+ sum * t ^(a-1))/ t^a))}'謝謝有一個錯誤,缺少一些括號。但是現在這個功能仍然不能正常工作。我將只將起始值作爲估計參數返回。你有什麼想法嗎? – Hans

回答

2

您也可以考慮

(1)通過附加數據變量的目標函數與參數一起你想要估計。

(2)通過梯度函數(加上t他梯度函數)

(3)原始目標函數可以進一步簡化(如下)

logweibull <- function (v,t,d,X) { 
    a <- v[1] 
    b0 <- v[2] 
    b1 <- v[3] 
    sum(d*(1+a*log(t)+b0+X*b1) - t^a*exp(b0+X*b1) + log(a/t)) # simplified function 
} 

grad.logweibull <- function (v,t,d,X) { 
    a <- v[1] 
    b0 <- v[2] 
    b1 <- v[3] 
    c(sum(d*log(t) - t^a*log(t)*exp(b0+X*b1) + 1/a), 
    sum(d-t^a*exp(b0+X*b1)), 
    sum(d*X - t^a*X*exp(b0+X*b1))) 
} 

optim(par=c(1,1,1), fn = logweibull, gr = grad.logweibull, 
     method = "L-BFGS-B", 
     lower = c(0.1, 0.1,0.1), 
     upper = c(100, 100,100), 
     control = list(fnscale = -1), 
     t=t, d=d, X=X) 

與輸出

$par 
[1] 0.2604334 0.1000000 0.1000000 

$value 
[1] -191.5938 

$counts 
function gradient 
     10  10 

$convergence 
[1] 0 

$message 
[1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH" 

另外,下面是與會聚之間的比較並沒有梯度函數(有限差分)。使用顯式梯度函數需要9次迭代才能收斂到解,而如果沒有(有限差分),需要126次迭代才能收斂。

enter image description here

+0

但理想情況下,不應該使用條件pdf來計算條件期望值嗎?看看這個:http://stats.stackexchange.com/questions/12843/generating-random-samples-from-a-custom-distribution,他們是如何從任意pdf抽樣(通過計算cdf然後找到根),不應該從這個截斷的pdf中完成蒙特卡洛採樣嗎? –

相關問題