целевая функция в optim оценивает до длины 2, а не 1 - PullRequest
0 голосов
/ 04 мая 2020

Я даже не знаю, верно ли какое-либо из моих уравнений, но я сделал это, и в нем говорится, что целевая функция в optim вычисляет до длины 2, а не 1. Я пытаюсь оценить лямбду и альфа, используя mle и log правдоподобие.

#parameter estimation for lambda and alpha
set.seed(1001)
q<-1:5000
mean(q)
sd(q)
ll<-function(lambda=0.5,alfa=3.5){n<-5000;
(-n)*alfa*log(lambda)+n*log(gamma(alfa))-((alfa-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 
)

1 Ответ

0 голосов
/ 04 мая 2020

Есть несколько мест, чтобы заставить 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
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...