Estimación máximo verosímil en R...Estimación máximo verosímil en R Carlos René Flores...

8
Estimación máximo verosímil en R Carlos René Flores Mendive En algunos casos no existen fórmulas explícitas para los estimadores máximos verosímiles por lo que la maximización de la verosimilitud (o log-verosimilitud) debe hacerse mediante software. Ejemplo verosimilitud uniforme Primero veamos el siguiente ejemplo en donde se genera una muestra aleatoria de una distribución uniforme y se grafica la verosimilitud. El comando set.seed se usa para obtener siempre la misma muestra. El comando runif genera una muestra aleatoria de U nif (0= 4) set.seed(789) m<-100 y<-runif(m,min = 0,max = 4) hist(y,probability =T)###hist de densidad Histogram of y y Density 0 1 2 3 4 0.00 0.10 0.20 0.30 Recordando que la verosimilitud de una muestra aleatoria de tamaño n de U nif (0) es L(θ|x )= 1 θ n * (0,) (x (1) ) * (-∞) (x (n) ) declaramos ésta función en R y graficamos. Al declarar la función de verosimilitud en el siguiente código notamos que se multiplica por el valor lógico (t>max(y)) lo cual hará la función de (-∞) (x (n) ). lu<-function(t){ (1/(t^m))*(t>max(y)) } 1

Transcript of Estimación máximo verosímil en R...Estimación máximo verosímil en R Carlos René Flores...

Estimación máximo verosímil en RCarlos René Flores Mendive

En algunos casos no existen fórmulas explícitas para los estimadores máximos verosímiles por lo que lamaximización de la verosimilitud (o log-verosimilitud) debe hacerse mediante software.

Ejemplo verosimilitud uniformePrimero veamos el siguiente ejemplo en donde se genera una muestra aleatoria de una distribución uniformey se grafica la verosimilitud. El comando set.seed se usa para obtener siempre la misma muestra. El comandorunif genera una muestra aleatoria de Unif(0, θ = 4)set.seed(789)m<-100y<-runif(m,min = 0,max = 4)hist(y,probability =T)###hist de densidad

Histogram of y

y

Den

sity

0 1 2 3 4

0.00

0.10

0.20

0.30

Recordando que la verosimilitud de una muestra aleatoria de tamaño n de Unif(0, θ) es L(θ|x) = 1θn ∗

1(0,∞)(x(1))∗1(−∞,θ)(x(n)) declaramos ésta función en R y graficamos. Al declarar la función de verosimilituden el siguiente código notamos que se multiplica por el valor lógico (t>max(y)) lo cual hará la función de1(−∞,θ)(x(n)).lu<-function(t){

(1/(t^m))*(t>max(y))}

1

curve(lu,xlim=c(max(y)-0.05,max(y)+.3),main="Verosimilitud uniforme",lwd=2,xlab=expression(theta),ylab = expression(paste("L(",theta,")")))

abline(v=max(y),col="light green",lwd=10)

3.95 4.00 4.05 4.10 4.15 4.20 4.25 4.30

0e+

002e

−61

4e−

616e

−61

Verosimilitud uniforme

θ

L(θ)

En este caso conocemos explícitamente el estimador máximo verosímil que es igual a la máxima estádísticade orden, el cual está señalado con la línea verde.

Ejemplo Normal con media y varianza desconocidasEn el caso de una muestra aleatoria de N(µ, σ2) la log-verosimilitud está dada por:

logL(µ, σ2|x) = −n2 log(2π)− n

2 log(σ2)− 12

n∑i=1

(xi − µ)2/σ2

En R:set.seed(157)n<-200x<-rnorm(n,2,3)##la muestra es de una normal con media 2 y desviación estándar 3logv<-function(m,s){##log-verosimilitud

-((n/2)*log(2*pi))-((n/2)*log(s))-((1/(2*s))*sum((x-m)^2))### en este caso s denota a sigma cuadrada

}

Al graficar la log-verosimilitud obtenemos una superficie en R3. Para graficar una superficie en R se requiereinstalar y cargar el paquete plot3D, posteriormente debemos definir una red de puntos en el dominio de la

2

verosimilitud, en este caso en R× R+, y calcular el valor de la función (logv) en cada punto de la red. Loanterior se hace con la función outer como se muestra a continuación:##install.packages("plot3D")library(plot3D)mg<-mean(x)##xbarras2g<-sum((x-mg)^2)/n##maximo verosímil para sigma cuadrada

x1=seq(-10,10,length.out = 200)## partición de 200 putos entre -10 y 10x2=seq(0,20,length.out = 200)## partción de 200 puntos entre 0 y 20persp3D(x=x1,y=x2,z=outer(x1,x2,logv),theta = 65, phi = 30,expand = 1)scatter3D(x=mg,y=s2g,z=logv(mg,s2g),add=T,pch=19,cex=1.5,col="white")

x

y

z

−7e+06

−6e+06

−5e+06

−4e+06

−3e+06

−2e+06

−1e+06

−7e+06

−6e+06

−5e+06

−4e+06

−3e+06

−2e+06

−1e+06

Sabemos que los EMV están dados por µ̂ = x̄ y σ̂2 =∑ni=1(xi− x̄)2/n. El punto blanco en la gráfica anterior

es (µ̂, σ̂2, logL(µ̂, σ̂2|x)).

Ejemplo gammaFinalmente veamos el ejemplo para la distribución gamma con ambos parámetros desconocidos. En este casolos estimadores máximo verosímiles no tienen una forma explícita. Recordemos que la función de densidad deuna Gamma(α, β) está dada por f(x;α, β) = 1

Γ(α)βαxα−1e−

xβ y por tanto, para una muestra de tamaño n, la

verosimilitud está dada por

L(α, β|x) = 1Γ(α)nβnα (

n∏i=1

xi)α−1e−

∑n

i=1xi

β

y la log-verosimilitud:

3

logL(α, β|x) = −n log(Γ(α))− αn log(β) + (α− 1) log(n∏i=1

xi)−∑ni=1 xiβ

Una forma de obtener los EMV es maximizar la anterior función bivariada, aunque usualmente es mejorintentar resolver analíticamente lo más que se pueda y talvez reducir así el problema en el software.

Para lo anterior, veamos que para α fijo es fácil ver que el EMV para β es β̂ =∑n

i=1xi

nα , sustituyendo en lalog-verosimilitud se obtiene la siguiente función que solo depende de α:

logL(α|x) = −n log(Γ(α))− αn log(∑ni=1 xinα

) + (α− 1) log(n∏i=1

xi)−∑ni=1 xi∑n

i=1xi

=− n log(Γ(α))− αn log(∑ni=1 xinα

) + (α− 1)n∑i=1

log xi − nα

por lo que hemos reducido el problema a maximizar una función de una variable.

En este ejemplo se trabajará con una muestra de una gamma con parámetros α = 2 y β = 0.3. En R seimplementa de la siguiente manera:set.seed(456)n<-100alph<-2##estos son los parámetros realesbet<-0.3x<-rgamma(n,alph,scale=bet)##generamos la muestra de tamaño n=100

s<-sum(x)##guardamos la suma de las observaciones generadas

La<-function(a){###logverosimilitud para alpha-(n*log(gamma(a)))-(n*a*log(s/(n*a)))+(a-1)*(sum(log(x)))-(n*a)

}

curve(La,xlim = c(0,5),xlab=paste(expression(alpha)))##graficamos la función entre 0 y 10optimize(La,c(0,10),maximum=T)## maximizamos usando la función optimize

## $maximum## [1] 1.464799#### $objective## [1] -49.97887

### el argumento c(0,10) indica a la función que busque el máximo en ese rangoamle<-optimize(La,c(0,10),maximum=T)$maximum ###guardamos el emv para alphaabline(v=amle,col="red")###señalamos el emvabline(v=2,col="blue")

4

0 1 2 3 4 5

−20

0−

150

−10

0−

50

alpha

La(x

)

bmle<-s/(n*amle)##sustituimos en la fórmula que se había encontrado para el emv de betabmle###es el emv para beta

## [1] 0.4308013

En la gráfica anterior el emv y el verdadero valor de α están señalados por las líneas roja y azul respectivamente.

Si se aumenta el tamaño de muestra se podrá ver como los emv se acercan más al valor de α y β.

Para complementar veamos como se hace la maximización bivariada de la log-verosimilitud sin reducir elproblema como se hizo apenas. Primero declaramos la log-verosimilitud y graficamos. Obtenemos unasuperficie:LL1<-function(a,b){##log verosimiltud

-n*log(gamma(a))-n*a*log(b)+(a-1)*sum(log(x))-(s/b)###recordamos que en s se guardo la suma de las xi's###es importante notar que es preferible escribir sum(log(x)) a log(prod(x))##ya que prod(x) puede tomarse como infinito en la computadora##lo que llevaría a un error numérico

}

x1=seq(0,5,0.1)###creamos dos particiones de 0 a 5 que van de 0.1 en 0.1x2=seq(0,5,0.1)

persp3D(x=x1,y=x2,z=outer(x1,x2,LL1),theta = 35, phi = 20,expand = 0.5)

5

x

y

z

−1400

−1200

−1000

−800

−600

−400

−200

Para maximizar la log-verosimilitud debemos volver a declararla con un cambio sutil, el cual es que elargumento sea un vector. Obsérvese la diferencia de la siguiente función con la función LL1 declarada en elcódigo anterior.LL<-function(t){

-n*log(gamma(t[1]))-(n*t[1]*log(t[2]))+((t[1]-1)*sum(log(x)))-(s/t[2])

}

Continuamos a hacer la maximización de la función de dos parámetros. En el siguiente código el argumentoc(.1,.1) indica los valores iniciales para buscar la solución, para un mejor funcionamiento es recomendableque estos valores sean los estimadores de momentos si es posible, en este caso no afecta poner los valoresiniciales (.1,.1). El argumento control=list(fnscale=-1) indica hacer una maximización, de no escribirlo eldefault es minimizar.optim(c(.1,.1),LL,control=list(fnscale=-1))

## $par## [1] 1.4649579 0.4307434#### $value## [1] -49.97887#### $counts## function gradient## 95 NA#### $convergence

6

## [1] 0#### $message## NULL

amle;bmle###los obtenidos con la optimización univariada para comparar

## [1] 1.464799

## [1] 0.4308013

mle<-optim(c(.1,.1),LL,control=list(fnscale=-1))$par##los guardamos

Finalmente veamos la siguiente gráfica:persp3D(x=x1,y=x2,z=outer(x1,x2,LL1),theta = 0, phi = 10,expand = 0.5,zlim=c(-1400,40),xlab="alpha",ylab="beta")scatter3D(x=mle[1],y=mle[2],z=LL1(mle[1],mle[2]),pch=19,cex=1,col="white",add=T)rect3D(x0=0,y0=mle[2],z0=-1200,x1=5,z1=20,add = T,bty = "g", facets = T,

border = "black", col ="#0000FF7D")

alpha

beta

z

−1400

−1200

−1000

−800

−600

−400

−200

−1400

−1200

−1000

−800

−600

−400

−200

−1400

−1200

−1000

−800

−600

−400

−200

El plano que se observa en la gráfica anterior es el de ecuación β = β̂. Notemos que la in-tersección de este plano y la superficie es la log-verosimilitud que se había obtenido para αen la optimización univariada. El punto blanco es la imagen del estimador máximo verosímil

7

0 1 2 3 4 5

−20

0−

150

−10

0−

50

alpha

La(x

)

8