Professional Documents
Culture Documents
GUION
3 (1a parte)
1. Estimaci
on de m
axima verosimilitud para una distribuci
on gamma
La distribuci
on gamma de par
ametros > 0 y > 0, (, ), tiene funcion de densidad
f (x; , ) =
1
x1 ex/ ,
()
donde
Z
() =
0 < x < ,
t1 et dt
es la funci
on gamma.
El parametro se denomina par
ametro de forma porque es el que determina el grado de asimetra
V(X) = 2 .
La distribuci
on gamma se utiliza en diversos contextos: fiabilidad, analisis de supervivencia,
gestion de riesgos, hidrologa, . . . Sirve, por ejemplo, para modelizar el coste economico que
supone una reclamaci
on para una compa
na de seguros, el volumen de precipitacion (de lluvia)
mensual en una localizaci
onel tiempo de vida u
til de un componente o de una maquinaria, . . .
Comprobar (en casa) que la funci
on de logverosimilitud de la (, ) es
log L(, ) = n log () n log + ( 1)
n
X
i=1
n
1X
xi ,
log xi
(1)
i=1
0 ()
log L(, ) = n
n log +
log xi
()
i=1
!
n
1
1X
log L(, ) =
n +
xi .
0=
0=
(2)
(3)
i=1
Pn
i=1 xi /n
(4)
n
X
log xi ,
(5)
i=1
donde
d
0 ()
() :=
log () =
=
d
()
Z
0
t
e
et
t
1 et
dt
es la llamada funci
on digamma.
Observemos que es imposible obtener una expresion explcita para
, el e.m.v. de , que es raz
de la ecuaci
on (5). Pero s podemos aproximar el valor de
por metodos numericos. Denotemos
g() = n() n log x
+ n log +
n
X
i=1
log xi ,
La funcion 0 es la funci
on trigamma. Tanto como 0 estan implementadas en R. Se puede
tomar como valor inicial de la iteracion el estimador de por el metodo de los momentos
0 = x
2 /s2 .
Se puede probar el procedimiento ejecutando el script Practica3Script1.R. En la funci
on
GammaNewton.R se ha programado la sucesion (6). La funcion emvalphaGamma.R calcula el e.m.v.
del parametro .
> source(GammaNewton.R)
> source(emvalphaGamma.R)
> source(Practica3Script1.R)
Practica3Script1.R
n = 50
alpha = 5
beta = 2
X = rgamma(n,shape=alpha,scale=beta)
m = mean(X)
emvalpha = emvalphaGamma(X)
emvbeta = m/emvalpha
writeLines(paste(n =,n))
writeLines(paste(alpha =,alpha, e.m.v.(alpha) =,round(emvalpha,digits=4)))
writeLines(paste(beta =,beta, e.m.v.(beta) =,round(emvbeta,digits=4)))
emvalphaGamma.R
emvalphaGamma = function(muestra){
# Calcula el e.m.v. del parametro alpha de una Gamma
m = mean(muestra)
v = var(muestra)
alpha0 = m^2/v # punto de inicio = estimador de los momentos
error = 1
while(error>1E-4){
alpha1 = GammaNewton(muestra,alpha0)
error = abs(alpha1-alpha0)
alpha0 = alpha1
}
alpha1
}
GammaNewton.R
GammaNewton = function(muestra,alpha0){
# Sucesion que converge al e.m.v. del parametro alpha de la gamma
m = mean(muestra)
mlog = mean(log(muestra))
alpha1 = alpha0 *(1+(digamma(alpha0)+log(m/alpha0)-mlog)/(1-alpha0*
trigamma(alpha0)))
}