Ошибка в использовании функции optim из-за длины - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь оценить приведенную ниже функцию журнала, используя метод максимального правдоподобия в R, но получаю следующую ошибку:

Ошибка в optim (start, f, method = method, hessian = TRUE, ...): целевая функция в optim оценивает до длины 10, а не 1

Моя попытка была следующей:

Генерация данных

set.seed(101)
n <- 10
u <- runif(n)
theta1 <- 1
lamba1 <- 0.5

Генерация PTIRданные с использованием функции квантиля

x <- function(u, theta1, lamba1) { 
    (-theta1/(log((1+lamba1)-sqrt((1+lamba1)^2-(4*lamba1*u)))/(2*lamba1)))^(1/(2))
}
x <- x(u = u, theta1 = theta1, lamba1 = lamba1)

Объявление функции логарифмического правдоподобия

LL <- function(theta, lamba) { 
    R = suppressWarnings((n*log(2))+
      (n*log(theta))-(((2)+1)*sum(log(x)))-
      (sum(theta/(x^(2))))+
      (log(1+lamba-(2*lamba*exp(-theta/(x^(2)))))))
    return(-R) 
}
mle(LL, start = list(theta = 5, lamba=0.5))

Буду признателен за любой совет.

1 Ответ

0 голосов
/ 25 сентября 2018

Я не знаю, как решить вашу проблему, но, надеюсь, я смогу помочь вам диагностировать ее.Как подсказывает @KonradRudolph в комментариях, это может быть случай, когда обычный совет «добавьте больше скобок, если вы не уверены» может принести больше вреда, чем пользы ... Я переписал вашу функцию так, чтобы она соответствовала вашей ».Мы получили выше, но имеют меньше скобок и более последовательный перенос / отступ.Каждая строка ниже представляет собой отдельный аддитивный термин.Ваша конкретная проблема заключается в том, что последний член включает x (в данном случае имеет длину 10), но не суммируется, поэтому возвращаемое значение в конечном итоге представляет собой вектор длины-10.

LL2 <- function(theta, lambda) {
    R <- n*log(2)+
        n*log(theta)-
        ((2)+1)*sum(log(x))-
        sum(theta/(x^2))+
        log(1+lambda-(2*lambda*exp(-theta/x^2)))
    return(-R)
}

all.equal(LL(1,1),LL2(1,1)) ## TRUE
length(LL2(1,1))  ## 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...