Advertisement
somebodycool69

zero inflated

Jun 9th, 2023
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. functions {
  2. real mixed_normal_lpdf(vector x, int N, real zero_prob, real mu, real sigma) {
  3. real out = 0.0;
  4. for (i in 1:N) {
  5. real dpoint = x[i];
  6. if (dpoint == 0.0) {
  7. out += log(zero_prob);
  8. } else {
  9. out += log(1 - zero_prob) + normal_lpdf(dpoint | mu, sigma);
  10. }
  11. }
  12. return out;
  13. }
  14. real mixed_normal_wrong_lpdf(vector x, int N, real zero_prob, real mu, real sigma) {
  15. real out = 0.0;
  16. for (i in 1:N) {
  17. real dpoint = x[i];
  18. if (dpoint == 0.0) {
  19. out += log_mix(
  20. zero_prob,
  21. 0.0,
  22. normal_lpdf(dpoint | mu, sigma)
  23. );
  24. } else {
  25. out += log(1 - zero_prob) + normal_lpdf(dpoint | mu, sigma);
  26. }
  27. }
  28. return out;
  29. }
  30. }
  31. data {
  32. int N;
  33. vector[N] obs;
  34. }
  35. parameters {
  36. real<lower=0, upper=1> zero_prob;
  37. real mu;
  38. real<lower=0> sigma;
  39. real<lower=0, upper=1> zero_prob_wrong;
  40. real mu_wrong;
  41. real<lower=0> sigma_wrong;
  42. }
  43. model {
  44. zero_prob ~ beta(1, 1);
  45. mu ~ normal(0, 1);
  46. sigma ~ normal(0, 1);
  47. obs ~ mixed_normal(N, zero_prob, mu, sigma);
  48.  
  49. zero_prob_wrong ~ beta(1, 1);
  50. mu_wrong ~ normal(0, 1);
  51. sigma_wrong ~ normal(0, 1);
  52. obs ~ mixed_normal_wrong(N, zero_prob_wrong, mu_wrong, sigma_wrong);
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement