🇬🇧 English · 🇪🇸 Español
Diagnósticos MCMC entre cadenas
Puremacro ofrece R-hat dividido con normalización por rangos y plegado, tamaño
efectivo de muestra (ESS) entre cadenas para el centro y las colas, y error
estándar Monte Carlo de la media posterior. Solo requieren NumPy y SciPy.
NUTSResult.summary() los utiliza automáticamente; no cambian las muestras
guardadas ni el algoritmo de muestreo.
import numpy as np
from puremacro.mcmc import rank_normalized_rhat, multichain_ess, mcse_mean
cadenas = np.random.default_rng(12).normal(size=(4, 1000))
print(rank_normalized_rhat(cadenas))
print(multichain_ess(cadenas, method="bulk"))
print(multichain_ess(cadenas, method="tail"))
print(mcse_mean(cadenas))
La entrada tiene dimensiones (cadenas, extracciones) para un parámetro y
contiene cadenas inicializadas independientemente, después del calentamiento.
No se deben tratar distintos parámetros como cadenas ni concatenarlas antes de
calcular ESS. Las funciones no modifican la entrada.
| Estadístico | Cálculo e interpretación |
|---|---|
rank_normalized_rhat |
Divide las cadenas, normaliza los rangos conjuntos y toma el máximo R-hat entre esos valores y los rangos de las desviaciones absolutas respecto a la mediana. Detecta diferencias de localización y escala. |
multichain_ess(..., method="bulk") |
ESS de los rangos normalizados; combina autocovarianzas internas y variación entre cadenas antes del truncamiento de Geyer. |
multichain_ess(..., method="tail") |
Menor ESS de los indicadores bajo los percentiles conjuntos 5 y 95. tail_probability permite cambiar estas probabilidades simétricas. |
multichain_ess(..., method="mean") |
ESS de las extracciones sin transformar, para una media posterior de varianza finita. |
mcse_mean |
Desviación estándar conjunta dividida por la raíz del ESS de la media. Mide error de simulación, no incertidumbre del parámetro. |
Los rangos usan (rango - 3/8)/(S + 1/4). Al dividir una cadena impar se omite
la extracción central. Los umbrales de cola usan todas las extracciones antes
de dividir los indicadores. La autocorrelación negativa puede producir ESS
mayor que el número de extracciones; el límite es S*log10(S).
R-hat necesita dos cadenas originales y cuatro extracciones por cadena. ESS admite una cadena, pero entonces no puede evaluar concordancia entre cadenas independientes. Entradas cortas, no finitas o completamente constantes devuelven NaN. Cadenas constantes en valores diferentes producen R-hat infinito. Un indicador de cola constante produce ESS de cola NaN, en lugar de un conteo nominal que podría parecer evidencia informativa.
R-hat próximo a uno y ESS grande son diagnósticos, no una demostración de exploración global. Revise también divergencias, energía, trazas y log posterior. El error Monte Carlo de la media requiere varianza posterior finita y condiciones de límite apropiadas; normalizar rangos no hace existir la media de una Cauchy.
Migración desde 5.5.0 y verificación
Los antiguos ESS “bulk” y “tail” de NUTS sumaban ESS individuales sin penalizar
cadenas atrapadas en regiones diferentes. Ahora usan las definiciones entre
cadenas. r_hat en el resumen usa normalización por rangos y plegado;
mcse_mean es una columna adicional y los atributos identifican los métodos.
R-hat con una sola cadena es NaN. Las funciones clásicas gelman_rubin y
effective_sample_size permanecen disponibles. compute_split_rhat conserva
la definición clásica, pero los casos degenerados ya no devuelven artificialmente
uno. La energía constante también produce un diagnóstico no disponible.
Las pruebas independientes congelan una ejecución real de ArviZ 0.22.0
con ocho conjuntos de cadenas, hashes de entradas y versiones registradas.
Las comparaciones informativas usan tolerancia relativa 2e-11 para ESS/MCSE
y 2e-12 para R-hat. El indicador constante de la cola superior en el caso
discreto es una diferencia explícita de política; se conserva el valor original
de ArviZ sin modificarlo. ArviZ no es una dependencia de ejecución.
Métodos: Vehtari et al. (2021). Referencia independiente: ArviZ 0.22.0.