Algoritmo Metrópolis de Husting

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 3

ALGORITMO METRÓPOLIS DE HUSTING:

Dado :

1)generar

2) con probabilidad

Donde:

Ejemplo:

utilizar sólo una metrópoli {Algoritmo de Hastings, donde la densidad f objetivo es


el beta (2.8; 6.0) y la densidad de candidato q es uniforme en [0, 1], lo que
significa que no depende del valor anterior de la cadena. Una metrópolis {muestra
Hastings se genera con el siguiente:

# valores iniciales:

a=2.8; b=6; c=2.669

n=8000

X=rep(runif(1),n) # inicializar la cadena.

for (i in 2:n){

Y=runif(1)

rh=dbeta(Y,a,b)/dbeta(X[i-1],a,b)

X[i]=X[i-1] + (Y-X[i-1])*(runif(1)<rh)

ks.test(jitter(X),rbeta(8000,a,b))
MUESTREADOR DE GIBBS:

EJM:
Considere el muestreador de Gibbs para una distribución de dos variables

f(x,y) = k x^2 exp( -x y^2 - y^2 + 2y - 4x)

donde las distribuciones condicionales son:

f(x|y) = (x^2)*exp(-x*(4+y*y)) ## a Gamma density kernel


f(y|x) = exp(-0.5*2*(x+1)*(y^2 - 2*y/(x+1)) ## a Gaussian kernel

Rgibbs <- function(N,r) {

mat <- matrix(0,ncol=2,nrow=N)

x <- 0

y <- 0

for (i in 1:N) {

for (j in 1:r) {

x <- rgamma(1,3,y*y+4)

y <- rnorm(1,1/(x+1),1/sqrt(2*(x+1)))

mat[i,] <- c(x,y)

mat

bvn<- Rgibbs (10000,100)


par(mfrow=c(3,2))
plot(bvn,col=1:10000)
plot(bvn,type="l")
plot(ts(bvn[,1]))
plot(ts(bvn[,2]))
hist(bvn[,1],40)
hist(bvn[,2],40)
par(mfrow=c(1,1))
MUESTREADOR DE GIBBS:

Echemos un vistazo a la simulación de una normal bivariada con media cero y varianza de los
marginales, sino una correlación de rho entre los dos componentes (si está un poco oxidado en el
normal bivariada). Por supuesto, no es necesario un muestreador de Gibbs para simular este - sólo
podían simular de la marginal de X, y luego de la condicional para Y | X. En R, podemos hacer esto
de la siguiente manera:

rbvn<-function (n, rho)


{
x <- rnorm(n, 0, 1)
y <- rnorm(n, rho * x, sqrt(1 - rho^2))
cbind(x, y)
}
bvn<-rbvn(10000,0.98)
par(mfrow=c(3,2))
plot(bvn,col=1:10000)
plot(bvn,type="l")
plot(ts(bvn[,1]))
plot(ts(bvn[,2]))
hist(bvn[,1],40)
hist(bvn[,2],40)
par(mfrow=c(1,1))

gibs:

gibbs<-function (n, rho)


{
mat <- matrix(ncol = 2, nrow = n)
x <- 0
y <- 0
mat[1, ] <- c(x, y)
for (i in 2:n) {
x <- rnorm(1, rho * y, sqrt(1 - rho^2))
y <- rnorm(1, rho * x, sqrt(1 - rho^2))
mat[i, ] <- c(x, y)
}
mat
}
bvn<-gibbs(10000,0.98)
par(mfrow=c(3,2))
plot(bvn,col=1:10000)
plot(bvn,type="l")
plot(ts(bvn[,1]))
plot(ts(bvn[,2]))
hist(bvn[,1],40)
hist(bvn[,2],40)
par(mfrow=c(1,1))

También podría gustarte