Escolar Documentos
Profissional Documentos
Cultura Documentos
kPodemos tornar mais claro o procedimento de estimação olhando para o gráfico da função.
1
=
o
O código abaixo plota o gráfico danfunção de log-verossimilhança para valores de λ no
1,
λ
�
[
intervalo [0,20]. Note que a função( parece atingir um máximo em torno de 5, 55 o valor
l2 0 do parâmetro. �
verdadeiro
,n
1eixo_lambda, <- seq(0, 20, .001) =
(… 2
2plot(eixo_lambda, 5
-ll_pois(amostra, eixo_lambda), type = "l",
3 xlab =0bquote(lambda), )λ
x ]
k 0 =
! ] 5
) )
4 ylab = bquote("L("~lambda~";"~x[1]~", ... ,"~x[n]~")"),
5 main = "Função log-verossimilhança da Poisson")
6abline(v = 5, col = "indianred")
R
λ
�
Para estimar λ usamos a função optim. É preciso definir algum valor inicial para que o
otimizador numérico comece a procurar pelo máximo global. Em casos mais simples, de
funções globalmente côncavas, esta escolha não apresenta grandes consequências. Em casos
mais complicados, o resultado da estimação pode ser bastante sensível à escolha de valor
inicial porque o otimizador pode cair em máximos/mínimos locais. No final do post discuto
brevemente algumas soluções. Neste exemplo escolho arbitrariamente começar no valor 1. 11
Neste caso também poderíamos usar o fato de que a esperança da Poisson é igual a λ, λ logo,
�
pela Lei dos Grandes Números, a média amostral já deve estar próxima do verdadeiro valor
λ Assim, poderíamos também ter escolhido mean(amostra) como valor inicial.
�
de λ.
1fit <- optim(par = 1, fn = ll_pois, x = amostra,
2 method = "BFGS", hessian = TRUE)
3fit
R
1## $par
2## [1] 4.938
3##
4## $value
5## [1] 2202.837
6##
7## $counts
8## function gradient
9## 34 9
10##
11## $convergence
12## [1] 0
13##
14## $message
15## NULL
16##
17## $hessian
18## [,1]
19## [1,] 202.5112
...
A saída da função traz várias informações técnicas sobre a otimização numérica. A estimativa
4
pontual computada foi de 4.938 - bastante próxima do verdadeiro valor do parâmetro.
.
Usando a função str podemos observar a estrutura do objeto fit criado acima. As principais
9
informações que podemos extrair são as estimativas dos parâmetros fit$par e a hessiana
3
calculada nestes parâmetros fit$hessian.
1str(fit)
8 3
8 R
1## List of 6
2## $ par : num 4.94
3## $ value : num 2203
4## $ counts : Named int [1:2] 34 9
5## ..- attr(*, "names")= chr [1:2] "function" "gradient"
6## $ convergence: int 0
7## $ message : NULL
8## $ hessian : num [1, 1] 203
Usando a estimativa da hessiana podemos computar o erro-padrão da estimativa. Lembre
que a variância assintótica do estimador de máxima verossimilhança é o inverso da matriz de
informação de Fisher que pode ser expressa como o negativo do valor esperado da hessiana.
Isto é, podemos encontrar a variância assintótica calculando o inverso da hessiana (como
fizemos a minimização do negativo da função log-verossimilhança não precisamos calcular o
negativo da hessiana).
1(ep <- sqrt(1/fit$hess))
R
1## [,1]
2## [1,] 0.0702709
Com o erro-padrão podemos calcular intervalos de confiança e estatística t.
1(ic <- c(fit$par - 1.96 * ep, fit$par + 1.96 * ep))
R
1## [,1]
2## [1,] -0.8823045
Usando o pacote optimx
A função optim já é bastante antiga e um novo pacote, chamado optimx, foi criado. A ideia do
pacote é de agregar várias funções de otimização que estavam espalhadas em diversos
pacotes diferentes. As principais funções do pacote são optimx e optimr. Mais informações
sobre o pacote podem ser encontradas aqui.
A sintaxe das funções é muito similar à sintaxe original do optim. O código abaixo faz o mesmo
procedimento de estimação que o acima. Por padrão a função executa dois otimizadores: o
BFGS e Nelder-Mead
1summary(fit <- optimx(par = 1, fn = ll_pois, x = amostra))
R
1## --------------------------------------------
2## Maximum Likelihood estimation
3## Newton-Raphson maximisation, 8 iterations
4## Return code 8: successive function values within relative tolerance limit (reltol)
5## Log-Likelihood: -2202.837
6## 1 free parameters
7## Estimates:
8## Estimate Std. error t value Pr(> t)
9## [1,] 4.93801 0.07452 66.27 <2e-16 ***
10## ---
11## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
12## --------------------------------------------
...
Podemos implementar manualmente o gradiente e a hessiana da função. Neste caso, a
estimativa do parâmetro continua a mesma mas o erro-padrão diminui um pouco. Note que
também podemos fornecer estas informações para a função optimx. Derivando a função de
log-verossimilhança:
∂L(λ;x)∂λ=1λn∑k=1xk−n∂2L(λ;x)∂λ2=−1λ2n∑k=1xk
O código abaixo implementa o gradiente e a hessiana e faz a estimação. O valor estimado
continua praticamente o mesmo, mas o erro-padrão fica menor.
1grad_pois <- function(x, theta) {
2 (1 / theta) * sum(x) - length(x)
3}
4hess_pois <- function(x, theta) {
5 -(1 / theta^2) * sum(x)
6}
7summary(fit2 <- maxLik(ll_pois,
8 grad = grad_pois,
9 hess = hess_pois,
10 start = 1,
11
�(�,�)=12x�� = amostra))
f... 2exp(−(�−�)22�2)
( R
x1## --------------------------------------------
,2## Maximum Likelihood estimation
3## Newton-Raphson maximisation, 7 iterations
θ4## Return code 1: gradient close to zero (gradtol)
5## Log-Likelihood: -2202.837
)6## 1 free parameters
=7## Estimates:
8## Estimate Std. error t value Pr(> t)
�
19##(�� ,�)=12��
[1,] 4.93800 2�−70.27 <2e-16 ***
0.07027
(��−�)22�2
10## ---
(√
11## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
x
2 --------------------------------------------
12##
...
iπ
,σ
Exemplo com a distribuição normal
θ2
)e
=
x
A distribuição normal tem dois parâmetros: μ e σ. μ �
� σ Lembrando que o primeiro indica a média
e1
p o segundo a desvio-padrão. A função de densidade de probabilidade é dada por:
√
(f(x,θ)=2πσ21exp(2σ2−(x−μ)2)
− �
onde θ=(μ,σ).
2 O gráfico abaixo mostra como o formato da função varia conforme o valor
destes =parâmetros. Basicamente, quando a média aumenta, estamos "deslocando para a
π
( (
direita" e quando aumentamos o desvio-padrão estamos "achatando" a distribuição.
σ
x �
2− ,
eμ �
Lembrando
− ) que a função de distribuição de probabilidade da normal para uma observação i�i
σ
)(f(xi,θ)=2πσ21e2σ2−(xi−μ)2
x2
)
iFazendo o produtório da expressão acima para cada ii �
2
−
μ
)σ
2
22
σ
)2
∏�=1��(��,�)=(2��2)−�2exp(−12�2∏�=1�(��−�
L
�
∏(��,�)=−�2ln(2�)−�ln(�)−12�2∑�=1�(��−�)2
)2)
i=1∏Nf(xi,θ)=(2πσ2)−2Nexp(−2σ21i=1∏N(xi−μ)2)
(i
e= agora passando log, temos:
x
1L(xi,θ)=−2Nln(2π)−Nln(σ)−2σ21i=1∑N(xi−μ)2
i
, fMontamos a função log-verossimilhança usando a função dnorm
(θ
1ll_norm <- function(theta) {
2 ll <- dnorm(x, theta[1], theta[2], log = TRUE)
x
3
)4} -sum(ll)
i
=
,
R
−
Vamos �
simular uma amostra aleatória x1,x2,…,x1000 onde �
cada xi segue uma distribuição
θ 331
22 desvio-padrão 3 (i.e., 99 �
normal
N com média 2 e variância 9). i
)Primeiro vamos usar a função optimx ,
2
= �
1# warnings por causa dos valores negativos no log
l( <- rnorm(n = 1000, mean = 2, sd = 3)
2x 2
3(fit <- optimx(par = c(1, 1), fn = ll_norm, method , = "BFGS"))
n
2 R
…
(1##
π p1 ,
p2 value fevals gevals niter convcode kkt1 kkt2 xtime
2
2##
σ
BFGS 2.138082 3.058111 2536.736 47 �20 NA 0 TRUE TRUE 0.004
Note que a função retorna mensagens 1de erro indicando que a função retornou NaNs. Isto
2π
acontece porque o otimizador experimenta 0 valores não-positivos para σ eσ isto não é
�
)admissível pois ln(σ), l 0
que aparece no segundo termo da equação acima, não é definido
−
para σ<0. � Além ndisso, σ não σ
� pode ser igual0 a zero pois ele aparece no denominador do último
N ( 0
N <
2termo à direita da expressão da log-verossimilhança.
0
�
le 00
Intuitivamente isto
)σ
é bastante σ
�
óbvio: σ representa � sua
o desvio-padrão da distribuição e σ2 a
22
x
n
variância: não podemos ter valores negativos ou nulos para estas expressões.
Podemos
)
restringir os valores dos parâmetros usando os argumentos upper e lower para evitar
(p
as mensagens de warning, mas, na prática, isto não costuma fazer diferença no resultado final
(
σ
da estimação. Note que podemos deixar a restrição livre usando Inf e -Inf que correspondem
)−
∞ −
a ∞ e −∞.
1
− ∞
1fit <- optimx(par = c(1, 1),
2
1
2 fn = ll_norm,
3 method = "L-BFGS-B",
σ
2
4 upper = c(Inf, Inf),
5
2σ lower = c(-Inf, 0))
N 6fit
2 R
∏
N
1## p1 p2 value fevals gevals niter convcode kkt1 kkt2
i∑
2## L-BFGS-B 2.138093 3.058112 2536.736 11 11 NA 0 TRUE TRUE
=
3## xtime
i
14## L-BFGS-B 0.002
=
1(
(
x
ix
−
i
μ
−
)
μ
2)
)2
Propriedades dos estimadores de MV
A teoria dos estimadores de máxima verossimilhança nos garante que eles
são consistentes (i.e. que eles aproximam o valor verdadeiro dos parâmetros)
e normalmente assintóticos (a distribuição assintótica segue uma distribuição normal) desde
que algumas condições de regularidade sejam atentdidas.
Podemos demonstrar ambas as propriedades fazendo algumas simulações no R.
Consistência
Vamos montar um experimento simples: simulamos 5000 amostras aleatórias de tamanho
�
1000 seguindo uma distribuição N(2,3); μ �
� σ suas
computamos as estimativas para μ e σ e
( e depois analisamos suas propriedades.
respectivas variâncias assintóticas
2
1.Simular uma amostra segundo uma distribuição.
,
2.Estimata os parâmetros da distribuição.
3
3.Calcula a variância assintótica dos
) estimadores.
4.Repete 5000 vezes os passos 1-3.3
)
O código abaixo implementa exatamente este experimento. Note que a matriz de informação
de Fisher é aproximada pela hessiana.
1r <- 5000; n <- 1000
2estimativas <- matrix(ncol = 4, nrow = r)
3for(i in 1:r) {
4 x <- rnorm(n = n, mean = 2, sd = 3)
5 fit <- optimr(par = c(1, 1), fn = ll_norm, method = "BFGS", hessian = TRUE)
6 # Guarda o valor estimado do parâmetro
7 estimativas[i, 1:2] <- fit$par
8 estimativas[i, 3:4] <- diag(n * solve(fit$hess))
9}
R
�
A consistência dos estimadores θ^MV significa que eles aproximam os valores verdadeiros
^
� medida que aumenta o tamanho da amostra. Isto é, se tivermos uma
do parâmetros θ0 à
00� �
amostra grande N→∞ então podemos ter confiança de que nossos estimadores estão muito
→ verdadeiros �
próximos dos valores V dos parâmetros θ^MV→θ0
�
∞ ^ cada parâmetro - lembrando que μ0 �
O código abaixo calcula a média das estimativas para
∞ M
�
=2 e que σ0=3. Além disso, o histograma das estimativas mostra como as estimativas 0
0 V =
concentram-se em torno do valor verdadeiro do parâmetro
→
(indicado pela linha vertical).
2
1par(mfrow== c(1, 2)) 2
3 dos estimadores de MV �
2# Consistência
3
3mu <- estimativas[, 1]; sigma <- estimativas[, 2] 0θ
4mean(mu) 0
R
Normalmente assintótico
Dizemos que os estimadores de máxima verossimilhança são normalmente assintóticos
porque a sua distribuição assintótica segue uma normal padrão. Especificamente, temos que:
zθ=√N^θMV−θ√Vast→N(0,1)
V
onde Vast é a variância assintótica do estimador. O código abaixo calcula a expressão acima
�
para os dois parâmetros e apresenta o histograma dos dados com uma normal padrão
�
superimposta.
�
t
No loop acima usamos o fato que a matriz de informação de Fisher pode ser estimada pela
hessiana. O código abaixo calcula a expressão acima para os dois parâmetros e apresenta o
histograma dos dados com uma normal padrão superimposta.
1# Normalidade assintótica
2
3# Define objetos para facilitar a compreensão
4mu_hat <- estimativas[, 1]
5sigma_hat <- estimativas[, 2]
6var_mu_hat <- estimativas[, 3]
7var_sg_hat <- estimativas[, 4]
8
9# Centra a estimativa
10mu_centrado <- mu_hat - 2
11sigma_centrado <- sigma_hat - 3
12# Computa z_mu z_sigma
13mu_normalizado <- sqrt(n) * mu_centrado / sqrt(var_mu_hat)
14sigma_normalizado <- sqrt(n) * sigma_centrado / sqrt(var_sg_hat)
...
R
1## $par
2## [1] 618.6792 962.0739
3##
4## $value
5## [1] 7984.993
6##
7## $counts
8## function gradient
9## 107 100
10##
11## $convergence
12## [1] 1
13##
14## $message
15## NULL
16##
17## $hessian
18## [,1] [,2]
19## [1,] 0.001070703 -0.0013531007
20## [2,] -0.001353101 0.0001884928
...
� � Uma das
Note que as estimativas estão muito distantes dos valores corretos μ=15 e σ=4.
= como
soluções, já mencionada acima, é de usar os momentos da distribuição = valores iniciais.
1 � � 4
μ σ
O código abaixo usa os momentos empíricos como valores inicias para μ e σ:
5 4
μinicial=1nn∑i=1xiσinicial= ⎷1nn∑i=1(xi−μinicial)2 5
1(chute_inicial <- c(mean(x), sqrt(var(x))))
R
Aplicações
•Estimando um modelo de mínimos quadrados por máxima verossimilhança
•Estimando um logit por máxima verossimilhança
•Estimando uma regressão de Poisson usando MV
•Aproximando distribuições por máxima verossimilhança