Vous êtes sur la page 1sur 10

Universidad Nacional de Colombia

Facultad de Ciencias
Departamento de Estadstica
Carrera de Estadstica
Estadstica Bayesiana
Bogot, diciembre de 2013

Algunos algoritmos en R

Yeferson Andrs Castaoa


1. Distribucin normal multivariada con media y varianza desconocida.

Se tiene que Xi N (, ), i = 1, 2, ..., n, con dim(X) = k. Entonces la funcin de densidad de Xi es:




n
1X
(xi )0 1 (xi )
f (x|, ) = (2)k/2 ||1/2 exp
2 i=1

Se obtienen las siguientes a prioris conjugadas:


| Nk (m, /n0 )
1 W (, )

Luego, se obtiene la distribucin a posteriori:



| Nk

n0 m + n
x

,
n0 + n n0 + n



n0 n
1 W + n, 1 + S 2 +
(
x m)0 (
x m)
n0 + n

Se tiene el siguiente algoritmo programado con


>
>
>
>
>
>
>
>
>
>
>
>
>
>

R.

# Distribucin de los datos


# Librera para utilizar distribuciones multivariadas.
library(MASS)
# Definiendo parmetros de la distribucin normal multivariada
# Vector de medias
mu<-c(1.5,2,2.5,3,3.5)
# Matriz de varianzas covarianzas
sigma<-c(0.3,0,0,0,0.1,0,0.2,0,0,0,0,0,0.12,0.05,0,0,0,0.05,0.25,0,0.1,0,0,0,0.4)
sigma<-matrix(sigma,ncol=5,nrow=5)
# Tamao de la muestra
n=20
# Con esta funcin se genera una muestra aleatoria de n vectores
x<-mvrnorm(n,mu,sigma)
# Vector de medias muestrales
a Cdigo: 162769. E-mail: jacastanot@unal.edu.co

Estadstica Bayesiana

> xbar<-colMeans(x)
> # Matriz de varianzas covarianzas muestrales
> S2<-var(x)
>
>
>
>
>
>
>
+
>
>
>
>
>
>
>
>
+
>

# Distribucin a priori---# Se definen los parmetros iniciales


# Vector de medias a priori
# mu dado sigma
m0<-c(0,0,0,0,0)
# Matrix de varianzas covarianzas a priori
sigma0<-matrix(c(0.001,0,0,0,0,0,0.001,0,0,0,0,0,0.001,0,0,0,0,0,0.001,0,0,0,0,0,0.001)
,ncol=5)
# Tamao de la muestra a priori
n0<-20
# sigma a la -1
# Parmetros de la distribucin de sigma^-1 a priori
# Grados de libertad de la distribucion de wishart
alpha<-5
# Matriz de varianzas covarianzas de la distribucin Wishart
beta<-matrix(c(100,0,0,0,0,0,100,0,0,0,0,0,100,0,0,0,0,0,100,0,0,0,0,0,100)
,ncol=5)
sigma0_1<-rWishart(n0,alpha,beta)

>
>
>
>
>
>
>

# Distribucin a posteriori
# Parmetros de la distribucin a posterirori
a<-alpha+n
b<-solve(beta)+S2+((n0*n)/(n0+n))*((xbar-m0)%*%t(xbar-m0))
# Se define una matriz vacia para guardar los resultados de la simulacin.
# Se obtiene 1000 muestras para mu y sigma
mu1<-matrix(ncol=5,nrow=1000)

> for (i in 1:1000){


+
sigma_1<-rWishart(1,a,b)
+
mu1[i,]<-mvrnorm(1,(n0*m0+n*xbar)/(n0+n),solve(sigma_1[,,1])/(n0+n))
+
}
>
>
>
>
>
>
>
>
>

# Se obtienen los grficos para observar la convergencia de los mu


par(mfrow=c(3,2))
plot(mu1[,1])
plot(mu1[,2])
plot(mu1[,3])
plot(mu1[,4])
plot(mu1[,5])
# Grficos de correlaciones entre las variables
pairs(mu1,labels=c("mu1","mu2","mu3","mu4","mu5"),main="Matriz de correlaciones")

Se puede ver la convergencia de las muestras a posteriori simuladas para la media al valor verdadero
del parmetro, es evidente la inuencia de la distribucin a priori ya que los datos tienden irse a cero ver
gura 1. Tambin se puede observar en las muestras a posteriori las correlaciones dadas en el parmetro
inicial de , ver gura 2.
De las distribuciones a posteriori se puede obtener la esperanza y la varianza para | y para 1 .
E(|) = 1

Estadstica Bayesiana (2013)

Estadstica Bayesiana

Figura 1: Convergencia en distribucin de .


V ar(|) = 1

donde 1 =

n0 m + n
x

y 1 =
, en
n0 + n
n0 + n

R se puede calcular as:

> # Esperanza y varianza de mu|sigma a posteriori


> mu2<-(n0*m0+n*xbar)/(n0+n)
> var2<-solve(sigma_1[,,1])/(n0+n)
E(1 ) = ij
2
V ar(1 ) = (ij
+ ii jj )

en R se puede calcular as:


>
>
>
>
>

# Esperanza y varianza de sigma a la -1 a posteriori


beta1<-solve(beta)+S2+((n0*n)/(n0+n))*((xbar-m0)%*%t(xbar-m0))
alpha1<-alpha+n
Espw<-alpha1*beta1
varw<-alpha1*(beta1^2+diag(beta1)%*%t(diag(beta1)))

2. Transformacin de parmetros.

En la seccin 5.4 del libro Bayesian Computation with R de Jim Albert se tiene una ejemplo de
un modelo Beta-Binomial se quiere comprobar utilizando el teorema de la transformacin. Si y = g(x),
entonces
fy (y) = fx (h(y))|J(y)|
Estadstica Bayesiana (2013)

Estadstica Bayesiana

Figura 2: Matriz de correlaciones de las variables.

Se tiene la funcin de densidad a posteriori de la beta-binomial


g(, K)

n
Y
1
B(K + yj , K(1 ) + nj yj )
1
(1 ) (1 + k)2 j=1
B(K, K(1 ))

1. La transformacin a realizar es


1 = logit() = log
1


2 = log(k)

1
1
=
=
1
exp(1 )

1
1 + exp(1 )
= =

exp(1 )
exp(1 )
= =
1 + exp(1 )
exp(2 ) = K

exp(1 ) =

Entonces se obtiene que J =

exp(1 + 2 )
, luego se obtiene la funcin de densidad a posteriori
(1 + exp(1 ))2

con los parmetros transformados.


g(1 , 2 )

n B
Y

exp(2 )
(1 + exp(2 ))2 i=1

exp(1 + 2 )
exp(2 )
+ yj ,
+ nj yj
1 + exp(1 )
1 + exp(1 )


exp(1 + 2 )
exp(2 )
B
,
1 + exp(1 ) 1 + exp(1 )

Estadstica Bayesiana (2013)

Estadstica Bayesiana

2. Ahora la transformacin a realizar es


 

1 = logit() = log

Se tiene el jacobiano J =

2 = K

exp(1 )
, luego se obtiene la funcin de densidad a posteriori con
(1 + exp(1 ))2

la transformacin respectiva


g(1 , 2 )

1
(1 + 2 )2

n
Y
i=1

2 exp(1 )
2
+ yj ,
+ nj yj
1 + exp(1 )
1 + exp(1 )


2 exp(1 )
2
B
,
1 + exp(1 ) 1 + exp(1 )

3. Finalmente se tiene la transformacin


1

2 = log(k)

Se tiene el jacobiano J = exp(2 ), luego se obtiene la funcin de densidad a posteriori con la


transformacin respectiva
g(1 , 2 )

n
Y
1
1
B(1 exp(2 ) + yj ; exp(2 )(1 1 ) + nj yj )
1 (1 1 ) (1 + exp(2 )2 ) j=1
B(1 exp(2 ), exp(2 )(1 1 ))

3. Modelo Normal-Gamma.

Se tiene que xi N (, 2 ), donde y 2 son cantidades desconocidas, usando la a priori


| N (0 , (c0 )1 )


n0 n0 02
G
,
2
2

con i = 1, 2, ..., n y =

1
. Se obtiene la distribucin conjunta a priori.
2



n0 +1

1
2
2
2
P (, )
exp
c0 ( 0 ) + n0 0
2

La funcin de verosimilitud sera:


L(xi |, ) =

n
Y




1/2 exp (xi )2


2
i=1

Luego, se obtiene la distribucin a posteriori


P (, |xi ) P (, )L(xi |, )


Y


n
n0 +1

2 1 exp
c0 ( 0 )2 + n0 02
1/2 exp (xi )2
2
2
i=1

Para obtener un grco de contornos se tiene el siguiente cdigo en R.


# Se asume que Y~N(4,2)
# Generar los datos---# Se crea una semilla
Estadstica Bayesiana (2013)

Estadstica Bayesiana

set.seed(1)
# Tamao de la muestra
n<-50
# Se genera una muestra de tamao n con media 4 y ds 2
y<-rnorm(n,4,2)
library(LearnBayes)
# Funcin que calcula el logaritmo natural de la densidad a posteriori
normal0<-function(theta1,data1){
mu<-theta1[1]
phi<-theta1[2]
y<-data1
N<-length(y)
val=0*mu
sigma0<-1/4
n0<-2
mu0<-4
c0<-0.5
for(i in 1:N)
val=val+
((n0+n-1)/2)*log(phi)-(phi/2)*(c0*(mu-mu0)^2+n0*sigma0)-(phi/2)*(y[i]-mu)^2
return(val)
}
# Nombrar los datos
data1<-y
# Funcin que grfica el contorno del logaritmo de la funcin de densidad a posteriori
mycontour(normal0,c(4,4.3,13,18),data1,xlab='theta',ylab='phi')

Figura 3: Grco de contornos de la densidad a posteriori.

Estadstica Bayesiana (2013)

Estadstica Bayesiana

Ahora haciendo una transformacin sobre el parmetro dado por la expresin = log(). Se tiene
el Jacobiano J = e . El logaritmo natural de la densidad a posteriori con el parmetro transformado es
programada en la funcin normal.
# Funcin que calcula el logaritmo natural de la densidad a posteriori
# con el parmetro phi transformado.
normal<-function(theta1,data1){
mu<-theta1[1]
eta<-theta1[2]
phi<-exp(eta)
y<-data1
N<-length(y)
val=0*phi;
sigma0<-1/4
n0<-2
mu0<-4
c0<-0.5
for(i in 1:N)
val=val+
((n0+n-1)/2)*log(phi)-(phi/2)*(c0*(mu-mu0)^2+n0*sigma0)-(phi/2)*(y[i]-mu)^2+eta
return(val)
}
# Nombrar los datos
data1<-y
# Funcin que grfica el contorno del logaritmo de la funcin de densidad a posteriori
mycontour(normal,c(4,4.25,2.6,3),data1,xlab='theta',ylab='log(phi)')

Figura 4: Grco de contornos de la densidad a posteriori transformando el parmetro .

Se puede observar en las guras 3 y 4 que al aplicar la transformacin sobre el parmetro se tiene
mas precisin, es decir, la varianza disminuye, por lo tanto, se obtiene una distribucin a posteriori ms
informativa. Ahora tomando como referencia la gura 4 se utilizara el mtodo de Newton para obtener
Estadstica Bayesiana (2013)

Estadstica Bayesiana

una aproximacin de la distribucin a posteriori basado en la moda a posteriori con los valores iniciales
(, log()) = (4.12, 0.2), esta funcin se programa en R as:
# Aproximacin de la distribucin a posteriori
fit=laplace(normal,array(c(4.12,0.2),c(1,2)),data1);fit
$mode

[,1]
[,2]
[1,] 4.133905 2.79998
$var

[,1]
[,2]
[1,] 8.108168e-04 1.940326e-08
[2,] 1.940326e-08 7.547114e-04
$int
[1] 2379.649
$converge
[1] TRUE

Se encuentra que la moda a posteriori es (4.13, 2.78). De la salida de la funcin laplace se puede decir
que (, log()) es aproximadamente una normal bivariada con vector de medias t$mode y matriz de
varianza-covarianza t$var, se tiene la aproximacin del logaritmo de la constante de normalizacin t$int,
nalmente, t$converge indicacin (TRUE or FALSE) si el algoritmo converge o diverge respectivamente,
en este caso converge a una normal bivariada. Para obtener el grco de contornos para la densidad normal
aproximada se tiene el siguiente cdigo en R
# Lista los parmetros de la funcin
npar=list(m=fit$mode,v=fit$var)
# Grfico de contornos de la densidad normal aproximada
mycontour(lbinorm,c(4,4.25,2.68,2.91),npar)
title(xlab='theta',ylab='log(phi)')

Comparando la gura 4 y la gura 5 no se observan diferencias signicativas, esto es debido a que la


aproximacin a la normal y el modelo normal-gamma tiene parmetros de localizacin y escala similares.
El siguiente cdigo construye intervalos de conanza de 90 % de probabilidad para los parmetros.
>
>
>
>

# Intervalos de confianza para theta y log(phi)


# Extrae los elementos de la diagonal de la matriz de variaza-covarianza
se=diag(fit$var)
fit$mode-1.645*se
[,1]
[,2]
[1,] 4.132572 2.798739
> fit$mode+1.645*se
[,1]
[,2]
[1,] 4.135239 2.801222

As un intervalo aproximado de 90 % para es (4.132572, 4, 135229) y un intervalo aproximado de 90 %


para log() es (2.798739, 2.801222).

Estadstica Bayesiana (2013)

Estadstica Bayesiana

Figura 5: Grco de contornos de aproximacin normal de y log en el modelo normal-gamma.

4. Mtodo de Monte Carlo para calcular integrales.

Se quiere por ejemplo calcular la siguiente integral:


Z

ex + 1
dx
(x + 1)3/2

Para esto se genera una muestra de xi U (0, 5), se toma a la variable y =


los valores obtenidos en la muestra, entonces se tiene que:
Z
E(y) =
0

Por lo tanto, 5E(y) =

Z
0

y dx, en

ex + 1
donde se reemplazan
(x + 1)3/2

1 ex + 1
dx
5 (x + 1)3/2

R se tiene el siguiente cdigo.

# Se genera una muestra de la distribucin uniforme


x=runif(1000000,0,5)
# Funcin y
y=(sqrt(exp(x)+1))/((x+1)^(3/2))
# Esperanza muestral de y
Ey=mean(y)
# Calculo aproximado de la integral
int=5*Ey;int
[1] 3.453196

En este caso usaremos para Xi la distribucin normal con media 2 y desviacin estndar 4. Suponiendo
ahora que se est interesado en la media de (X 2 ), se tiene el siguiente cdigo en R.

Estadstica Bayesiana (2013)

Estadstica Bayesiana

10

> ### E(X^2) donde y es la distribucin normal ####


> x=rnorm(100000,2,4)
> est=mean(x^2)
> se=sd(x^2)/sqrt(100000)
> c(est,se)
[1] 19.97234034 0.08705667

La estimacin de Monte Carlo para E(x2 |datos) es 19.9723 con un error estndar asociado a la
simulacin de 0.0870.
5. Muestreo Rechazo.

Supongamos que queremos producir una muestra independiente de una densidad a posteriori g(|y)
donde la constante de normalizacin puede ser no conocida el primer paso en muestreo rechazo es encontrar
otra densidad de probabilidad p() tal que:
Fcil obtener simulaciones de p.
La densidad p debe ser parecida en escala y forma a g .
Para todo exista c tal que g(|y) < cp().

Suponiendo que se logro encontrar una densidad p con estas propiedades. Entonces se obtienen simulaciones de g con el siguiente algoritmo:
1. Se genera de p() y U de U (0, 1).
2. Si U

g(|y)
, entonces, se acepta como una muestra de g , en caso contrario se rechaza .
cp()

3. Continua en el paso (1) del algoritmo hasta obtener una numero suciente de 's aceptados.

Estadstica Bayesiana (2013)

Vous aimerez peut-être aussi