What are some good ways of obtaining the likelihood of observing some data given the parameters ( P(y|\theta), where I feed in y and \theta )? I couldn’t quite find it in the documentation.

edit: would be especially helpful if I can get likelihoods when sampling from the posterior using one of the samplers, such as NUTS.

To elaborate, here’s a simple example showing how to actually do it:

```
using Turing
@model function demo(x)
μ ~ Normal(0, 1)
σ ~ Exponential(1)
x .~ Normal(μ, σ)
end
m = demo(randn(10))
loglikelihood(m, (μ=2, σ=3))
```

The `MCMCChain`

from sampling contains two (identical?) fields, `:lp`

and `:log_density`

, with the value of the log-posterior at each sample point, but those values will include the priors as well as the likelihood. Not sure if there’s a built-in way to get that from a posterior chain, but you can calculate the log-likelihood manually inside the model, return it, and get it after sampling via `generated_quantities`

:

```
@model function demo1(x)
μ ~ Normal(0, 1)
σ ~ Exponential(1)
loglik = loglikelihood(Normal(μ, σ), x)
Turing.@addlogprob!(loglik)
return loglik
end
m1 = demo1(randn(10))
c1 = sample(m1, NUTS(), 100)
ll1 = generated_quantities(m1, c1)
```

4 Likes

Thanks so much for the detailed example!

1 Like