I’ve been exploring Turing, but so far haven’t had much luck. I’ve written the following very simple model

```
using Distributions, Turing
import Mamba: describe
xs = rand(Normal(3.4, 1.0), 1000)
@model gaussian(xs) = begin
mu ~ Normal(0, 2)
for x in xs
x ~ Normal(mu, 1.0)
end
return mu
end
chn = sample(gaussian(xs), NUTS(1000, 0.65))
describe(chn)
```

But the model takes about 2 minutes to run, estimates that `mu`

has a posterior mean of -0.72, with a large SD and low (14) ESS. The model also seems to consider `x`

to be a parameter (depending on the sampling scheme that I choose). However, no sampling scheme converges to the correct value for `mu`

. Any idea as to what I’m doing wrong?

Did you ever get this resolved? Just curious, I’ve been wanting to try out `Turing`

but not sure what state the package is in.

Hi @joshualeond I’ve made some progress

```
using Distributions, Turing
import Mamba: describe
xs = rand(Normal(3.4, 1.0), 1000)
@model gaussian(xs) = begin
mu ~ Normal(0, 2)
for i = 1:length(xs)
xs[i] ~ Normal(mu, 1.0)
end
return mu
end
chn1 = sample(gaussian(xs), SMC(1000))
chn2 = sample(gaussian(xs), NUTS(1000, 0.65))
describe(chn1)
describe(chn2)
```

Changing the looping to be by index versus iterating over the vector, has improved the posterior estimates. Here are the results:

```
julia> describe(chn1)
Iterations = 1:1000
Thinning interval = 1
Chains = 1
Samples per chain = 1000
Empirical Posterior Estimates:
Mean SD Naive SE MCSE ESS
mu 3.408908 0.0521018024787957695 0.00164760366033201355 0.01324662929046057334 15.470157
le -1414.123078 0.0000000000018198996 0.00000000000005755028 0.00000000000007579123 576.576577
lp 0.000000 0.0000000000000000000 0.00000000000000000000 0.00000000000000000000 NaN
Quantiles:
2.5% 25.0% 50.0% 75.0% 97.5%
mu 3.3076814 3.3632279 3.4025507 3.4490372 3.4784503
le -1414.1230781 -1414.1230781 -1414.1230781 -1414.1230781 -1414.1230781
lp 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
julia> describe(chn2)
Iterations = 1:1000
Thinning interval = 1
Chains = 1
Samples per chain = 1000
Empirical Posterior Estimates:
Mean SD Naive SE MCSE ESS
lf_num 7.358000000 1.10792864×10¹ 0.3503577980 1.8537210626 35.72192
mu 3.292585690 4.406610973×10⁻¹ 0.0139349274 0.1157008162 14.50563
elapsed 0.032053929 2.440134579×10⁻¹ 0.0077163831 0.0108565669 505.17579
lp -7703.078442664 1.31850594×10⁵ 4169.4818711527 6006.8402507160 481.80579
lf_eps 0.023993031 2.6679142717×10⁻² 0.0008436686 0.0031844537 70.18978
Quantiles:
2.5% 25.0% 50.0% 75.0% 97.5%
lf_num 1.0000000000 3.0000000000 3.00000000 7.000000000 47.0000000
mu 2.2687571970 3.3299950598 3.40077973 3.448397104 3.8250589
elapsed 0.0021599250 0.0062511508 0.00850430 0.019544800 0.1496765
lp -3384.4951580265 -1549.2305191448 -1416.33487980 -1412.430003388 -1411.2213349
lf_eps 0.0015783486 0.0051715866 0.02609497 0.026094970 0.0902517
```

Both samplers estimate the posterior mean close to the empirical mean (`3.41373`

). The SMC sampler has credible interval close to what I would expect. However, the NUTS sampler has way too wide of a CI, and both samplers have a weirdly small ESS.

It’s possible that I am still doing something wrong. If you try out Turing and get any further, please let me know!

1 Like