Estoy aprendiendo PyMC y básicamente tengo una variable aleatoria $Z = X + Y$ donde (dicen) $X \sim \mathrm{Normal}(\theta_X)$ $Y \sim \mathrm{Lognormal}(\theta_Y)$ $Z$ no tiene simple y cerrada de forma de la distribución. Ahora tengo observaciones $z_i,\,i=1...N$ $Z$ y quiero inferir $\theta_X$$\theta_Y$. ¿Cuál es la más sencilla forma de hacer esto con PyMC?
Si yo tuviera la distribución de $Z$ disponible, entonces creo que podría hacer:
Z = DistZ('Z', param_x=theta_x, param_y=theta_y, value=z, observed=True)
y, a continuación, hacer inferencia, pero no sé DistZ
. También es fácil definir la suma como:
@pymc.deterministic
def z_sum(x=Y, Y=y):
return x + y
pero luego pienso que no se puede definir una función determinista.
Yo creo que yo podría hacer algo como:
@pymc.stochastic(observed=True)
def z_sum(value=z, x=X, y=Y):
def logp(z, x):
# return log-likelihood
pero no me queda claro en los detalles. Sé el conjunto probabilidad de $\mathcal{L}(z, x)$, pero tenía la esperanza de que no sería necesario.
Yo era capaz de hacer esto con una costumbre muestreador de Gibbs (mediante la articulación de probabilidad), pero estoy buscando una forma más "elegante" con la solución de PyMC.
EDIT: se encontró una pregunta similar en los ERRORES de preguntas frecuentes que dice: funciones de variables aleatorias no son compatibles. No sé si esto se aplica a PyMC, y lo que el enfoque estándar.