pymc python
PyMC: aprovechando la escasa estructura del modelo en Adaptive Metropolis MCMC (1)
Tengo un modelo que está estructurado como en este diagrama:
Tengo una población de varias personas (indexadas 1 ... 5 en esta imagen). Los parámetros de población ( A
y B
, pero puede haber más) determinan las distribuciones para cada variable latente L[i]
de cada individuo. La variable latente L[i]
determina la observación X[i]
de una manera probabilística. Este modelo es "disperso" en el sentido de que la mayoría de los nodos no tienen bordes que los conecten directamente.
Estoy tratando de usar PyMC para inferir los parámetros de población, así como la variable latente de cada individuo. (Una pregunta relacionada, que describe mi escenario específico con más detalle, está here .) Mi pregunta es: ¿debería usar Adaptive Metropolis en lugar de otro método, y si es así, hay algún "truco" para agrupar las variables estocásticas correctamente?
Si entiendo correctamente el muestreo de Adaptive Metropolis (y no puedo ...), este algoritmo propone nuevos valores para las incógnitas ( A
, B
y toda la L[i]
) teniendo en cuenta cómo estas variables están correlacionadas en la distribución posterior Construido en la carrera hasta el momento. Si A
y B
están correlacionadas negativamente, entonces una propuesta que aumenta A
tenderá a disminuir B
, y viceversa, para aumentar la posibilidad de que la propuesta sea aceptada.
La cuestión es que, en este modelo, cada L[i]
es una extracción independiente de la distribución de la población subyacente determinada por A
y B
Por lo tanto, aunque se verá que se correlacionan en la parte posterior, estas correlaciones se deben realmente a A
y B
solo, y por lo tanto se "confunde" de alguna manera. Así que cuando llamo a la función,
M.use_step_method(pymc.AdaptiveMetropolis, stochastics)
¿Todas las L[i]
deberían estar juntas en la lista de estocásticos? ¿O debería llamar a use_step_method varias veces, cada vez con stochastics=[A, B, L[i]]
para solo uno de los L[i]
? Mi pensamiento fue que llamar a la función varias veces para diferentes grupos de estocásticos estructuraría el problema y haría más fácil para PyMC diciéndole que se centre solo en las correlaciones que importan. ¿Es esto correcto?
Esta puede ser una respuesta insatisfactoria, pero parece que PyMC3 tiene un ejemplo para un modelo jerárquico muy similar: https://pymc-devs.github.io/pymc3/GLM-hierarchical/ Migrar su código a PyMC3 le daría acceso a Muestras más nuevas, como el muestreador sin giro en U (NUTS)