Stan не поддерживает целочисленные параметры, поэтому технически вы не можете этого сделать. Для двух реальных переменных это будет выглядеть так:
parameters {
real x;
real y;
}
transformed parameters {
real z = x + y;
}
model {
x ~ normal(0, 1);
y ~ gamma(0.1, 2);
}
Тогда вы получите распределение суммы для z
. Если переменные являются дискретными, они не будут компилироваться.
Если вам не нужно z
в модели, то вы можете сделать это в блоке сгенерированных количеств,
generated quantities {
int x = binomial_rng(a, b);
int y = poisson_rng(c);
int z = x + y;
}
Недостатком этого является то, что ни одна из переменных не доступна в блоке модели. Если вам нужны дискретные параметры, они должны быть обособлены, как описано в главе руководства пользователя по скрытым дискретным параметрам (также в главе о смесях и НММ). С Пуассоном это не так просто, потому что поддержка не ограничена. Если ожидания двух дискретных распределений невелики, вы можете сделать это примерно с помощью al oop над вероятными значениями.
Из примера в исходном посте видно, что z
- это данные. Это немного другая маргинализация по сравнению с x
и y
, но вы суммируете только по x
и y
, так что x + y = z
, так что комбинаторика значительно уменьшается.