What to do when the sum has no closed-form posterior?

import aeppl
import aesara.tensor as at
 
srng = at.random.RandomStream(0)
 
x_rv = srng.normal(0, 1)
y_rv = srng.lognormal(0, 1)
z = x_rv + y_rv
 
logprob, (x_vv, z_vv) = aeppl.joint_logprob(x_rv, z)

In this case we should be able to compute the density by binding to the density of , and binding to the density of .

Now slightly more complicated. Is this defined without or being stochastic? (I don’t think so). And if it is not, then how do we proceed about tying the values taken by and together?

import aeppl
import aesara.tensor as at
 
srng = at.random.RandomStream(0)
 
mu_rv = srng.normal(0, 1)
sigma_rv = srng.halfcauchy(1)
 
x_rv = srng.normal(mu_rv, 1)
y_rv = srng.lognormal(0, sigma_rv)
 
z = x_rv + y_rv
 
logprob, (mu_vv, sigma_vv, z_vv) = aeppl.joint_logprob(x_rv, z)

Finally the following example:

import aeppl
import aesara.tensor as at
 
srng = at.random.RandomStream(0)
 
a = srng.normal(0, 1)
b = srng.normal(0, 1)
c = srng.normal(0, 1)
d = srng.normal(0, 1)
 
X_rv = at.uniform(a, b)
Y_rv = at.uniform(c, d)
Z_rv = X_rv + Y_rv
 
logprob, value_variables = aeppl.joint_logprob(a, b, c, d, Z_rv)

In this case ‘s density has a closed-form expression; has a trapezoidal distribution. So we should be able to replace this sum with this distribution directly.

A list of cases where the convolution of two or more random variables has a closed-form solutions, or rather is a known measure, is available on Wikipedia.