Больше проблем с MLE

Я занимаюсь исследовательской работой и новичок в R. Я задал аналогичный вопрос (размещен здесь: MLE Проблемы). Я решил первоначальную проблему, но я столкнулся с другими проблемами с этой функцией.

Я все еще использую эту функцию для оценки тета[i],введите здесь описание изображения где все остальные переменные в настоящее время известны.

Ниже мой код:

  maxParam <- function(theta) {
    logl <- sum(for (i in 1:length(doses)) {
      sum(
        for (j in 1:LITTERS.M) {
          sum(
            for (k in 0:(litterResponses[i,j]-1)) {
              sum(log10(probabilityResponses[i] + k * theta[i]))
            }
            +
            for (k in 0:(litterSizes[i,j]-litterResponses[i,j]-1)) {
              sum(log10(1 - probabilityResponses[i] + k * theta[i]))
            }
            -
            for (k in 0:(litterSizes[i,j] - 1)) {
              sum(log10(1 + k * theta[i]))
            }
          )
        }
      )
    })

    return (-logl)
  }

  mle.fit <- mle(maxParam, start=list(theta=c(1,1,1,1,1,1)))
  print(mle.fit)

Ошибка, которую я выбрасываю:

Ошибка: отсутствует аргумент "тета" без значения по умолчанию.

Прошу прощения, если ошибка глупая, я мало знаю R.

Примечания. Я использую вектор (1,1,1,1,1,1) в качестве теста на тета. Это не актуальные данные. Дозы - это вектор из 6, который соответствует уровням доз сыворотки. Реакция на помет представляет собой матрицу, описывающую реакцию на сыворотку на дозу на помет. LitterSizes — это матрица, описывающая размер помета на дозу в помете. ПОМЕТЫ.М — исходное количество пометов, контактировавших с сывороткой. ProbabilityResponses — это вектор, описывающий вероятность того, что данная мышь будет поражена сывороткой.


r mle
person DanSchneiderNA    schedule 24.11.2015    source источник
comment
Из какого пакета исходит функция mle? Взгляните на его файл справки.   -  person JACKY Li    schedule 24.11.2015
comment
Это входит в статистику4. Я знаю, что мне нужна функция логарифмической функции правдоподобия. Я считаю, что ошибка в моей функции. Я просто не знаю, что я делаю неправильно.   -  person DanSchneiderNA    schedule 24.11.2015
comment
Я не могу заставить свою функцию работать в mle. Я знаю, что мне нужно сделать для функции mle.   -  person DanSchneiderNA    schedule 24.11.2015


Ответы (2)


Функция mle не принимает вектор начальных начальных значений. Каждый параметр, который должен быть найден оптимизацией, должен быть передан как скаляр. Достаточно изменить объявление вашей функции на:

maxParam <- function(theta_1 = 1, theta_2 = 1, etc) {
    theta <- unlist(as.list(environment()))

    ... # rest of function follows
  }

где etc означает заменить это на theta_3 = 1, theta_4 = 1 по мере необходимости. Затем функцию mle можно вызвать с помощью:

mle.fit <- mle(maxParam)
person Alex    schedule 15.09.2016

У меня была такая же проблема некоторое время назад. mle не принимает векторные параметры, в отличие от mle2. Посмотрите на это.

person kosa    schedule 24.10.2016