posteriors.stan 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. // TODO
  2. // use speech rates to set priors on truth_vocs
  3. data {
  4. int<lower=1> n_classes; // number of classes
  5. // analysis data block
  6. int<lower=1> n_recs;
  7. int<lower=1> n_children;
  8. array[n_recs] int<lower=1> children;
  9. array[n_recs] real<lower=1> age;
  10. array[n_recs] int<lower=-1> siblings;
  11. array[n_children] int<lower=1> corpus;
  12. real<lower=0> recs_duration;
  13. // speaker confusion data block
  14. int<lower=1> n_clips; // number of clips
  15. int<lower=1> n_groups; // number of groups
  16. int<lower=1> n_corpora;
  17. int<lower=0> n_validation;
  18. // actual speech rates
  19. int<lower=1> n_rates;
  20. int<lower=1> n_speech_rate_children;
  21. array [n_rates,n_classes] int<lower=0> speech_rates;
  22. array [n_rates] int group_corpus;
  23. array [n_rates] real<lower=0> durations;
  24. array [n_rates] real<lower=0> speech_rate_age;
  25. array [n_rates] int<lower=-1> speech_rate_siblings;
  26. array [n_rates] int<lower=1,upper=n_speech_rate_children> speech_rate_child;
  27. // parallel processing
  28. int<lower=1> threads;
  29. }
  30. transformed data {
  31. array[n_speech_rate_children] int<lower=1> speech_rate_child_corpus;
  32. array[n_children] int<lower=-1> child_siblings;
  33. array[n_speech_rate_children] int<lower=-1> speech_rate_child_siblings;
  34. int no_siblings = 0;
  35. int has_siblings = 0;
  36. for (k in 1:n_rates) {
  37. speech_rate_child_corpus[speech_rate_child[k]] = group_corpus[k];
  38. }
  39. for (k in 1:n_recs) {
  40. child_siblings[children[k]] = siblings[k];
  41. }
  42. for (c in 1:n_children) {
  43. if (child_siblings[c] == 0) {
  44. no_siblings += 1;
  45. }
  46. else if (child_siblings[c] > 0) {
  47. has_siblings += 1;
  48. }
  49. }
  50. for (k in 1:n_rates) {
  51. speech_rate_child_siblings[speech_rate_child[k]] = speech_rate_siblings[k];
  52. }
  53. }
  54. parameters {
  55. #include "blocks/behavior_model_parameters.stan"
  56. #include "blocks/human_annotations_parameters.stan"
  57. }
  58. model {
  59. //actual model
  60. #include "blocks/behavior_model_priors_uncentered.stan"
  61. #include "blocks/human_annotations_uncentered.stan"
  62. }
  63. generated quantities {
  64. matrix<lower=0>[n_children,n_classes-1] mu_child_level;
  65. vector [n_children] child_dev_age;
  66. matrix<lower=0> [n_recs, n_classes] truth_vocs;
  67. for (c in 1:n_children) {
  68. child_dev_age[c] = normal_rng(alpha_dev, sigma_dev);
  69. // if there is sibling data
  70. if (child_siblings[c]>=0) {
  71. int distrib = child_siblings[c]>0?2:1;
  72. mu_child_level[c,1] = gamma_rng(
  73. alpha_corpus_level[distrib,1,corpus[c]],
  74. (alpha_corpus_level[distrib,1,corpus[c]]/(mu_corpus_level[1,corpus[c]]*exp(
  75. child_siblings[c]>0?beta_sib_och:0
  76. )))
  77. );
  78. mu_child_level[c,2:] = to_vector(gamma_rng(
  79. alpha_corpus_level[distrib,2:,corpus[c]],
  80. (alpha_corpus_level[distrib,2:,corpus[c]]./mu_corpus_level[2:,corpus[c]]*exp(
  81. child_siblings[c]>0?beta_sib_adu/10:0
  82. ))
  83. ))'; //'
  84. }
  85. // otherwise
  86. else {
  87. // assuming no sibling
  88. if (bernoulli_rng(p_sib)) {
  89. mu_child_level[c,1] = gamma_rng(alpha_corpus_level[2,1,corpus[c]], alpha_corpus_level[2,1,corpus[c]]/(mu_corpus_level[1,corpus[c]]*exp(beta_sib_och)));
  90. mu_child_level[c,2] = gamma_rng(alpha_corpus_level[2,2,corpus[c]], alpha_corpus_level[2,2,corpus[c]]/(mu_corpus_level[2,corpus[c]]*exp(beta_sib_adu/10)));
  91. mu_child_level[c,3] = gamma_rng(alpha_corpus_level[2,3,corpus[c]], alpha_corpus_level[2,3,corpus[c]]/(mu_corpus_level[3,corpus[c]]*exp(beta_sib_adu/10)));
  92. }
  93. else {
  94. mu_child_level[c,1] = gamma_rng(alpha_corpus_level[1,1,corpus[c]], alpha_corpus_level[1,1,corpus[c]]/(mu_corpus_level[1,corpus[c]]));
  95. mu_child_level[c,2] = gamma_rng(alpha_corpus_level[1,2,corpus[c]], alpha_corpus_level[1,2,corpus[c]]/(mu_corpus_level[2,corpus[c]]));
  96. mu_child_level[c,3] = gamma_rng(alpha_corpus_level[1,3,corpus[c]], alpha_corpus_level[1,3,corpus[c]]/(mu_corpus_level[3,corpus[c]]));
  97. }
  98. }
  99. }
  100. for (k in 1:n_recs) {
  101. real chi_mu = mu_pop_level[1]*exp(
  102. child_dev_age[children[k]]*age[k]/12.0/10.0+beta_dev*(mu_child_level[children[k],2]+mu_child_level[children[k],3]-mu_pop_level[3]-mu_pop_level[4])*age[k]/12.0/10.0
  103. );
  104. truth_vocs[k,1] = 1000*recs_duration*gamma_rng(alpha_child_level[1], alpha_child_level[1]/chi_mu);
  105. truth_vocs[k,2:] = 1000*recs_duration*to_vector(gamma_rng(alpha_child_level[2:], alpha_child_level[2:]./mu_child_level[children[k],:]'))'; //'
  106. }
  107. }