Está en la página 1de 17

SIMULACION ESTADISTICA

TAREA 2

SERGIO ANDRES SUAREZ TRIANA


COD: 070250242008

UNIVERSIDAD DEL TOLIMA


IBAGUE-TOLIMA
2019
EJERCICIOS
6.15
Refiriéndose al ejemplo 6.9:

a) Escriba un algoritmo de Metropolis-Hastings para producir la


Figura 6.11. Tenga en cuenta que n L(a) las variables aleatorias
se pueden generar a la vez con el comando R
> ifelse(runif(n)>0.5, 1, -1) * rexp(n)/a

b) ¿Cuál es la tasa de aceptación del algoritmo Metropolis-Hastings


con el candidato L (3)? Grafique la curva de las tasas de
aceptación para los candidatos L (α) cuando α varía entre 1 y 10.
Comentario.

c) Grafique la curva de las tasas de aceptación para los candidatos


L (0, ω) cuando ω varía entre .01 y 10. Compárela con las de los
candidatos L(α).

d) Grafique la curva de las tasas de aceptación cuando la


propuesta se basa en un recorrido aleatorio, Y = X (t ) +ε . donde ε L(α ).
Una vez mas compáralo con las propuestas anteriores.

PROGRAMA EN R

a)
nsim=5000
A=B=runif(nsim)
alpha=1;alpha2=3
last=A[1]
a=0;b=1
cand=ifelse(runif(nsim)>0.5,1,-1)*rexp(nsim)/alpha
for (i in 1:nsim){
rate=(dnorm(cand[i],a,b^2)/dnorm(last,a,b^2))/(exp(-
alpha*abs(cand[i]))/exp(-alpha*abs(last)))
if (runif(1)<rate) last=cand[i]
A[i]=last
}
cand=ifelse(runif(nsim)>0.5,1,-1)*rexp(nsim)/alpha2
for (i in 1:nsim) {
rate=(dnorm(cand[i],a,b^2)/dnorm(last,a,b^2))/(exp(-
alpha2*abs(cand[i]))/exp(-alpha2*abs(last)))
if (runif(1)<rate) last=cand[i]
B[i]=last
}
par(mfrow=c(1,3),mar=c(4,4,2,1))
est1=cumsum(A)/(1:nsim)
est2=cumsum(B)/(1:nsim)
plot(est1,type="l",xlab="iterations",ylab="",lwd=2)

lines(est2,lwd="2",col="gold2")
acf(A)
acf(B)
b)
alf=seq(1,10,le=50)
cand0=ifelse(runif(nsim)>0.5,1,-1)*rexp(nsim)
acce=rep(0,50)
for (j in 1:50){
cand=cand0/alf[j]
last=A[1]
for (i in 2:nsim){
rate=(dnorm(cand[i],a,b^2)/dnorm(last,a,b^2))/(exp(-
alf[j]*abs(cand[i]))/exp(-alf[j]*abs(last)))
if (runif(1)<rate) last=cand[i]
A[i]=last }
acce[j]=length(unique(A))/nsim
}
par(mfrow=c(1,3),mar=c(4,4,2,1))
plot(alf,acce,xlab="",ylab="",type="l",main="Laplace iid")

c)

ome=sqrt(seq(.01,10,le=50))
cand0=rnorm(nsim)
acce=rep(0,50)
for (j in 1:50){
cand=cand0*ome[j]
last=A[1]
for (i in 2:nsim){
rate=(dnorm(cand[i],a,b^2)/dnorm(last,a,b^2))/
(dnorm(cand[i],sd=ome[j])/dnorm(last,sd=ome[j]))
if (runif(1)<rate) last=cand[i]
A[i]=last }
acce[j]=length(unique(A))/nsim }
plot(ome^2,acce,xlab="",ylab="",type="l",main="Normal iid")

d)

alf=seq(.1,10,le=50)
cand0=ifelse(runif(nsim)>0.5,1,-1)*rexp(nsim)
acce=rep(0,50)
for (j in 1:50){
eps=cand0/alf[j]
last=A[1]
for (i in 2:nsim){
cand[i]=last+eps[i]
rate=dnorm(cand[i],a,b^2)/dnorm(last,a,b^2)
if (runif(1)<rate) last=cand[i]
A[i]=last
}
acce[j]=length(unique(A))/nsim
}
plot(alf,acce,xlab="",ylab="",type="l",main="Laplace random walk")

8.11

Considerar la distribución posterior asociada al modelo probit estándar.


n di 1−di
rβ −r i β
∏ ∅ σi
i=1
( ) ( ) ∅
σ
2
×π (β ,σ ),

Donde
−β 2
π ( β , σ 2 ) =σ −4 exp
{ } { }
−1
σ2
exp
50
,

y los pares (r i , d i) son las observaciones, tomadas de Pima.tr como


Pima.tr $ ped para r i y Pima.tr $ type para y i.
8 Monitoreo y Adaptación para Algoritmos MCMC

a) Cree un programa de R que simule a partir de esta distribución


posterior basada en un muestreador Gibbs simple en el que β y σ 2
se simulen alternativamente mediante propuestas de caminata
aleatoria normal y log-normal y se acepten mediante un paso
Metropolis-Hastings unidimensional.

b) Evalúe la convergencia de este algoritmo utilizando múltiples


cadenas y gelman.diag.

c) Compare la convergencia de este algoritmo con la de un


muestreador Gibbs tradicional basado en la finalización del
modelo utilizando las variables latentes normales asociadas con
el cdf normal.

6.4
Sea el vector aleatorio X =( X 1 , X 2 ) que tiene la siguiente función de
densidad de probabilidad bidimensional:
−x 21 x22 + x 21 + x 22−8 x1 −8 x2
f ( x )=c exp ( 2 ) ,

Sea c ≈ 1/20216.335877 Es una constante de normalización. La gráfica de


esta densidad es representada en la Figura 6.1.

Supongamos que deseamos estimar l=E [ X 1 ], a través del estimador


CMC
N
^ 1 ∑ Xt1 ;
l=
N t =1

usando el muestreador de caminata aleatoria para generar una


muestra dependiente { X t } de f (x) Una elección simple para el
incremento Z es llamar los componentes de Z independientemente, de
una distribución N (0 , a 2) para algunas a> 0. Tenga en cuenta que si elige
demasiado pequeño a digamos menor de 0.5, los componentes de las
muestras estarán fuertemente correlacionados positivamente, lo que
dará lugar a una gran variación para l^ Por otro lado, para un a
demasiado grande, digamos más de 10, la mayoría de las muestras
serán rechazadas, lo que lleva nuevamente a una baja eficiencia. A
continuación, seleccionamos un valor moderado de a , digamos a=2
Ahora la muestra aleatoria de caminata se resume de la siguiente
manera:
Procedimiento (muestra aleatoria de caminata)
1. Inicializar X 1 =(X 11 , X 12) con t=1
2. Llamar Z1 , Z 2 N (0,1) independientemente, luego Z=(Z 1 , Z2 ) y
Y = X t +2 Z Calcule α =α ( X t , Y ) como en (6.7)
3. Llamar U U [0,1] si U < α Entonces X t +1=Y . De otra forma X t +1= X t
4. Incrementar t Si t=N (tamaño de la muestra) pare, de otra forma
vuelva al paso 2.

PROGRAMA EN R Y GRAFICA

c=1/20216.335877
f=function(x1,x2){c*exp(-(x1^2*x2^2+x1^2+x2^2-8*x1-8*x2)/2)}
x1=seq(-2,7,length=100)
x2=seq(-2,7,length=100)
x3=outer(x1,x2,"f")
h=f(x1,x2)
persp(x1,x2,x3)
Obtuvimos una estimación l=1.89
^ (El valor verdadero es E [ X 1 ] ≈ 1.85997).
Para obtener un CI , podemos usar (4.18), aquí ^S estima la varianza
asintótica significa el método autocovarianzas.

PROGRAMA EN R

nsim=100000
X=array(0,c(nsim,2))
x11=rnorm(1)
x12=rnorm(1)
X[1,]=c(x11,x12)
for(i in 2:nsim){
z1=rnorm(1)
z2=rnorm(1)
Z=c(z1,z2)
Y=X[i-1,]+2*Z
alpha=min(f(Y[1],Y[2])/f(X[i-1,1],X[i-1,2]),1)
u=runif(1)
if(u<alpha){
X[i,1]=Y[1]
X[i,2]=Y[2]
}
else{
X[i,1]=X[i-1,1]
X[i,2]=X[i-1,2]
}
}
plot(X,col="blue")
contour(x1,x2,x3,add=T)

hist(X,freq=F,nclass=150,col="red")
mean(X)
quantile(X,c(0.025,0.975))

acf(X)
Si bien MCMC es un método genérico y puede usarse para generar
muestras aleatorias virtualmente de cualquier distribución objetivo,
independientemente de su dimensionalidad y complejidad, potencial
Los problemas con el método MCMC son:

1. Las muestras resultantes a menudo están altamente


correlacionadas.
2. Por lo general, toma una cantidad considerable de tiempo hasta que
la cadena de Markov subyacente Se establece en su estado estable.
3. Las estimaciones obtenidas a través de muestras de MCMC a
menudo tienden a tener variaciones mucho mayores luego las
obtenidas a partir del muestreo independiente de la distribución
objetivo. Varios Se han hecho intentos para superar esta dificultad.
6.14

En el modelo de Poisson (ZIP) inflado en cero, datos aleatorios


X ¿ ,. . . , X n, se asume que tienen la forma X i =Ri Y i , donde {Y i } tienen una
distribución Poi( λ) y { Ri} tienen una distribución Ber (p) , todas
independientes entre sí. Dado un resultado x=¿), el objetivo es estimar
tanto λ como p. Considere el siguiente modelo jerárquico de Bayes:

 p U (0,1) (antes de p ¿ ,
 ( λ ∖ p ) Gamma(a ,b) (antes de λ ¿
 ( r i ∖ p , λ ) Ber ( p ) independientemente(delmodelo anterior) ,
 ( x i ¿ , λ , p ) Poi ( λ r i ) independientemente ( del modelo anterior ) .

Donde r =(r 1 , … , r n) y a y b son parámetros conocidos. Resulta que


− λr i
n
b a λ a−1 e−b λ e (λ r i )x ri

f ( x , r , λ , p )= ∏ p (1− p)1−r .
i i

Γ (a) i=1 xi !

Deseamos muestrear desde el pdf posterior f (λ , p ,r ∖ x) utilizando el


muestreador de Gibbs.

a) Mostrar que

1. ( λ ∖ p , r , x ) Gamma a+ ∑
i
x i , b+ ∑ r i .
( i )
2. ( p ∖ λ , r , x ) Beta 1+ ∑ r , n+1−∑ r .
( i) i
i
i

−λ
pe
(
3. ( r i ∖ λ , p , x ) Ber p e−λ + ( 1− p ) I
{x =0} i
)
b) Genere una muestra aleatoria de tamaño n=100 para el modelo
ZIP usando los parámetros p=0.3 y λ=2.
PROGRAMA EN R

n=100
lambda=2
p=0.3
data=rpois(n,lambda)*(runif(n)<p)
data

c) Implemente el muestreador de Gibbs, genere una muestra


grande (dependiente) de la distribución superior y use esto para
construir un 95% de CIs bayesiano para p y λ utilizando los datos
en b). Compara estos con los valores verdaderos.

PROGRAMA EN R

data #data del punto b)


Nsim=10^5
P=runif(1)
lam=rgamma(1,1,1)
r=(runif(n)<P)
sm=sum(data)
gs=rep(0,Nsim)
gs2=rep(0,Nsim)
for(k in 1:Nsim){
sumr=sum(r)
lam=rgamma(1,1+sm,(1+sumr))
P=rbeta(1,1+sumr,n+1-sumr)
prob=exp(-lam)*P /(exp(-lam)*P+ (1-P)*(data==0) )
r=(runif(n)<prob)
gs[k]=P
gs2[k]=lam
}
quantile(gs2,0.025)
quantile(gs2,0.975)

quantile(gs,0.025)

quantile(gs,0.975)

Se encontró que los intervalos bayesianos de confianza estimados son


(1.74 , 3.00) para λ y (0.20 , 0.39) para p. También observamos que
los valores reales de λ y p se encuentran dentro de estos intervalos.

También podría gustarte