12
Prática 6 César Embriz 17/03/2015 Densidad del modelo: Uniforme(a, b) a<b d_m <- function(x,a,b) dunif(x,a,b) #Funcion de densidad del modelo r_m <- function(n,a,b) runif(n,a,b) #simulacion del modelo Funciones condicioales: f a|b (a|b, x)= (n-1)(b-x (1) ) n-1 (b-a) n a X (1) ,b X (n) f b|a (b|a, x)= (n-1)(x (n) -a) n-1 (b-a) n a X (1) ,b X (n) #funcion de densidad f_a|b d_a.b <- function(a,b,n=length(muestra)) ((n-1)*(b-min(muestra))^(n-1))/((b-a)^n)*(b>=max(muestra))+(a<= #funcion de densidad f_b|a d_b.a <- function(a,b,n=length(muestra)) ((n-1)*(max(muestra)-a)^(n-1))/((b-a)^n)*(a<=min(muestra))+(b>= Simulación de las funciones condicionales: f u|b = b - b-x (1) u 1 n-1 , 0 <u< 1 f v|a = a + xn-a v 1 n-1 , 0 <v< 1 #simulación f_a|b a.b <- function(b,U,n=length(muestra)) b-(b-min(muestra))/U^(1/(n-1)) #simulacion f_b|a b.a <- function(a,V,n=length(muestra)) a+(max(muestra)-a)/V^(1/(n-1)) Simulación de la muestra # Simular muestra a<--2 b<-3 n <- 30 #tamaño de la muestra set.seed(1) muestra <- r_m(n,a,b) 1

Estadística Bayesiana - MC

Embed Size (px)

DESCRIPTION

Práctica de estadística bayeisana empleando el método ABC y el Mostrador de Gibbs

Citation preview

Page 1: Estadística Bayesiana - MC

Prática 6César Embriz17/03/2015

Densidad del modelo:

Uniforme(a, b) a < b

d_m <- function(x,a,b) dunif(x,a,b) #Funcion de densidad del modelor_m <- function(n,a,b) runif(n,a,b) #simulacion del modelo

Funciones condicioales:

fa|b(a|b, x) = (n−1)(b−x(1))n−1

(b−a)n a ≤ X(1), b ≥ X(n)

fb|a(b|a, x) = (n−1)(x(n)−a)n−1

(b−a)n a ≤ X(1), b ≥ X(n)

#funcion de densidad f_a|bd_a.b <- function(a,b,n=length(muestra)) ((n-1)*(b-min(muestra))^(n-1))/((b-a)^n)*(b>=max(muestra))+(a<=min(muestra))

#funcion de densidad f_b|ad_b.a <- function(a,b,n=length(muestra)) ((n-1)*(max(muestra)-a)^(n-1))/((b-a)^n)*(a<=min(muestra))+(b>=max(muestra))

Simulación de las funciones condicionales:

fu|b = b− b−x(1)

u1

n−1, 0 < u < 1

fv|a = a + xn−a

v1

n−1, 0 < v < 1

#simulación f_a|ba.b <- function(b,U,n=length(muestra)) b-(b-min(muestra))/U^(1/(n-1))

#simulacion f_b|ab.a <- function(a,V,n=length(muestra)) a+(max(muestra)-a)/V^(1/(n-1))

Simulación de la muestra

# Simular muestraa<--2b<-3n <- 30 #tamaño de la muestraset.seed(1)muestra <- r_m(n,a,b)

1

Page 2: Estadística Bayesiana - MC

Histograma de la muestra

par(mfrow=c(1,1))hist(muestra,prob=T,ylim=c(0,5))x <- seq(a,b,length=1000)lines(x,d_m(x,a,b),lwd=3)

Histogram of muestra

muestra

Den

sity

−2 −1 0 1 2 3

01

23

45

Simulando las variables aleatorios por medio del mostrador de Gibbs:

#AlgoritmoGibbs <- function(x, it=1000, semillas=c(1,2)){

mat = matrix(0,ncol=2,nrow=it)colnames(mat) <- c("x","y")mat[1] <- xset.seed(semillas[1])U <- runif(it)set.seed(semillas[2])V<- runif(it)for(t in 2:it){

mat[t,2] <- b.a(mat[t-1,1],V[t])mat[t,1] <- a.b(mat[t,2],U[t])

}return (mat)

}

2

Page 3: Estadística Bayesiana - MC

#Simulandoit <- 10000semillas <- c(1,2)x <- c(0.5,1)MarkovChain <- Gibbs(x,it,semillas)

## Warning in mat[1] <- x: número de items para para sustituir no es un## múltiplo de la longitud del reemplazo

Calculando los cuantiles acumulados:

cuantiles <- function(V, min.k = 10){

tam <- nrow(V)quantx <- matrix(as.numeric(NA), tam, 3)colnames(quantx) <- c("25%", "Mediana", "75%")quanty <- quantxfor(i in min.k:tam){

quantx[i,] <- quantile(V[1:i,1], probs = c(0.25, 0.50, 0.75))quanty[i,] <- quantile(V[1:i,2], probs = c(0.25, 0.50, 0.75))

}return(list(X = quantx, Y = quanty))

}

quant <- cuantiles(MarkovChain)

Gráfica de los pares (a, b) con los cuantiles acumulados

par(mfrow=c(2,1))plot(MarkovChain[,1],type="l",main="x")lines(quant$X[,1], col="blue", lwd=2)lines(quant$X[,2], col="red", lwd=2)lines(quant$X[,3], col="blue", lwd=2)plot(MarkovChain[,2],type="l",main="y")lines(quant$Y[,1], col="blue", lwd=2)lines(quant$Y[,2], col="red", lwd=2)lines(quant$Y[,3], col="blue", lwd=2)

3

Page 4: Estadística Bayesiana - MC

0 2000 4000 6000 8000 10000

−4

0

x

Index

Mar

kovC

hain

[, 1]

0 2000 4000 6000 8000 10000

04

y

Index

Mar

kovC

hain

[, 2]

Histogramas de todas las observaciones

x <- seq(0, 1, length = 1000)y <- seq(0, 1, length = 1000)

par(mfrow=c(1,2))hist(MarkovChain[,1],prob = T,main="marginal x")hist(MarkovChain[,2],prob = T,main="marginal y")

4

Page 5: Estadística Bayesiana - MC

marginal x

MarkovChain[, 1]

Den

sity

−4 −3 −2 −1 0

0.0

0.2

0.4

0.6

0.8

1.0

1.2

marginal y

MarkovChain[, 2]

Den

sity

0 1 2 3 4 5

0.0

0.5

1.0

1.5

Despreciando los primeros k valores de nuestra lista de pares:

#despreciamos los primeros k valores y obtenemosk <- 2000lc <- nrow(MarkovChain)Chain <- MarkovChain[k:lc,]

Obteniendo la gráfica de dispersión de los datos y el estimador puntual

#Grafica dispersiónpar(mfrow=c(1,1))plot(Chain, pch=20)points(mean(Chain[,1]),mean(Chain[,2]),col="red",lwd=3)

5

Page 6: Estadística Bayesiana - MC

−3.5 −3.0 −2.5 −2.0

3.0

3.5

4.0

4.5

5.0

x

y

Obteniendo los histogramas de las nuevas cadenas de markov

#histogramas margiales "x" y "y"par(mfrow=c(1,2))hist(Chain[,1],prob = T,main="marginal x")hist(Chain[,2],prob = T,main="marginal y")

marginal x

Chain[, 1]

Den

sity

−4.0 −3.0 −2.0

0.0

0.5

1.0

1.5

2.0

marginal y

Chain[, 2]

Den

sity

3.0 4.0 5.0

0.0

0.5

1.0

1.5

2.0

2.5

6

Page 7: Estadística Bayesiana - MC

Obteniendo la autocorrealación de los datos

#Autocorrelacionesautocor <- function(V, brincos=20){

lc <- length(V)autcor <- numeric(brincos)names(autcor) <- 1:brincosfor (i in 1:brincos){

autcor[i] <- cor(V[1:(lc-i)],V[(i+1):lc],method="spearman")}barplot(autcor, main = "Autocorrelaciones de Spearman", xlab = "")return(autcor)

}

autcor.X <- autocor(Chain[,1])

1 2 3 4 5 6 7 8 9 11 13 15 17 19

Autocorrelaciones de Spearman

−0.

010.

000.

010.

02

autcor.Y <- autocor(Chain[,2])

7

Page 8: Estadística Bayesiana - MC

1 2 3 4 5 6 7 8 9 11 13 15 17 19

Autocorrelaciones de Spearman−

0.03

−0.

010.

010.

03

Tomando sólo los datos que no son fuertemente dependientes:

brincos <- 6

#tomamos cada brincos elementoslc <- nrow(Chain)p <- floor((lc-1)/brincos)FChain <- Chain[1+(0:p)*brincos,]lc <- nrow(FChain)

Obteniendo las funciones predictivas a posteriori

dpred0 <- function(y) mean(mapply(dunif, rep(y, lc), FChain[,1], FChain[,2]))dpred <- function(y) sapply(y, dpred0)ppred0 <- function(y) mean(mapply(punif, rep(y, lc), FChain[,1], FChain[,2]))ppred <- function(y) sapply(y, ppred0)

Graficando la densidad predictiva a posteriori

y <- seq(a-2, b+2, length = 1000)par(mfrow=c(1,1))plot(y, dpred(y), type = "l", lwd = 2, main = "Densidad predictiva a posteriori")

8

Page 9: Estadística Bayesiana - MC

−4 −2 0 2 4

0.00

0.05

0.10

0.15

Densidad predictiva a posteriori

y

dpre

d(y)

Obteniendo la estimación puntual

pp <- 0.95 # probabilidad del intervaloinferencia <- matrix(nrow = 2, ncol = 3)colnames(inferencia) <- c("inferior", "puntual", "superior")rownames(inferencia) <- c("a", "b")inferencia[1, ] <- quantile(FChain[,1], probs = c(0.5 - pp/2, 0.5, 0.5 + pp/2))inferencia[2, ] <- quantile(FChain[,2], probs = c(0.5 - pp/2, 0.5, 0.5 + pp/2))

Gráficas de las estimaciones para a y b

par(mfrow = c(1,2))hist(FChain[,1], main = "Marginal a posteriori", xlab = "a")rug(inferencia[1,],col = "blue", lwd = 2)hist(FChain[,2], main = "Marginal a posteriori", xlab = "b")rug(inferencia[2,],col = "blue", lwd = 2)

9

Page 10: Estadística Bayesiana - MC

Marginal a posteriori

a

Fre

quen

cy

−3.0 −2.5 −2.0

010

020

030

040

0

Marginal a posteriori

b

Fre

quen

cy3.0 3.5 4.0 4.5

010

020

030

040

0

Gráfica de dispersión:

#Grafica dispersiónpar(mfrow=c(1,1))plot(FChain, pch=20)points(mean(FChain[,1]),mean(FChain[,2]),col="red",lwd=3)

−3.2 −3.0 −2.8 −2.6 −2.4 −2.2 −2.0

3.0

3.5

4.0

4.5

x

y

10

Page 11: Estadística Bayesiana - MC

Estimación puntual de una observación futura

pp <- 0.95 # probabilidad del intervalointegrate(dpred, -10, 10, subdivisions =1000L)

## 0.9999935 with absolute error < 1e-04

Obteniendo la media predictiva

y.pred <- function(y) y*dpred(y)(media <- integrate(y.pred, -10, 10, subdivisions = 1000L)$value)

## [1] 0.5162403

g <- function(z, cuantil) ppred(z) - cuantil

La mediana predictiva

(mediana.pred <- uniroot(g, c(-10, 10), cuantil = 0.5)$root)

## [1] 0.5161542

Finalmente nuestro intervalo predictivo con probabilidad de .95 es:

#intervalopar(mfrow = c(1,1))inf.pred <- uniroot(g, c(-10, 10), cuantil = 0.5 - pp/2)$rootsup.pred <- uniroot(g, c(-10, 10), cuantil = 0.5 + pp/2)$rootc(inf.pred, sup.pred)

## [1] -1.978736 3.012554

plot(y, dpred(y), type = "l", lwd = 3, main = "Densidad predictiva a posteriori")rug(c(inf.pred, mediana.pred, sup.pred), col = "blue", lwd = 3)

11

Page 12: Estadística Bayesiana - MC

−4 −2 0 2 4

0.00

0.05

0.10

0.15

Densidad predictiva a posteriori

y

dpre

d(y)

12