Skip to contents

Corre una cadena de Metropolis-Hastings con propuestas normales por bloque. Durante el calentamiento adapta, en cada bloque, la escala de la propuesta (hacia una aceptación de 0.28) y su forma (la covarianza empírica de la primera mitad del calentamiento); después las deja fijas y guarda una de cada thin iteraciones.

Usage

dl_mh(lp, theta0, bloques, iter, warmup, seed, thin = 1L)

Arguments

lp

Función de log-posterior: recibe theta y devuelve un número, o -Inf fuera del soporte (la propuesta se rechaza). Basta conocerla salvo una constante.

theta0

Punto inicial: vector numérico (sus nombres son los de las columnas de draws); lp(theta0) debe ser finita.

bloques

Lista de vectores de índices de theta0; los parámetros de un mismo bloque se proponen juntos.

iter

Iteraciones totales, calentamiento incluido.

warmup

Iteraciones de calentamiento: múltiplo de 200 y menor que iter (con 0 no hay adaptación).

seed

Semilla (número entero), obligatoria: con la misma semilla la cadena se repite exactamente.

thin

Adelgazamiento: después del calentamiento se guarda una de cada thin iteraciones.

Value

Lista con draws (matriz de simulaciones: una fila por iteración guardada y una columna por parámetro), aceptacion (tasa de aceptación de cada bloque después del calentamiento) y escala (escala final de la propuesta de cada bloque).

Details

Es el muestreador de dl_ajustar() y sirve para cualquier log-posterior. Sus argumentos conservan los nombres de versiones anteriores: iter, warmup, seed y thin son las iteraciones, el calentamiento, la semilla y el adelgazamiento de dl_opciones_mcmc().

Examples

# Normal bivariada estándar, con los dos parámetros en un mismo bloque
lp <- function(theta) -0.5 * sum(theta^2)
r <- dl_mh(lp, c(a = 0, b = 0), bloques = list(1:2), iter = 2200, warmup = 200, seed = 1)
colMeans(r$draws)
#>           a           b 
#> -0.01695983 -0.04355445 
r$aceptacion
#> [1] 0.401