In [1]:
# rm(list=ls()) 
options(OutDec = ",")
#==============================================================================
# Exemplo:
#     Regressao linear intrinseca.
#==============================================================================
# Analise: Dados artificiais do modelo gama
#==============================================================================
library(MASS)
dataxy      <- read.table("../dados/d10_reg_lin_intrinseca.txt",header=T)
y           <- dataxy[,2]
x           <- dataxy[,3]
n           <- length(y)
In [2]:
#==============================================================================
# Ajuste da Regressaom Linear Intrinseca por Minimos Qadrados
#==============================================================================
fitymq  <- lm(y ~ x)
rhomq   <- as.vector(fitymq$coef[2])
betamq  <- as.vector(fitymq$coef[1]/fitymq$coef[2])  # b_1/ b_2
bcov    <- matrix(vcov(fitymq),2,2,T)
sdrho   <- sqrt(bcov[2,2]) # erro padrao do rho  (EMQ)
# Aplicacao do metodo delta para estimar a variancia de beta

# Erro padrao do beta (EMQ)
sdbeta  <- as.vector(sqrt(bcov[1,1]/(fitymq$coef[2]^2) 
         + (fitymq$coef[1]^2)*bcov[2,2]/(fitymq$coef[2]^4)
         - 2*fitymq$coef[1]*bcov[1,2]/(fitymq$coef[2]^3))) 
print(c(rhomq,sdrho))
print(c(betamq,sdbeta))
[1] 2,426104 1,591482
[1] -1,707724  8,689001
In [3]:
#==============================================================================
# Estimacao por Maxima Verossimilhanca
#==============================================================================
# Analisando para rho: (beta fixo). Podemos pular esta parte.
#==============================================================================
myfrho  <- function(rho,x,y,beta){
    n   <- length(y)
    out <- -(-rho*sum(log(beta+x))-n*lgamma(rho)
           +(rho-1)*sum(log(y))-sum(y/(beta+x)))
    return(out)
}
fitrho <- optimize(myfrho,lower=0,upper=100,x=x,y=y,beta=-4.7198)
print(fitrho)
$minimum
[1] 3,151288

$objective
[1] 82,91605

In [4]:
#==============================================================================
# Analisando para beta: (rho fixo). Podemos pular esta parte.
#==============================================================================
myfbeta <- function(beta,x,y,rho){
    n   <- length(y)
    out <- -(-rho*sum(log(beta+x))-n*lgamma(rho)
           +(rho-1)*sum(log(y))-sum(y/(beta+x)))
    return(out)
}
fitbeta <- optimize(myfbeta,lower=max(-x),upper=100,x=x,y=y,rho=3.151)
print(fitbeta)
$minimum
[1] -4,718759

$objective
[1] 82,91605

In [5]:
#==============================================================================
# Estimacao por Maxima Verossimilhanca: rho e beta 
# Estamos na verdade minimizando o negativo da verossimilhanca
#==============================================================================
myf <- function(w,x,y){
    rhox  <- w[1]
    betax <- w[2]
    n     <- length(y)
    out   <- -(-rhox*sum(log(betax+x))-n*lgamma(rhox)
             +(rhox-1)*sum(log(y))-sum(y/(betax+x)))
    return(out)
}
fityx    <- optim(c(rhomq,betamq),myf,x=x,y=y,lower=c(0,max(-x)), 
                     method="L-BFGS-B",hessian=T)
print(fityx)
H        <- matrix(NA,2,2)
H[1,1]   <- -n*trigamma(fityx$par[1])
H[2,2]   <- ( fityx$par[1]*sum(1/((fityx$par[2]+x)^2))
            -2*sum(y/((fityx$par[2]+x)^3)))
H[1,2]   <- -sum(1/(fityx$par[2]+x))
H[2,1]   <- H[1,2]
V        <- solve(-H)
G        <- solve(fityx$hessian)
sdrhomv  <- sqrt(V[1,1]) # erro padrao do rho  (EMV)
sdbetamv <- sqrt(V[2,2]) # erro padrao do beta (EMV)
rhomv    <- fityx$par[1]
betamv   <- fityx$par[2]
print(c(rhomv,sdrhomv,sqrt(G[1,1])))
print(c(betamv,sdbetamv,sqrt(G[2,2])))
$par
[1]  3,150896 -4,718504

$value
[1] 82,91605

$counts
function gradient 
      13       13 

$convergence
[1] 0

$message
[1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"

$hessian
         [,1]     [,2]
[1,] 7,459183 2,241969
[2,] 2,241969 0,855704

[1] 3,1508965 0,7942620 0,7942616
[1] -4,718504  2,345026  2,345025