Está en la página 1de 28

TAREA 2

PRESENTADO POR: YISEL NATALIA SÁNCHEZ ENCINALES


070200182015

PRESENTADO A: JOAQUÍN GONZALEZ BORJA

UNIVERSIDAD DEL TOLIMA


SIMULACIÓN EN ESTADÍSTICA
IBAGUÉ (TOLIMA)
2018
TAREA 2
 EJERCICIO 6.11: Refiriéndose al Ejemplo 6.3
Ejemplo 6.3
El paquete de cars relaciona la distancia de frenado ( y ) con la velocidad ( x) en una
muestra de carros. La Figura 6.6 muestra los datos junto con una curva cuadrática
ajustada que viene dada por la función lm en R. El modelo propuesto para este conjunto
de datos es un modelo cuadrático

y ij =a+ b xi +c x 2i + ε ij , i=1 , … ., k , j=1 ,… . ni ,

donde asumimos que ε ij N (0 , σ 2 ) e independiente. La función de probabilidad


entonces es proporcional a

N /2
1
( )
σ2
exp ¿

Cuando N=∑ ni es el total de números de observaciones. Podemos ver esta función de


i

probabilidad como una distribución posterior en a , b , cy σ 2 (por ejemplo basado en un


plano anterior) y, como un problema de juguete, podemos tratar de muestrear esta
distribución con un algoritmo de Metrópolis-Hastings (ya que esta distribución estándar se
puede simular directamente; consulte el Ejercicio 6.12). Para empezar, podemos obtener
un candidato generando coeficientes de acuerdo con su distribución de muestreo
ajustada. Es decir, podemos usar el comando R para obtener la salida
> x2=x^2
> summary(lm(y~x+x2))
Figura 6.6 Datos de frenado con curva cuadrática (oscura) ajustados con los mínimos
cuadrados
función lm . Las curvas grises representan la muestra de Monte Carlo ( a (i) , b(i ) , c (i ) ) y
muestran la variabilidad en las líneas ajustadas basadas en las últimas 500 iteraciones de
4000 simulaciones.

Como se sugirió anteriormente, podemos usar la distribución normal candidata centrada


en los MLE,
a N¿

σ −2 G ¿(15.17¿2),

en un algoritmo de Metrópolis-Hastings para generar muestras ( a (i) , b(i ) , c (i ) ). La Figura 6.6


ilustra la variabilidad de las curvas asociadas con el resultado de esta simulación.

1. Utilice el candidato dado en este ejemplo para generar una muestra


( a (i) , b(i ) , c (i ) ) ,i=1 , … , 500 con un algoritmo de Metrópolis-Hastings. Los datos están el
paquete cars.
Sol. Comando en R:
library(mcsm)
> data <- cars
> x <- data[,1]
> y <- data[,2]
> N <- length(x)
> summary(lm(y~x)) ##R2 ajustado del 0.6438

Call:
lm(formula = y ~ x)

Residuals:
Min 1Q Median 3Q Max
-29.069 -9.525 -2.272 9.215 43.201

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -17.5791 6.7584 -2.601 0.0123 *
x 3.9324 0.4155 9.464 1.49e-12 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 15.38 on 48 degrees of freedom


Multiple R-squared: 0.6511, Adjusted R-squared: 0.6438
F-statistic: 89.57 on 1 and 48 DF, p-value: 1.49e-12

> x2 <- x^2


> summary(lm(y~x+x2))##R2 ajustado del 0.6532, escogemos la regresión cuadrática

Call:
lm(formula = y ~ x + x2)

Residuals:
Min 1Q Median 3Q Max
-28.720 -9.184 -3.188 4.628 45.152

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.47014 14.81716 0.167 0.868
x 0.91329 2.03422 0.449 0.656
x2 0.09996 0.06597 1.515 0.136

Residual standard error: 15.18 on 47 degrees of freedom


Multiple R-squared: 0.6673, Adjusted R-squared: 0.6532
F-statistic: 47.14 on 2 and 47 DF, p-value: 5.852e-12

> MSR <- 15.18^2 ##Tomamos el error estándar de los residuales, que es
> SSR <- MSR*47 ##la raíz cuadrada de los errores medios.

##Tomamos la función logverosemilitud y le multiplicamos las distribuciones a priori para


a,b,c y luego la exponencial de esta expresión. Ésta es nuestra distribución instrumental,
compuesta por las lognormales para cada coeficiente y donde la suma de los errores al
cuadrado sería SSR.

> MH <- function(Nsim){


+ x2 <- x^2
+ MSR <- 15.18^2
+ SSR <- MSR*47
+ betahat <- coefficients(lm(y~x+x2))
+ logL <- function(a,b,c,s2){
+ -(N/2)*log(s2)-sum((y-a-b*x-c*x2)^2)/(2*s2)
+ }
+ dinst <- function(a,b,c,s2){
+ dnorm(a,betahat[1],sd=14.81716,log=TRUE)+
+ dnorm(b,betahat[2],sd=2.03422,log=TRUE)+
+ dnorm(c,betahat[3],sd=0.06597,log=TRUE)-(N/2)*log(s2)-(SSR/(2*s2))
+ }
+ ahat <- matrix(betahat[1],ncol=1,nrow=Nsim)
+ bhat <- matrix(betahat[2],ncol=1,nrow=Nsim)
+ chat <- matrix(betahat[3],ncol=1,nrow=Nsim)
+ s2hat <- matrix(MSR,ncol=1,nrow=Nsim)
+ for (i in 2:Nsim){
+ priors <- c(rnorm(1,mean=betahat[1],sd=14.81716),
+ rnorm(1,mean=betahat[2],sd=2.03422),
+ rnorm(1,mean=betahat[3],sd=0.06597),
+ 1/rgamma(1,N/2,rate=SSR))
+ rho <- min(exp(logL(priors[1],priors[2],priors[3],priors[4])-
+ logL(ahat[i-1],bhat[i-1],chat[i-1],s2hat[i-1])+
+ dinst(ahat[i-1],bhat[i-1],chat[i-1],s2hat[i-1])-
+ dinst(priors[1],priors[2],priors[3],priors[4])),1)
+ ahat[i] <- ahat[i-1]+(priors[1]-ahat[i-1])*(runif(1)<rho)
+ bhat[i] <- bhat[i-1]+(priors[2]-bhat[i-1])*(runif(1)<rho)
+ chat[i] <- chat[i-1]+(priors[3]-chat[i-1])*(runif(1)<rho)
+ s2hat[i] <- s2hat[i-1]+(priors[4]-s2hat[i-1])*(runif(1)<rho)
+ }
+ plot(x,ahat[Nsim]+bhat[Nsim]*x+chat[Nsim]*x2,type="l",col="cyan",ylim=c(0,120),
+ xlab="",ylab="",lwd=2)
+ for (k in (Nsim-500):Nsim){
+ lines(x,ahat[k]+bhat[k]*x+chat[k]*x2,col="cyan",lwd=2)
+ }
+ lines(x,betahat[1]+betahat[2]*x+betahat[3]*x2,col="red",lwd=2)
+ points(x,y,pch=19)
+}
> MH(10^3)
2. Supervise la convergencia y verifique las autocorrelaciones para cada parámetro a
través de iteraciones.
Sol. Comando en R:
> MH1 <- function(Nsim){
+ x2 <- x^2
+ MSR <- 15.18^2
+ SSR <- MSR*47
+ betahat <- coefficients(lm(y~x+x2))
+ logL <- function(a,b,c,s2){
+ -(N/2)*log(s2)-sum((y-a-b*x-c*x2)^2)/(2*s2)
+ }
+ dinst <- function(a,b,c,s2){
+ dnorm(a,betahat[1],sd=14.81716,log=TRUE)+
+ dnorm(b,betahat[2],sd=2.03422,log=TRUE)+
+ dnorm(c,betahat[3],sd=0.06597,log=TRUE)-(N/2)*log(s2)-(SSR/(2*s2))
+ }
+ ahat <- matrix(betahat[1],ncol=1,nrow=Nsim)
+ bhat <- matrix(betahat[2],ncol=1,nrow=Nsim)
+ chat <- matrix(betahat[3],ncol=1,nrow=Nsim)
+ s2hat <- matrix(MSR,ncol=1,nrow=Nsim)
+ for (i in 2:Nsim){
+ priors <- c(rnorm(1,mean=betahat[1],sd=14.81716),
+ rnorm(1,mean=betahat[2],sd=2.03422),
+ rnorm(1,mean=betahat[3],sd=0.06597),
+ 1/rgamma(1,N/2,rate=SSR))
+ rho <- min(exp(logL(priors[1],priors[2],priors[3],priors[4])-
+ logL(ahat[i-1],bhat[i-1],chat[i-1],s2hat[i-1])+
+ dinst(ahat[i-1],bhat[i-1],chat[i-1],s2hat[i-1])-
+ dinst(priors[1],priors[2],priors[3],priors[4])),1)
+ ahat[i] <- ahat[i-1]+(priors[1]-ahat[i-1])*(runif(1)<rho)
+ bhat[i] <- bhat[i-1]+(priors[2]-bhat[i-1])*(runif(1)<rho)
+ chat[i] <- chat[i-1]+(priors[3]-chat[i-1])*(runif(1)<rho)
+ s2hat[i] <- s2hat[i-1]+(priors[4]-s2hat[i-1])*(runif(1)<rho)
+ }
+ return(list(a=ahat,b=bhat,c=chat,sigma2=s2hat))
+}
> par(mfrow=c(3,2))

> plot(MH1(10^5)$a[90000:10^5],type="l",xlab="",ylab="a");acf(MH1(10^5)$a)

> plot(MH1(10^5)$b[90000:10^5],type="l",xlab="",ylab="b");acf(MH1(10^5)$b)

> plot(MH1(10^5)$c[90000:10^5],type="l",xlab="",ylab="c");acf(MH1(10^5)$c)

3. Haga histogramas de las distribuciones posteriores de las estimaciones de coeficientes


y proporcione intervalos de confianza del 95%.
Sol. Comando en R:
> MH1 <- MH1(10^5)
> quantile(MH1$a,c(0.025,0.975)) ##intervalos de confianza del 95% parametro a
2.5% 97.5%
-23.24824 29.36585
> quantile(MH1$b,c(0.025,0.975)) ##parametro b
2.5% 97.5%
-2.319884 4.157888
> quantile(MH1$c,c(0.025,0.975)) ##parametro c
2.5% 97.5%
-0.0129269 0.2192217
> par(mfrow=c(1,3))

> hist(MH1$a,prob=T,main="",ylab="",xlab="a",col="wheat2",nclass=100)
> curve(dnorm(x,2.47014,sd=14.81716),add=T,col="cyan")
> hist(MH1$b,prob=T,main="",yla="",xla="b",col="wheat2",nclass=100)
> curve(dnorm(x,0.91329,sd=2.03422),add=T,col="cyan")

> hist(MH1$c,prob=T,main="",yla="",xla="c",col="wheat2",nclass=100)
> curve(dnorm(x,0.09996,sd=0.06597),add=T,col="cyan")
 EJERCICIO 7.20
Desde la jerarquía (7.6), muestre que la distribución conjunta puede obtenerse
multiplicando las densidades. Luego, utilizando la estrategia del Ejercicio 7.4, verifique que
los condicionales completos estén dados por (7.7).

Sol. (7.6)

X ij N ( θi ,σ 2 ) ,i=1 , … , k , j=1 , … , ni ,

θi N ( μ , τ 2 ) , i=1 , … , k ,

μ N ( μ0 , σ 2μ ) ,

σ 2 IG ( a1 , b1 ) , τ 2 IG ( a2 , b 2) , σ 2μ IG (a3 , b3 )

(7.7)

σ2 ni τ 2 σ 2τ2
θi N 2
(
σ +ni τ 2
μ+ 2
σ +n i τ 2
X́ i , 2
σ +n i τ 2
, i=1 , … , k ,
)
τ2 k σ 2μ σ 2μ τ 2
μ N 2
(
τ +k σ 2μ
μ0 + 2 θ́ ,
τ +k σ 2μ τ 2 +k σ 2μ )
n 1
σ 2 IG
( 2 )
+a1 ,( ) ∑ (X ij −θ i)2 +b1 ,
2 i j

k 1
τ2
(2 2
IG +a ,( ) ∑ (θ −μ) +b ,
2
ij
)
i
2
2

σ 2μ
( 12 12 3 )
IG +a , ( ) ( μ−μ ) +b , 0
2
3

Donde n=∑
i
ni y θ́=∑ ni θi /n .
i
Comando en R:
> library(mcsm)
> data(Energy)
> X <- Energy
> a1 <- a2 <- a3 <- 7
> b1 <- b2 <- b3 <- 5
> mu0 <- 7
> X1 <- X$Girls
> X2 <- X$Boys
> x <- rbind(X1,X2)
> x1bar <- mean(X1)
> x2bar <- mean(X2)
> k <- 2
> n1 <- length(X1)
> n2 <- length(X2)
> Nsim <- 1e4
> sig2 <- tau2 <- sigmu2 <- rep(0,Nsim)
> theta1 <- theta2 <- mu <- rep(0,Nsim)
> n <- n1+n2
> sh1 <- (n/2)+a1
> sh2 <- (k/2)+a2
> sh3 <- (1/2)+a3
> sig2[1] <- 1/rgamma(1,a1,b1)
> tau2[1] <- 1/rgamma(1,a2,b2)
> sigmu2[1] <- 1/rgamma(1,a3,b3)
> mu[1] <- rnorm(1,mu0,sqrt(sigmu2[1]))
> B1 <- sig2[1]/(sig2[1]+n1*tau2[1])
> B2 <- sig2[1]/(sig2[1]+n2*tau2[1])
> D <- tau2[1]/(tau2[1]+k*sigmu2[1])
> theta1[1] <- rnorm(1,mean=B1*mu[1]+(1-B1)*x1bar,sd=sqrt(B1*tau2[1]))
> theta2[1] <- rnorm(1,mean=B2*mu[1]+(1-B2)*x2bar,sd=sqrt(B2*tau2[1]))
> for (i in 2:Nsim){
+ B1 <- sig2[i-1]/(sig2[i-1]+n1*tau2[i-1])
+ B2 <- sig2[i-1]/(sig2[i-1]+n2*tau2[i-1])
+ theta1[i] <- rnorm(1,mean=B1*mu[i-1]+(1-B1)*x1bar,sd=sqrt(B1*tau2[i-1]))
+ theta2[i] <- rnorm(1,mean=B2*mu[i-1]+(1-B2)*x2bar,sd=sqrt(B2*tau2[i-1]))
+ thetabar <- (n1*theta1[i]+n2*theta2[i])/n
+ D <- tau2[i-1]/(tau2[i-1]+k*sigmu2[i-1])
+ mu[i] <- rnorm(1,mean=D*mu0+(1-D)*thetabar,sd=sqrt(D*sigmu2[i-1]))
+ sum1 <- sum2 <- 0
+ for (j in 1:n1){
+ sum1 <- sum1+(x[1,j]-theta1[i])^2
+ }
+ for (j in 1:n2){
+ sum2 <- sum2+(x[2,j]-theta2[i])^2
+ }
+ rate1 <- (1/2)*(sum1+sum2)+b1
+ rate2 <- (1/2)*((theta1[i]-mu[i])^2+(theta2[i]-mu[i])^2)+b2
+ rate3 <- (1/2)*(mu[i]-mu0)^2+b3
+ sig2[i] <- 1/rgamma(1,sh1,rate1)
+ tau2[i] <- 1/rgamma(1,sh2,rate2)
+ sigmu2[i] <- 1/rgamma(1,sh3,rate3)
+}
> par(mfrow=c(2,3))

> hist(mu[5001:1e4],main="mu",col=8,nclass=100,xlab="")

> hist(theta1[5001:1e4],main="theta1",col=8,nclass=100,xlab="")
> hist(theta2[5001:1e4],main="theta2",col=8,nclass=100,xlab="")

> hist(sqrt(sigmu2)[5001:1e4],main="sigmu",col=10,nclass=100,xlab="")

> hist(sqrt(tau2)[5001:1e4],main="tau",col=10,nclass=100,xlab="")
l
> hist(sqrt(sig2)[5001:1e4],main="sig",col=10,nclass=100,xlab="")

 EJEMPLO 6.4
Sea el vector aleatorio X =( X 1 , X 2 ) que tiene la siguiente pdf (función de densidad de
probabilidad) bidimensional:

−x 21 x22 + x 21 + x 22−8 x1 −8 x2
f ( x )=c exp ( 2 ) ,

El siguiente en R genera el gráfico de la pdf


> f <- function(x1,x2){
+ c <- 1/20216.335877
+ c*exp(-(x1^2*x2^2+x1^2+x2^2-8*x1-8*x2)/2) ## Función de la densidad
+ }
## Ahora realizaremos un gráfico de la función
> x2 <- x1 <- seq(-2,7,length=100)
> z <- outer(x1,x2,f)
> persp(x1,x2,z,shade=0.75,col="lightgreen",phi=40,theta=90,expand=0.6,ltheta=100,
+ ticktype="detailed")
Supongamos que deseamos estimar l=Ε [ X 1 ] a través del siguiente estimador
N
^ 1 ∑ Xt1
l=
N t =1

usando un muestreador de Metroplis-Hatings por caminata aleatoria para generar una


muestra dependiente { X t } de f ( x ) . Una opción simple para el incremento Z es generar los
componentes de Z independientemente, de una distribución N (0 , a 2) para algún a> 0. El
algoritmo del muestreador de caminata aleatoria para este caso es el siguiente:
Procedimiento (muestreador de caminata aleatoria)

1. Inicializar X 1 =(X 11 , X 12). Coloque t=1.


2. Genere Z1 , Z 2 N (0,1) independientemente. Sea Z=(Z 1 , Z2 ) y Y = X t +2 Z . Calcule
α =α ( X t , Y ) como en (6.7).
3. Genere U U [ 0,1 ] . Si U < α, haga X t +1=Y ; de lo contrario, haga X t +1= X t .
4. Incrementa t por1. Si t=N (tamaño de muestra) se detiene; de lo contrario, repita
desde el paso 2.

Ejecutamos el algoritmo anterior para producir N=10 5 muestras.


> Nsim <- 10^5
## Generamos la cadena de Markov de muestreador por caminata aleatoria

> X1 <- rep(0,Nsim) ; X2 <- rep(0,Nsim)


> for (i in 2:Nsim){
+ z1 <- rnorm(1); z2 <- rnorm(1)
+ y1 <- X1[i-1]+z1; y2 <- X2[i-1]+z2
+ alpha <- min(f(y1,y2)/f(X1[i-1],X2[i-1]),1)
+ X1[i] <- X1[i-1]+(y1-X1[i-1])*(runif(1)<alpha)
+ X2[i] <- X2[i-1]+(y2-X2[i-1])*(runif(1)<alpha)
+}

Luego miramos el comportamiento de los últimos cientos para mirar su estacionalidad.


> ts.plot(X1[90000:100000]) ## Graficamos los últimos 10.000 datos.
> par(mfrow=c(1,2))
> contour(x1,x2,z)
> points(X1[98000:100000],X2[98000:100000],col="blue")
## Graficamos los últimos 2.000 datos

> hist(X1,nclass=100,freq=F,col="green")
## Hacemos el histograma de la marginal X1

Los últimos cientos de estos se muestran en el gráfico de la izquierda de la figura. Vemos


que las muestras siguen de cerca el diagrama de contorno de la pdf, lo que indica que se
ha muestreado la región correcta. En el gráfico de la derecha vemos un histograma de los
datos del vector X1 que nos da una idea de la distribución marginal X1 de la pdf.
N
^ 1 ∑ Xt1
Estimamos la media de X1 con el estimador l=
N t =1

> l1 <- mean(X1) ## Hallamos la media de la marginal X1


> l1
[1] 1.84037

Ahora, veamos la función de autocovarianza para un k= 1,…,400.

> acf(X1,lag.max=400,type="covariance") ## Visualizamos la función de autocovarianza


Vamos a construir un intervalo de confianza para l^

S^
( l^ ± z 1−α / 2
√T )
k
2
Con ^S = R
^ ( 0 )+ 2 ∑ R(
^ t) (varianza asintótica)
t =1

Con ^
R(t ) función de autocovarianza.

> R <- as.numeric(acf(X1,plot=FALSE,lag.max=400,type="covariance")$acf)


> S_2 <- R[1]+2*sum(R[2:401]) ## Hallamos la varianza asintótica
> S_2
[1] 190.9156
> I.C. <- c(l1-qnorm(1-0.05/2)*sqrt(S_2/Nsim),l1+qnorm(1-0.05/2)*sqrt(S_2/Nsim))
> I.C. ## Realizamos el intervalo de confianza al 95%
[1] 1.754732 1.926009

Así, el intervalo de confianza para l^ es (1.754732, 1.926009)

 EJERCICIO 6.5

Implementar el muestreador de caminata aleatoria con una distribución objetivo exp ( 1 ),


donde Z (en la distribución propuesta Y =x + Z) tiene una distribución exponencial doble
con el parámetro λ. Lleve a cabo un estudio similar al del problema 6.4 para diferentes
valores de λ, digamos λ=0.1 ,1 , 5 , 20. Observe que (en este caso) el muestreador
aleatorio tiene un comportamiento más estable que el muestreador de independencia.

Distribución exponencial doble

1 −¿x− μ∨¿
f ( x|μ , σ )= e σ

1 −(x− μ)/σ
¿ 2σ
{ e
1 (x−μ)/ σ
2
e
x−μ ≥ 0

x−μ<0

Si x ≥ μ:

x −|t− μ|
1 σ
F ( x|μ , σ )= ∫e dt
2 σ −∞

μ x
¿
1
2σ [ ∫e
−∞
(t− μ)/σ
dt+∫ e
μ
−(t−μ )/ σ
dt
]
Integral uno: t <μ
Integral dos:t ≥ μ

t−μ −(t−μ)
v= w=
σ σ

1 −1
dv = dt dw= dt
σ σ

μ x
F ( x|μ , σ )=
1
2 [ ∫e
−∞
v σdt
σ μ
+∫ e
w (−σ ) dt
σ ]
x
t−μ μ
1
¿ e
2
[ σ |
−∞ −e σ |]
−(t−μ )

μ
− ( x−μ)
1
¿ 1−0−e
2
[ σ
+1 ]
−(x−μ )
1 σ
¿ 1− e
2

Si x < μ:

x
1 |t−μ|/ σ
F ( x|μ , σ )= ∫ e dt
−∞ 2σ

x
1 (t−μ )/ σ
¿∫ e dt
−∞ 2σ

x−μ x
1
¿ e
2
σ
|
−∞

(x− μ)
1 σ
¿ e −0
2

(x− μ)
1 σ
¿ e
2

Así, si x−μ ≥ 0:
−(x− μ)
1 σ
F ( x|μ , σ )=1− e
2

Si x−μ<0 :
(x−μ)
1 σ
F ( x|μ , σ )= e
2
Así,
1
F ( x|μ , σ )= [ 1+ sgn ( x−μ ) [1−e−¿ x−μ∨¿ σ ] ]
2

Si x ≥ μ :
1
y=1− e−( x− μ)
2

e−(x−μ)/ σ =2(1− y )

(x−μ)
=−ln(2(1− y ))
σ

x=μ−σ ln(2(1− y ))

Si x−μ ≥ 0:

−σ ln ( 2 ( 1− y ) ) ≥ 0

ln (2(1− y )) ≥ 0

0 ≤ 2(1− y )≤ 1

1
0 ≤(1− y)≤
2

1 1
y ≥1− =
2 2

Si x−μ<0 :

σ ln2 y <0
ln 2 y <0
0 ≤ 2 y <1
1
0 ≤ y<
2
Así,

1 1 1 1
x=μ−sgn U− ( 2 )
σ ln 2( + sgn(U − )( −U ))
2 2 2

Objetivo

f (y)
∝ ( x , y )=mín { f ( x)
,1 } caminata aleatoria

e− y I
¿ mín { e− x
{ y >0 },1 }
¿ mín {e (x− y) I { y> 0 } ,1 }

Muestrador de independencia

exp( 1) objetivo
exp( λ) instrumental

f ( y ) g( x)
∝ ( x , y )=mín { f ( x) g ( y )
,1 }
λ e−λx
¿ mín e { (x− y)

λ e−xy
,1 }
¿ mín { e (x− y) e−λ(x− y) , 1 }

¿ mín { e (1− λ)(x− y) , 1 }

Sol.
Programa

> RW <- function(Nsim,lam){ #Generamos la cadena de Markov por un


+ X <- rep(0,Nsim)#muestreador por caminata aleatoria
+ for (i in 2:Nsim){
+ u <- runif(1)
+ z <- ifelse(u>=0.5,-log(2*(1-u))/lam,log(2*u)/lam)
+ y <- X[i-1]+z
+ alpha <- min(exp(X[i-1]-y)*(y>0),1)
+ X[i] <- X[i-1]+(y-X[i-1])*(runif(1)<alpha)
+ }
+ return(X)
+}
> par(mfrow=c(2,2))#Realizamos varios histogramas para los
> for(lam in c(0.1,1,5,20)){#diferentes lambdas
+ X <- RW(10^5,lam)
+ hist(X,nclass=100,freq=F,col="green",main=lam)
+ curve(dexp(x,rate=1),add=T,col="red")
+}
> par(mfrow=c(2,2)) #Hallamos las medias muestrales de 20 corridas
> for (lam in c(0.1,1,5,20)){ #y comparamos con la media real que es 1,
+ m <- replicate(20,mean(RW(10^5,lam))) #observamos si se alejan mucho del
valor real para
+ plot(m,rep(1,20),xlim=c(0.6,1.4),main=lam) #determinar si el muestreador es
robusto o no
+ points(1,1,pch=19)
+}
j

> I <- function(Nsim,lam){#Generamos la cadena de Markov por un


+ X <- rep(0,Nsim)#muestreador de independencia
+ for (i in 2:Nsim){
+ u <- runif(1)
+ y <- -log(u)/lam
+ alpha <- min(exp((1-lam)*(X[i-1]-y)),1)
+ X[i] <- X[i-1]+(y-X[i-1])*(runif(1)<alpha)
+ }
+ return(X)
+}
> par(mfrow=c(2,2))#Realizamos varios histogramas para los
> for(lam in c(0.1,1,5,20)){#diferentes lambdas
+ X <- I(10^5,lam)
+ hist(X,nclass=100,freq=F,col="green",main=lam)
+ curve(dexp(x,rate=1),add=T,col="red")
+}
> par(mfrow=c(2,2))#Hallamos las medias muestrales de 20 corridas
> for (lam in c(0.1,1,5,20)){#y comparamos con la media real que es 1,
+ m <- replicate(20,mean(I(10^5,lam)))#observamos si se alejan mucho del valor real para
+ plot(m,rep(1,20),xlim=c(0.6,1.4),main=lam)#determinar si el muestreador es robusto o
no
+ points(1,1,pch=19)
+}
> m <- replicate(20,mean(I(10^5,lam)))#Vemos que cuando el lambda es 20
> plot(m,rep(1,20),xlim=c(-1,1.2),main=lam)#se aleja mucho más del valor real de la media
> points(1,1,pch=19)
> ## Podemos concluir que el muestreador por caminata aleatoria es más robusto
> ## que el independiente ya que en los histogramas vemos que para los valores
> ## 5 y 20 del lambda no se pueden ajustar a la distribución objetivo y además
> ## las medias se alejan más en el muestrador por independencia que en las de la
caminata aleatoria.

También podría gustarte