Contextualizando:


Escrevemos a verossimilhança, \(L_{i}(\theta_{i} ; y_{ij})\)),da seguinte maneira

\[ \begin{align*} L_{i}(\theta_{i} ; y_{ij}) & = \int f(y_{i} | b_{i}) \cdot f(b_{i}) {\rm d}b_{i} \\ & = \int \prod_{j = 1}^{5} \frac{e^{\mu_{i} + b_{i}} (\mu_{i} + b_{i})^{y_{ij}}}{y_{ij}!} \cdot \frac{1}{\sqrt{2 \pi \sigma^{2}}} {\rm exp}\left\{-\frac{1}{2 \sigma^{2}} b_{i}^{2}\right\} \\ & = \int g(b_{i}) {\rm d}b_{i} \\ & = \int e^{\text{log} g(b_{i})} {\rm d}b_{i} \\ & = \int e^{Q(b_{i})} {\rm d}b_{i} \end{align*} \]

Lembrando que \(\theta\) representa os parâmetros \(\mu_{i}\) e \(\sigma^{2}\).

Utilizando a aproximação de Laplace expandimos \(Q(b_{i})\) numa série de Taylor de segunda ordem


Expansão de uma função numa série de Taylor de 2a ordem:

\[ f(x) \cong f(x_{0}) + (x - x_{0}) {f}'(x_{0}) + \frac{1}{2} (x - x_{0})^{2} {f}''(x_{0}) \]


\[ \begin{align*} L_{i}(\theta_{i} ; y_{ij}) & = \int e^{Q(\hat{b}_{i}) + (b_{i} - \hat{b}_{i}) \underset{0}{\underbrace{{Q}'(\hat{b}_{i})}} + \frac{1}{2} (b_{i} - \hat{b}_{i})^{2} {Q}''(\hat{b}_{i})} {\rm d}b_{i} \\ & = e^{Q(\hat{b}_{i})} \int {\rm exp}\left\{\frac{1}{2} \frac{(b_{i} - \hat{b}_{i})^{2}}{({Q}''(\hat{b}_{i}))^{-1}}\right\} {\rm d}b_{i} \\ & = e^{Q(\hat{b}_{i})} \int {\rm exp}\left\{-\frac{1}{2} \frac{(b_{i} - \hat{b}_{i})^{2}}{|{Q}''(\hat{b}_{i})^{-1}|}\right\} {\rm d}b_{i} \\ & = e^{Q(\hat{b}_{i})} \int \frac{\sqrt{2 \pi |{Q}''(\hat{b}_{i})^{-1}|}}{\sqrt{2 \pi |{Q}''(\hat{b}_{i})^{-1}|}} {\rm exp}\left\{-\frac{1}{2} \frac{(b_{i} - \hat{b}_{i})^{2}}{|{Q}''(\hat{b}_{i})^{-1}|}\right\} {\rm d}b_{i} \\ & = \frac{e^{Q(\hat{b}_{i})} \sqrt{2 \pi}}{|{Q}''(\hat{b}_{i})^{1/2}|} \underset{1}{\underbrace{\int \frac{1}{\sqrt{2 \pi \underset{\sigma^{2}}{\underbrace{|{Q}''(\hat{b}_{i})^{-1}|}}}} {\rm exp}\left\{-\frac{1}{2} \frac{(b_{i} - \hat{b}_{i})^{2}}{|{Q}''(\hat{b}_{i})^{-1}|}\right\} {\rm d}b_{i}}} \\ & = \frac{e^{Q(\hat{b}_{i})} \sqrt{2 \pi}}{|{Q}''(\hat{b}_{i})|^{1/2}} \cong L_{i}(y_{ij} ; b_{i}) \end{align*} \]


Código:


Definições e carregamentos

rm(list = ls())
pkg <- c("latticeExtra", "lme4", "car", "htmlTable")
sapply(pkg, require,
       character.only = TRUE)
Loading required package: car
latticeExtra         lme4          car    htmlTable 
        TRUE         TRUE         TRUE         TRUE 

Simulando dados

\[ \mu = 2 \quad {\rm e} \quad \sigma^{2} = 1 \]

rdata <- function(parameters, i, j,
                  seed = 22){
  set.seed(seed)
  b <- rnorm(i, 0, parameters[2])
  lambda <- exp(parameters[1] + b)
  y <- rpois(i * j, lambda)
  data <- data.frame(y = y,
                     id = 1:i)
  data <- data[order(data$id), ]
  data$b <- rep(b,
                each = j)
  rownames(data) <- NULL
  return(data)} ; da <- rdata(c(2, 1), 10, 5)


Implementando a aproximação de Laplace

\[ {\rm log}\frac{e^{Q(\hat{b}_{i})} \sqrt{2 \pi}}{|{Q}''(\hat{b}_{i})|^{1/2}} = Q(\hat{b}_{i}) \frac{1}{2} {\rm log} 2 \pi -\frac{1}{2} {\rm log}|{Q}''(\hat{b}_{i})|^{1/2} \cong l_{i}(y_{ij} ; b_{i}) \]

laplace <- function(fun, ...){
  est <- optim(par = 0,
               fn = fun, ...,
               method = "BFGS",
               control = list(fnscale = -1),
               hessian = TRUE)
  ll.log <- est$value * .5 * log(2*pi) - .5 * determinant( -est$hessian)$modulus
  return(ll.log)}

Implementando \(Q(b_{i})\)

qdeb <- function(b, parameters, data){
  lambda <- exp(parameters[1] + b)
  q.est <- sum(dpois(data,
                     lambda = lambda,
                     log = TRUE)) + dnorm(b,
                                          mean = 0,
                                          sd = exp(parameters[2]),
                                          log = TRUE)
  return(q.est)}

Implementando a função de log verossimilhança

loglik <- function(parameters, data){
  data.group <- split(data, data[[2]])
  lap.est <- c()
  for(i in 1:length(data.group)){
    lap.est[i] <- laplace(fun = qdeb,
                          parameters = parameters,
                          data = data.group[[i]]$y)}
  ll <- sum(lap.est)
  # print(c(ll, parameters))
  return(ll)}

Estimando os parâmetros

est <- optim(par = c(log(mean(da$y)), log(1)),
             fn = loglik,
             data = da,
             method = "BFGS",
             control = list(fnscale = -1),
             hessian = TRUE)

Fazendo o mesmo com a função ‘pronta’ do pacote lme4

model <- glmer(y ~ 1|id,
               family = poisson(link = "log"),
               data = da)

Tabela com a comparação das estimativas, no caso de \(\sigma^{2}\) é valor predito

Implementação   lme4
μ (se) σ2 (se) log verossimilhança   μ (se) σ2 (se) log verossimilhança
2.4568 (0.2365) 0.9659 (0.0564) -157.5892   2.4558 (0.3141) 0.9627 ( - ) -160.4925
† Erro padrão (standard error)

E quando aumentamos o tamanho da base de dados?

Digamos, 50 indivíduos e 10 repetições pra cada

Implementação   lme4
μ (se) σ2 (se) log verossimilhança   μ (se) σ2 (se) log verossimilhança
2.1156 (0.1428) 1.05 (0.033) -1274.7192   2.1164 (0.146) 1.0473 ( - ) -1331.4171
† Erro padrão (standard error)