2016-09-28 238 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中完成蒙特卡洛采样吗? –

相关问题