On plates and dimension independence

Hello,
I am just having some trouble understanding what exactly we mean when we say that plates specify independence among some dimension. For example, if I have the code
x_axis = pyro.plate('x_axis', width, dim=-2)
What does it precisely mean mathematically that we have independence along the -2 dimension? Does it mean that if I sample some “matrix” x then, the submatrices x[..., i, :] (with i having any admissible value) will be independent?
Thank you

That’s right, any pyro.sample() statements inside your plate(..., dim=-2) context will be conditionally independent along the -2 axis. The “conditional” part means that there can be dependence introduced if the parameters of those sample statements depend on a common upstream random variable outside of the plate. For example in this first model the random variables “loc” are completely independent:

def model_1(data):
    with pyro.plate("x_axis", data.size(-2), dim=-2):
        with pyro.plate("y_axis", data.size(-1), dim=-1):
            pyro.sample("scale", dist.LogNormal(0, 1))
            pyro.sample("loc", dist.Normal(0, scale))
            pyro.sample("obs", dist.Normal(loc, 1),
                        obs=data)

whereas in this second model the “loc” are only independent conditioned on “scale”, so we say they are conditionally independent along the “y_axis” but completely independent along the “x_axis”.

def model_2(data):
    with pyro.plate("x_axis", data.size(-2), dim=-2):
        pyro.sample("scale", dist.LogNormal(0, 1))
        with pyro.plate("y_axis", data.size(-1), dim=-1):
            pyro.sample("loc", dist.Normal(0, scale))
            pyro.sample("obs", dist.Normal(loc, 1),
                        obs=data)
1 Like

Thank you. I understand now!