Оценка максимального правдоподобия для биномиальных данных
Мне нужно найти оценку максимального правдоподобия для вектора биномиальных данных.
один такой:
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
Я получаю некоторый результат, но также и сообщения об ошибках, которые NaN
s производятся, и функция не может быть оценена по начальным параметрам. Я построил его на примере, который работает с нормально распределенными данными, и считаю, что допустил ошибку при преобразовании.
Вот оригинальный код, который я получил:
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)
...