Below is a graphical representation of the combination:
${\rm Pr}(R_{\rm obs}|R_{\rm true},\sigma) \; {\rm Pr}(R_{\rm true}|\mu,S) \; {\rm Pr}(\mu) \; {\rm Pr}(S)$
In generating mock data $R_{{\rm obs},k}$ for galaxies $k$ we needed to:
The "Probabilistic Graphical Model" below illustrates this procedure, and also the probability distributions in the expression above.
In [1]:
# !pip install --upgrade daft
import daft
In [9]:
# Instantiate a PGM.
pgm = daft.PGM([2.3, 2.05], origin=[0.3, 0.3], grid_unit=2.6, node_unit=1.3, observed_style="inner")
# Hierarchical parameters.
pgm.add_node(daft.Node("mu", r"$\mu$", 0.5, 2, fixed=True))
pgm.add_node(daft.Node("S", r"$S$", 1.5, 2, fixed=True))
# Latent variable:
pgm.add_node(daft.Node("Rtrue", r"$R_{{\rm true},k}$", 1, 1))
# Data:
pgm.add_node(daft.Node("Robs", r"$R_{{\rm obs},k}$", 2, 1, observed=True))
# Add in the edges.
pgm.add_edge("mu", "Rtrue")
pgm.add_edge("S", "Rtrue")
pgm.add_edge("Rtrue", "Robs")
# And a plate.
pgm.add_plate(daft.Plate([0.5, 0.5, 2, 1], label=r"galaxies $k = 1, \cdots, 1000$",
shift=-0.1))
# Render and save.
pgm.render()
pgm.figure.savefig("samplingdistributions.png", dpi=300)
# Display:
from IPython.display import Image
Image(filename="samplingdistributions.png")
Out[9]:
In [ ]: