我什至不知道我的方程是否正确,但我这样做了,它说 optim 中的目标函数计算的长度为 2 而不是 1。我正在尝试使用 mle 和对数似然来估计 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
飞翔:
- 您应该将
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
)
关于r - optim 中的目标函数评估长度为 2 而不是 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61592284/