Оценка максимального правдоподобия для биномиальных данных

Мне нужно найти оценку максимального правдоподобия для вектора биномиальных данных.

один такой:

binvec <- rbinom(1000, 1, 0.5)

Я попытался сначала создать функцию, а затем оптимизировать ее optim(),

llbinom <- function(theta, x) {return(sum(dbinom(x=x,
               size = theta[1],
               prob = theta[2],log=TRUE)))}
mybin <- optim(c(0.5,0.5),fn=llbinom,x=binvec)
mybin

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

Вот оригинальный код, который я получил:

ll <- function(theta,x) {return(-sum(dnorm(x=x,
   mean=theta[1],sd=theta[2],log=TRUE)))}
mle <- optim(c(5,3),fn=ll,x=binvec)

1 ответ

Решение

Несколько вопросов здесь.

  • Похоже, вы пропустили отрицательный знак (optim() сворачивается по умолчанию, если вы не установите параметр управления fnscale=-1, поэтому вам нужно определить отрицательную логарифмическую функцию)
  • size параметр должен быть целым числом
  • необычно и технически сложно оценить size параметр из данных (это часто делается с использованием моделей N-смеси, если вы хотите ознакомиться с техникой: например, см. unmarked пакет); обычно число испытаний считается известным. Так что я бы попробовал
llbinom <- function(theta, x) {return(
   -sum(dbinom(x=x,
               size = 1,
               prob = theta[1],log=TRUE)))}
mybin <- optim(c(0.5),fn=llbinom,x=binvec)

Есть много причин сделать это трудным путем (численно); если вам действительно нужно только найти MLE вероятности одного биномиального образца x (независимые наблюдения с одинаковой вероятностью успеха из s испытания), аналитическое решение sum(x)/sum(s)...

Другие вопросы по тегам