用R进行优化时的误差
我有这样一个对数可能性用R进行优化时的误差,r,optimization,R,Optimization,我有这样一个对数可能性 l(parameter)=\sum_{i=1}^{n} \delta log[1-exp{-t^{\alpha} e^{x'\beta}}]-(1-\delta)t^{\alpha} e^{x'\beta} 我想在使用R时进行优化。我已经尝试过这种方式,但它显示了一个错误 #data: time status x 55 1 1 1 0 1 6 0 0 24
l(parameter)=\sum_{i=1}^{n} \delta log[1-exp{-t^{\alpha} e^{x'\beta}}]-(1-\delta)t^{\alpha} e^{x'\beta}
我想在使用R时进行优化。我已经尝试过这种方式,但它显示了一个错误
#data:
time status x
55 1 1
1 0 1
6 0 0
24 0 0
42 1 0
35 1 1
# log-likelihood
mle.logreg = function(para, data){
alpha <- para[1]
x <- as.matrix(model.matrix(~data$x)[-1])
beta <- as.matrix(rep(para[2],nrow(x)), ncol=1)
delta <- data$status
time <- data$time
l1 <- delta*log(1-exp(-(time^alpha)*exp(t(x)%*%beta)))
l2 <- (1-delta)*((time^alpha)*exp((t(x)%*%beta)))
loglik <- sum(l1-l2)
return(-loglik)
}
fit <- optim(para=c(0.001,0.001),mle.logreg,data=dat1)
我怎样才能解决这个问题?有谁能给我一个解决方案吗?在
optim
调用中,第一个参数para
应该重命名为par
,或者不使用名称。我认为mle.logreg
函数中的变量名也可能有问题。似乎未定义par1
和par
,而未使用alpha
和beta
。我必须更改这些变量的名称(并为par
参数使用正确的名称)才能使其生效。@mvkorpel感谢您提出的宝贵而有效的建议。欢迎使用堆栈溢出!这是一篇相当不错的帖子,尽管我确实解决了一些问题。首先,在问题主体的句子中有一些单词缺失,所以我把它们添加到了问题主体中;它使它更具可读性。其次,我将代码块从错误中分离出来,以便区分它们。最后,我删除了结束语,因为这在阅读问题时会分散注意力。我希望你得到你的答案@PavoDivepar
是optim
中第一个参数的名称。
Error in optim(para = c(0.001, 0.001), mle.logreg, data = dat) :
cannot coerce type 'closure' to vector of type 'double'
In addition: Warning message:
In optim(para = c(0.001, 0.001), mle.logreg, data = dat1) :
one-dimensional optimization by Nelder-Mead is unreliable:
use "Brent" or optimize() directly