Capítulo 14 Estimador de Maxima Verossimilhanca
14.1 Distribuição não condicional
**Distribuição Normal
\(l = -0.5 n ln(2\pi) - 0.5nln(\sigma^2) - \frac{1}{2\sigma^2} \sum_i (y_i-\mu)^2\)
1º passo: definir a função de log-verossimilhança
normal = function(theta,y){
mu = theta[1]
sigma2= theta[2]
n = nrow(y)
logl = -.5*n*log(2*pi) - .5*n*log(sigma2) - (1/(2*sigma2))*sum((y-mu)^2)
return(-logl)
}2º passo: extrair uma amostra aleatória da distribuição normal
n = 1000
y = data.frame(rnorm(n,10,5))3º passo: encontrar os valores dos parâmetros que maximizam a função
par = optim(c(0,1),normal,y=y,method="BFGS")## Warning in log(sigma2): NaNs produzidos
## Warning in log(sigma2): NaNs produzidos
## Warning in log(sigma2): NaNs produzidos
## Warning in log(sigma2): NaNs produzidos
## Warning in log(sigma2): NaNs produzidos
## Warning in log(sigma2): NaNs produzidos
par$par## [1] 10.03299 26.03589
14.2 Distribuição Condicional
**Modelo linear
\(f(y|x) = \frac{1}{(2\pi\sigma^2)^{1/2}} exp (-\frac{1}{2\sigma^2}(y-x'\beta)^2)\)
ols.lf<-function(theta,y,X){
n<-nrow(X)
k<-ncol(X)
beta<-theta[1:k]
sigma2<-theta[k+1]
e<- y-X%*%beta
logl<- -(n/2)*log(2*pi*sigma2) - ((t(e)%*%e)/(2*sigma2))
return(-logl)
}n = 1000
X<-cbind(1,runif(n))
theta.true<-c(2,3,1)
y<-X%*%theta.true[1:2] + rnorm(n,0,theta.true[3])p<-optim(c(1,1,1),ols.lf,method="BFGS",hessian=T,y=y,X=X)## Warning in log(2 * pi * sigma2): NaNs produzidos
## Warning in log(2 * pi * sigma2): NaNs produzidos
## Warning in log(2 * pi * sigma2): NaNs produzidos
## Warning in log(2 * pi * sigma2): NaNs produzidos
## Warning in log(2 * pi * sigma2): NaNs produzidos
## Warning in log(2 * pi * sigma2): NaNs produzidos
## Warning in log(2 * pi * sigma2): NaNs produzidos
p$par## [1] 2.0027331 3.0270868 0.9925956
OI<-solve(p$hessian)
OI## [,1] [,2] [,3]
## [1,] 3.917773e-03 -5.897796e-03 1.446704e-11
## [2,] -5.897796e-03 1.189125e-02 -1.975390e-11
## [3,] 1.446704e-11 -1.975390e-11 1.970483e-03
se<-sqrt(diag(OI))
se## [1] 0.06259211 0.10904699 0.04439012
t = p$par/se
pval = 2*(1-pt(abs(t),nrow(X)-ncol(X)))
results = cbind(p$par,se,t,pval)
colnames(results) = c("b","se","t","p")
rownames(results) = c("Const","X1","Sigma2")
print(results,digits=3)## b se t p
## Const 2.003 0.0626 32.0 0
## X1 3.027 0.1090 27.8 0
## Sigma2 0.993 0.0444 22.4 0
B = solve(t(X)%*%X)%*%t(X)%*%y
B## [,1]
## [1,] 2.002733
## [2,] 3.027087
e_hat = y - X%*%B
k = ncol(X)
sigma_hat = (1/(n-k)) * t(e_hat)%*%e_hat # n-k correção de viés
sigma_hat## [,1]
## [1,] 0.9945841
e_hat = y - X%*%B
k = ncol(X)
sigma_hat = (1/(n)) * t(e_hat)%*%e_hat # n-k correção de viés
sigma_hat## [,1]
## [1,] 0.992595
V = sigma_hat[1,1] * solve(t(X)%*%X)
V ## [,1] [,2]
## [1,] 0.003917770 -0.005897792
## [2,] -0.005897792 0.011891237
ep = sqrt(diag(V))
ep## [1] 0.06259209 0.10904695
t = B / ep
t## [,1]
## [1,] 31.99658
## [2,] 27.75948
2 * (1 - pt(abs(t), df = n-k))## [,1]
## [1,] 0
## [2,] 0