r - optim 中的目标函数评估长度为 2 而不是 1

标签 r

我什至不知道我的方程是否正确,但我这样做了,它说 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飞翔:

  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
)

关于r - optim 中的目标函数评估长度为 2 而不是 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61592284/

相关文章:

R/RStudio 慢得令人痛苦

r - 如何创建具有附加功能的 data.frame 子类

r - 使用跨越数年的大型数据集计算 R 中的月平均值

r - 创建在面板数据组内的条件下重新启动的顺序计数器

r - 在 R 中对齐多个时间序列

r - 将 Quantstrat 中的时间范围从每日更改为每周

r - 为什么 parLapplyLB 实际上不平衡负载?

r - 在向量中查找 NA 值的索引

R shiny numericInput 步骤和最小值交互

regex - 使用 gsub 和 regex 提取特定单词