En su libro Doing Bayesian Data Analysis, John Kruschke afirma que al usar JAGS de R
... la estimación del modo de una muestra de MCMC puede ser bastante inestable porque la estimación se basa en un algoritmo de suavizado que puede ser sensible a golpes y ondulaciones aleatorias en la muestra de MCMC. ( Análisis de datos bayesianos , página 205, sección 8.2.5.1)
Si bien entiendo el algoritmo Metropolis y las formas exactas como el muestreo de Gibbs, no estoy familiarizado con el algoritmo de suavizado que también se alude y por qué significaría que la estimación del modo de la muestra MCMC es inestable. ¿Alguien puede dar una idea intuitiva de lo que está haciendo el algoritmo de suavizado y por qué hace que la estimación del modo sea inestable?
Respuestas:
No tengo el libro a la mano, así que no estoy seguro de qué método de suavizado utiliza Kruschke, pero por intuición considere este gráfico de 100 muestras de una normal estándar, junto con las estimaciones de densidad de kernel gaussianas que utilizan varios anchos de banda de 0.1 a 1.0. (Brevemente, los KDE gaussianos son una especie de histograma suavizado: estiman la densidad agregando un gaussiano para cada punto de datos, con la media en el valor observado).
Puede ver que incluso una vez que el suavizado crea una distribución unimodal, el modo generalmente está por debajo del valor conocido de 0.
Más, aquí hay una gráfica del modo estimado (eje y) por ancho de banda del kernel utilizado para estimar la densidad, usando la misma muestra. Esperemos que esto preste algo de intuición sobre cómo varía la estimación con los parámetros de suavizado.
fuente
Sean Easter dio una buena respuesta; Así es como lo hacen los guiones R que vienen con el libro de Kruschke. La
plotPost()
función se define en el script R llamadoDBDA2E-utilities.R
. Muestra el modo estimado. Dentro de la definición de la función, hay estas dos líneas:La
density()
función viene con el paquete de estadísticas base de R e implementa un filtro de densidad del núcleo del tipo que describió Sean Easter. Tiene argumentos opcionales para el ancho de banda del kernel de suavizado y para el tipo de kernel a utilizar. Su valor predeterminado es un núcleo gaussiano y tiene algo de magia interna para encontrar un buen ancho de banda. Ladensity()
función devuelve un objeto con un componente llamadoy
que tiene las densidades suavizadas en varios valoresx
. La segunda línea de código, arriba, solo encuentra elx
valor dondey
es máximo.fuente