用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感谢您提出的宝贵而有效的建议。欢迎使用堆栈溢出!这是一篇相当不错的帖子,尽管我确实解决了一些问题。首先,在问题主体的句子中有一些单词缺失,所以我把它们添加到了问题主体中;它使它更具可读性。其次,我将代码块从错误中分离出来,以便区分它们。最后,我删除了结束语,因为这在阅读问题时会分散注意力。我希望你得到你的答案@PavoDive
par
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