Hi all, my generative model has the following form.

P(y |\theta) = \int P(y|x) P(x|\theta) dx

I want to get the posterior of θ given fixed data y. But I unfortunately don’t have an analytical solution for the integral over x. As a result, I’m implementing the model in turing with the following structure and using sampling to get a posterior on θ

```
@model my_func()
θ ~ prior_dist()
x ~ dist1(θ)
y ~ dist2(x)
end
```

However, this results in a really high number of dimensions for sampling, since all the x are also in the posterior. Is there a way to integrate out a latent variable in Turing to avoid this problem?

dist1 is a high dimensional multivariate dist?

Unless you have an analytic form there isn’t going to be an easy way to do high dim integration

Indeed dist1 is a high dimensional multivariate dist. In my case, it’s something along the lines of MvNormal(0, θ). However, there are some transformations in between in my actual model so I couldn’t integrate analytically.

Is it perhaps possible to marginalize out x by sampling x within each turing sampling step, assuming that the following is correct?

P(y|\theta) = \int P(y|x)P(x|\theta) dx = \frac{1}{N} \sum_{i=1}^{N} P(y|x_i)

x \sim dist1(x|\theta)

I think you’re trying to do something like:

```
theta ~ MyPrior()
x = rand(MvNormal(0,theta))
xprime = transform(x)
inclp = sum(logpdf(Ydist(xp),y) for xp in xprime)
@addlogprob!(inclp)
```

Which you can definitely try… see what you think.

1 Like

Thanks so much for this solution! I was just introduced to @addlogprob! the other day but didn’t realize you can use it like this.