disruption.stan 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. functions {
  2. vector z_scale(vector x) {
  3. return (x-mean(x))/sd(x);
  4. }
  5. }
  6. data {
  7. int<lower=1> N;
  8. int<lower=1> K;
  9. vector<lower=0>[N] soc_cap;
  10. vector<lower=0>[N] soc_div;
  11. vector<lower=0>[N] int_div;
  12. vector<lower=0>[N] age;
  13. vector<lower=0>[N] m;
  14. matrix<lower=0,upper=1>[N,K] x;
  15. vector[N] stable;
  16. array [N] int<lower=0,upper=K-1> primary_research_area;
  17. }
  18. transformed data {
  19. vector[N] z_m = z_scale(m);
  20. vector[N] z_soc_cap = z_scale(soc_cap);
  21. vector[N] z_soc_div = z_scale(exp(soc_div));
  22. vector[N] z_int_div = z_scale(exp(int_div));
  23. vector[N] z_age = z_scale(age);
  24. }
  25. parameters {
  26. real beta_soc_cap;
  27. real beta_soc_div;
  28. real beta_int_div;
  29. real beta_stable;
  30. real beta_age;
  31. vector[K] beta_x;
  32. real mu;
  33. real<lower=0> tau;
  34. real<lower=0> sigma;
  35. real lambda_div;
  36. real mu_div;
  37. real<lower=0> sigma_div;
  38. vector<lower=0,upper=1>[K] mu_x;
  39. vector<lower=1>[K] eta;
  40. real<lower=0,upper=1> mu_pop;
  41. real<lower=1> eta_pop;
  42. }
  43. model {
  44. vector[N] beta_research_area;
  45. for (k in 1:N) {
  46. beta_research_area[k] = beta_x[primary_research_area[k]+1];
  47. }
  48. vector[N] res_soc_div = z_scale(soc_div - (lambda_div*z_int_div + mu_div));
  49. beta_soc_cap ~ normal(0, 1);
  50. beta_soc_div ~ normal(0, 1);
  51. beta_int_div ~ normal(0, 1);
  52. beta_x ~ normal(0, tau);
  53. beta_stable ~ normal(0, 1);
  54. beta_age ~ normal(0, 1);
  55. z_soc_div ~ normal(lambda_div*z_int_div + mu_div, sigma_div);
  56. lambda_div ~ normal(0, 1);
  57. mu_div ~ normal(0, 1);
  58. sigma_div ~ exponential(1);
  59. mu ~ normal(0, 1);
  60. tau ~ exponential(1);
  61. sigma ~ exponential(1);
  62. z_m ~ normal(beta_soc_cap*z_soc_cap + beta_soc_div*res_soc_div + beta_int_div*z_int_div + beta_stable*stable + beta_age*z_age + beta_research_area + mu, sigma);
  63. eta ~ pareto(1, 1.5);
  64. mu_x ~ uniform(0, 1);
  65. eta_pop ~ pareto(1, 1.5);
  66. mu_pop ~ uniform(0, 1);
  67. for (k in 1:N) {
  68. m[k] ~ beta_proportion(mu_x[primary_research_area[k]+1], eta[primary_research_area[k]+1]);
  69. }
  70. m ~ beta_proportion(mu_pop, eta_pop);
  71. }
  72. generated quantities {
  73. real R2 = 0;
  74. {
  75. vector[N] beta_research_area;
  76. for (k in 1:N) {
  77. beta_research_area[k] = beta_x[primary_research_area[k]+1];
  78. }
  79. vector[N] res_soc_div = z_scale(soc_div - (lambda_div*z_int_div + mu_div));
  80. vector[N] pred = beta_soc_cap*z_soc_cap + beta_soc_div*res_soc_div + beta_int_div*z_int_div + beta_stable*stable + beta_age*z_age + beta_research_area + mu;
  81. R2 = mean(square(z_m-pred))/variance(z_m);
  82. R2 = 1-R2;
  83. }
  84. }