2015-11-24 7 views
2

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

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

Ниже мой код:

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) 

Ошибки я бросаю это:

Error: argument "theta" is missing, with no default

Я извиняюсь, если ошибка глупо, у меня мало знаний о Р.

Примечания: Я использую вектор (1,1,1,1,1,1) в качестве теста для тета. Это не фактические данные. Дозы представляют собой вектор 6, соответствующий уровням дозы сыворотки. Ответы помета - это матрица, которая описывает ответы на сыворотку на дозу на мусор. LitterSizes - это матрица, которая описывает размер подстилки на дозу на мусор. LITTERS.M - это начальное количество пометов, вступающих в контакт с сывороткой. ProbabilityResponses - это вектор, который описывает вероятность того, что данная мышь будет затронута сывороткой.

+1

Какой пакет выполняет функция 'mle'? Взгляните на файл справки. –

+0

Входит в статистику4. Я знаю, что функция mle требует функции правдоподобия журнала. Я считаю, что ошибка в моей функции. Я просто не знаю, что я делаю в этом неправильно. –

+0

Я не могу заставить свою функцию работать в mle. Однако я знаю, что мне нужно делать для функции mle. –

ответ

3

Функция 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) 
1

Я была такая же проблема некоторое время назад. mle не принимает параметры вектора, где mle2 делает. Have look at this.