optim中的目标函数的长度为2而不是1

  • 本文关键字:目标 函数 optim r
  • 更新时间 :
  • 英文 :


我甚至不知道我的方程是否正确,但我做到了,它说optim中的目标函数的长度为2而不是1。我正在尝试使用mle和log似然来估计lambda和alfa。

set.seed(1001)
q <- 1:5000
mean(q)
sd(q)
ll <- function(lambda = 0.5, alpha = 3.5) {
n <- 5000
(-n) * alpha * log(lambda) + 
n * log(gamma(alpha)) - ((alpha - 1) * sum(log(q))) + 
lambda * sum(q)
}

MLE <- optim(c(0.5, 3.5),
fn = ll,
method = "L-BFGS-B",
lower = 0.00001,
control = list(fnscale = -1),
hessian = T
)

有几个地方可以让你的optim飞起来:

  1. 您应该将ll定义为一个参数的函数(而不是两个参数,否则您将出现错误"optim中的目标函数计算长度为2而不是1"(,因为在optim中,您的初始值x0将传递给目标函数fn
ll<-function(x){
n<-5000
lambda <- x[1]
alfa <- x[2]
(-n)*alfa*log(lambda)+n*log(gamma(alfa))-((alfa-1)*sum(log(q)))+lambda*sum(q)
}
  • optim中,下界lower的维数应该与x0相同,例如
MLE = optim(c(0.5,3.5), 
fn = ll, 
method = "L-BFGS-B", 
lower = c(1e-5,1e-5), 
control = list(fnscale = -1), 
hessian = FALSE
)

最新更新