El paquete rjags de R

1. Ciclo de vida

2. Tipología

3. Ámbito de aplicación

4. Lenguaje de programación

Descripción

El paquete rjags permite usar desde R la librería JAGS (Just Another Gibbs Sampler) para el análisis de modelos bayesianos jerárquicos, mediante la técnica MCMC (Markov Chain Monte Carlo). Para usar rjags hay que haber instalado JAGS con anterioridad, dado que es un componente independiente de R.

Para definir los modelos para analizar, JAGS usa una sintaxis propia para especificar todos los elementos que componen un modelo. Normalmente el modelo se almacena en un fichero de texto, pero en el caso de R, también es posible tenerlo en una cadena. El modelo usa una sintaxis parecida a la de los lenguajes de programación tradicionales, donde el usuario declara constantes, variables, tablas, bucles, etc., utilizados en la definición de las distribuciones subyacentes al modelo. De hecho, el lenguaje usado es un dialecto del lenguaje BUGS (Bayesian inference Using Gibbs Sampling).

Enlace al recurso

https://cran.r-project.org/web/packages/rjags/

Ejemplo de uso

Supongamos que queremos modelar la probabilidad de perder un partido en función de los goles marcados en la primera parte, y si se juega en casa o no. Esto lo hacemos para un equipo en concreto, del cual tenemos un histórico de partidos que ha disputado, en casa o fuera, cuántos goles marcó en la primera parte y el resultado final del partido (derrota, empate o victoria). Los empates los consideraremos como las victorias, en el sentido de que no son derrotas, para tener una variable objetiva binaria (pierde / no pierde).

Por lo tanto, la variable resultado es una variable binaria que sigue una distribución de Bernoulli, y que queremos modelar con una regresión logística, usando las otras variables como independientes, es decir, si juega en casa o no y el número de goles marcados en la primera parte. No desarrollaremos todo el modelo, solo indicaremos cómo lo haríamos en JAGS usando rjags.

El modelo logístico lo definimos como:

yi ∼ bern(πi), i = 1, . . . , N

logit(πi) = β0 + β1 casai + β2 golesi

donde yi es la variable con el resultado del partido i-ésimo, casai es si juega en casa o no, y golesi los goles marcados. El resto son los elementos que componen el modelo y queremos estimar a partir de los datos. Entonces, usando rjags podemos definir el modelo de la forma siguiente, que resulta la parte más interesante:

# variable con el modelo

modelString = "
  modelo {
    # verosimilitud
    for (i in 1:N) {
      y[i] ~ dbern(pi[i])
      logit(pi[i]) <- beta[1]+beta[2]*casa[i]+beta[3]*goles[i]
    }

    # distribuciones a priori de los parámetros (las tres betas)
    for (j in 1:3) {
      beta[j] ~ dnorm(0.0, 0.0001)
    }
  }
"

Con rjags podemos usar, en este caso, el modelo anterior para ajustarlo a unos datos en particular que se supone leeremos de un fichero (y, casa, goles). Las variables que tenemos que pasar a la función jags.model() son estas junto con el número de datos disponibles N, la inicialización de los parámetros del modelo y la cadena con la descripción del modelo. Una vez ejecutada la simulación, podemos obtener la estimación de los parámetros betai que determinan el modelo que queríamos construir, además de mostrar gráficamente cómo de buena es esta estimación.

Enlaces relacionados

Librería JAGS: http://mcmc-jags.sourceforge.net/

BUGS: https://www.mrc-bsu.cam.ac.uk/software/bugs/