# Understand Importance sampling for marginal computation

I’m new to probabilistic programming. This question pertains to the “Inference in Pyro: From Stochastic Functions to Marginal Distributions” tutorial file.

I’m using pyro version: 0.1.2

In the tutorial

When called with an input guess, marginal first uses posterior to generate a sequence of weighted execution traces given guess, then builds a histogram over return values from the traces, and finally returns a sample drawn from the histogram. Calling marginal with the same arguments more than once will sample from the same histogram.

Just trying to understand what this means mathematically.

My thinking is along the following lines:

Equation (1) represents the marginal we’re trying to compute.
Equation (3) sort of represents what I think is going on.

Steps:

1. q(w) is proposal distribution (Q1. Where is q(w) specified in tutorial?)
2. Sample `num_sample` times to get `num_sample` samples of W (importance weight)
3. Take the max occuring sample (from histogram)
4. Sample from f(meas | w) where w is taken from histogram and output as sample from marginal

Am I thinking correctly here?

The prior (`f(w | guess)` in this case?) is used as the proposal distribution. It looks like the `Importance` class takes in a `guide` and when `None`, the code uses the input model with all the observed values blocked (using `poutine.block`).

If I understand correctly, then we build an empirical distribution `f(meas | guess)` by building a histogram of 100 values. Since we are using the prior as the guide, in this case the weights will always be 1 (or `log p` always 0).

During sampling (the call to `marginal()`), it just creates a Categorial distribution over all the samples. In this case the categorical distribution will be uniform because all weights are same `1.0`.