Hi all,

I am new to Turing.jl and bayesian inference in general. I have specified the following model:

```
@model function switch_model(r, m, n)
hm ~ Uniform(1, 10)
am ~ Uniform(0, 10)
κm ~ Uniform(0, 1)
Δm ~ Uniform(0, 1)
z = tzeros(Int, n)
for i in 1:n
z[i] ~ Bernoulli(κm)
if z[i] == 1
Pm = f(r[i],hm,am)
m[i] ~ Bernoulli(Pm)
else
m[i] ~ Bernoulli(Δm)
end
end
end;
```

The length of `r`

is approx 250k observations. It contains values from 1-8 i.e. `r = rand(1:8,250000)`

. The function `f`

is a kind of sigmoid which takes values between zero and one (interpretated as a probability `Pm`

). The observations `m`

is a vector of booleans. I am not normalising values in `r`

and would prefer not to unless necessary so I can use the inferred parameters as they come out of the inference process.

I am aware that this is a large number of observations but I would expect Turing to be quite quick given that it is a simple model with a low number of parameters. In general I am unsure what solver to use - I have tried NUTs using

```
model = switch_model(r, m, n);
chn = sample(model, NUTS(), 1000)
```

This is very slow - in fact I think it breaks my kernel most of the time. I thought this was likely because of the intermediate `z[i]`

in the logic which is been tracked by the solver. I therefore tried to rewrite the model:

```
@model function switch_experiment_mm(r, m, n)
hm ~ Uniform(1, 10)
am ~ Uniform(0, 10)
κm ~ Uniform(0, 1)
Δm ~ Uniform(0, 1)
for i in 1:n
Pm = f(r[i],hm,am)
m[i] ~ MixtureModel(Bernoulli[
Bernoulli(Pm),
Bernoulli(Δm)], [κm, 1-κm])
end
end;
```

As I think my logic is equivalent to some sort of mixture model. However this also doesn’t work and seems to break the kernel again.

Am I doing something fundamentally wrong or is this just a case of large number of observations = slow?