Я пытаюсь написать свою собственную функцию, чтобы понять, как распределение Пуассона ведет себя в рамках оценки максимального правдоподобия (применительно к GLM).
Я знаком с удобной функцией glm
в R, но хотел попробовать вручную свернуть некоторый код, чтобы понять, что происходит:
n <- 10000 # sample size
b0 <- 1.0 # intercept
b1 <- 0.2 # coefficient
x <- runif(n=n, min=0, max=1.5) # generate covariate values
lp <- b0+b1*x # linear predictor
lambda <- exp(lp) # compute lamda
y <- rpois(n=n, lambda=lambda) # generate y-values
dta <- data.frame(y=y, x=x) # generate dataset
negloglike <- function(lambda) {n*lambda-sum(x)*log(lambda) + sum(log(factorial(y)))} # build negative log-likelihood
starting.vals <- c(0,0) # one starting value for each parameter
pars <- c(b0, b1)
maxLike <- optim(par=pars,fn=negloglike, data = dta) # optimize
Мой вывод R, когда я ввожу maxLike
, выглядит следующим образом:
Error in fn(par, ...) : unused argument (data = list(y = c(2, 4....
Я предполагаю, что неправильно указал optim
в своей функции, но я недостаточно знаком с основами MLE или оптимизацией с ограничениями, чтобы понять, чего мне не хватает.
negloglike <- function(lambda) {n*lambda-sum(data$x)*log(lambda) + sum(log(factorial(data$y)))}
. Рассмотрим такжеdpois(...,log=TRUE)
иbbmle::mle2
. - person Ben Bolker   schedule 04.10.2014