## Choosing different distributions based on a certain condition document.SUBSCRIPTION_OPTIONS = { "thing": "thread", "subscribed": false, "url": "subscribe", "icon": { "css": "fa fa-envelope-o" } };

Help
2014-06-04
2014-06-05

I am trying to define a node sat, such that it is 0 if another node con=0 and sat comes from a normal distribution if con≠0. Does anyone has any suggestion on how to make that work? Thanks!

Here are the things I have tried (along with error message), none of which work:

~~~~~~~
temp[i,1] ~ dcat(1)
temp[i,2] ~ dnorm(g[i],taus)
ind <- con[i]+1
sat[i] ~ temp[i,ind]

# I know for this case sat=1 when con=0, but that works too.

sat[i] ~ ifelse(con[i]==0, 0, dnorm(g[i],taus))

# Possibly because ifelse doesn't work with distributions

temp[i] ~ dnorm(g[i],taus)
sat[i] <- con[i]*temp[i]

# sat is observed in my model and logical nodes can't be observed

• Matt Denwood - 2014-06-04

What you're trying to fit is a mixture distribution I think, but it sounds a bit strange. Do you really have a mixture of integers (0) and non-integers (numbers on the real line from a normal distribution) in your observed data? If so, surely you know a-priori which observations are truly 0 and which aren't? If not, you may not want to use a normal distribution but perhaps an integer distribution such as a Poisson (in which case you would have a zero-inflated Poisson distribution, which is fairly straightforward to code).

The general way that you can code a mixture distribution when the distributional form is the same (but parameters differ) is as follows:

sat[i] ~ dnorm(mu[con[i]+1], tau[con[i]+1])
con[i] ~ dbern(prob)

This would work with any distribution, not just normal.

Or if you have a zero-inflated Poisson mixture you can use this code:

sat[i] ~ dpois(lambda[i])
lambda[i] <- mean * con[i]
con[i] ~ dbern(prob)

Note that for these types of code you will have to be careful about specifying sensible initial values for con.

Hope that helps,

Matt

Last edit: Matt Denwood 2014-06-04

Thanks Matt! I responded yesterday with a detailed explanation for my choice of random variables, but for some reason I don't see that anymore :/ Anyways, I decided on using the same family of distributions after all to make things work. Thanks again!

• Martyn Plummer - 2014-06-05

That happens to me to sometimes. You have to be careful to press the "post" button and not just the "preview" button.