Imagine a model with two binary data vectors a
and b
. Both represent events that can either occur or not occur. However, b
is impossible when a
does not occur. I’d like to model the probability that b
occurs given that a
occurs with a probit model.
In stan, I can do this with a conditional statement, e.g.
p[i] = (a[i] == 0) ? 0 : Phi( b0 );
which just makes the probability that b
occurs equal to 0 whenever a
does not occur; when a
does occur, I get my probit model. This seems to work well.
In greta, I don’t see that there are conditions. I’m trying to emulate this with a multiplication:
library(greta)
ar <- rep(c(0,1), each = 100)
br <- rep(c(0,1), 100)
br[a0 == 0] = 0
table(ar,br)
a <- as_data(ar)
b <- as_data(br)
b0 <- normal(0,1)
p <- (a == 0) * iprobit( b0 )
distribution(b) <- bernoulli( p )
m <- model(b0)
plot(m)
inits <- initials( b0 = 0)
draws <- mcmc(m, n_samples = 1000, initial_values = inits)
So whenever a
is 0, the probability is 0; else, it is Phi(b0). However, I cannot get this model to run. I get
Error: The log density could not be evaluated at these initial values.
Try using calculate() see whether they lead to values of other greta arrays in the model.
When I remove the (a == 0) *
bit, the model runs fine, but gives me the marginal estimate of the probability (which is not what I want, of course).
What’s the best way of accomplishing this in greta?