Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- functions {
- real mixed_normal_lpdf(vector x, int N, real zero_prob, real mu, real sigma) {
- real out = 0.0;
- for (i in 1:N) {
- real dpoint = x[i];
- if (dpoint == 0.0) {
- out += log(zero_prob);
- } else {
- out += log(1 - zero_prob) + normal_lpdf(dpoint | mu, sigma);
- }
- }
- return out;
- }
- real mixed_normal_wrong_lpdf(vector x, int N, real zero_prob, real mu, real sigma) {
- real out = 0.0;
- for (i in 1:N) {
- real dpoint = x[i];
- if (dpoint == 0.0) {
- out += log_mix(
- zero_prob,
- 0.0,
- normal_lpdf(dpoint | mu, sigma)
- );
- } else {
- out += log(1 - zero_prob) + normal_lpdf(dpoint | mu, sigma);
- }
- }
- return out;
- }
- }
- data {
- int N;
- vector[N] obs;
- }
- parameters {
- real<lower=0, upper=1> zero_prob;
- real mu;
- real<lower=0> sigma;
- real<lower=0, upper=1> zero_prob_wrong;
- real mu_wrong;
- real<lower=0> sigma_wrong;
- }
- model {
- zero_prob ~ beta(1, 1);
- mu ~ normal(0, 1);
- sigma ~ normal(0, 1);
- obs ~ mixed_normal(N, zero_prob, mu, sigma);
- zero_prob_wrong ~ beta(1, 1);
- mu_wrong ~ normal(0, 1);
- sigma_wrong ~ normal(0, 1);
- obs ~ mixed_normal_wrong(N, zero_prob_wrong, mu_wrong, sigma_wrong);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement