Skip to content
Snippets Groups Projects
code_full.stan 1.89 KiB
Newer Older
  • Learn to ignore specific revisions
  • data {
      int<lower=1> D;
      int<lower=0> N_obs;
      int<lower=0> N_cens;
      int<lower=0> M;
      real<lower=0> sigma_tau;
      int<lower=1, upper=M> jj_obs[N_obs]; // judge_ID
      int<lower=1, upper=M> jj_cens[N_cens]; // judge_ID
      int<lower=0, upper=1> dec_obs[N_obs];
      int<lower=0, upper=1> dec_cens[N_cens];
      row_vector[D] X_obs[N_obs];
      row_vector[D] X_cens[N_cens];
      int<lower=0, upper=1> y_obs[N_obs];
    }
    
    parameters {
      vector[N_obs] Z_obs;
      vector[N_cens] Z_cens;
      real alpha_T[M];
      vector[D] beta_XT_raw;
      vector[D] beta_XY_raw;
      real<lower=0> beta_ZT_raw; // jungimainen oletus latentin pos. vaik.
      real<lower=0> beta_ZY_raw; // jungimainen oletus latentin pos. vaik.
      
      real<lower=0> tau_XT;
      real<lower=0> tau_XY;
      real<lower=0> tau_ZT;
      real<lower=0> tau_ZY;
    
    }
    
    transformed parameters {
      vector[D] beta_XT;
      vector[D] beta_XY;
      real<lower=0> beta_ZT; // jungimainen oletus latentin pos. vaik.
      real<lower=0> beta_ZY; // jungimainen oletus latentin pos. vaik.
    
      beta_XT = tau_XT * beta_XT_raw;
      beta_XY = tau_XY * beta_XY_raw;
      beta_ZT = tau_ZT * beta_ZT_raw;
      beta_ZY = tau_ZY * beta_ZY_raw;
    }
    
    model {
      Z_obs ~ normal(0, 1);
      Z_cens ~ normal(0, 1);
      
      tau_XT ~ normal(0, sigma_tau);
      tau_XY ~ normal(0, sigma_tau);
      tau_ZT ~ normal(0, sigma_tau);
      tau_ZY ~ normal(0, sigma_tau);
      
      beta_XT_raw ~ normal(0, 1);
      beta_XY_raw ~ normal(0, 1);
      beta_ZT_raw ~ normal(0, 1);
      beta_ZY_raw ~ normal(0, 1);
      
      for(i in 1:N_obs){
        dec_obs[i] ~ bernoulli_logit(alpha_T[jj_obs[i]] + X_obs[i] * beta_XT + beta_ZT * Z_obs[i]);
        y_obs[i] ~ bernoulli_logit(X_obs[i] * beta_XY + beta_ZY * Z_obs[i]);
      }
      
      for(i in 1:N_cens)
        dec_cens[i] ~ bernoulli_logit(alpha_T[jj_cens[i]] + X_cens[i] * beta_XT + beta_ZT * Z_cens[i]);
    }
    
    generated quantities {
      int<lower=0, upper=1> y_est[N_cens];
      
      for(i in 1:N_cens){
        y_est[i] = bernoulli_logit_rng(X_cens[i] * beta_XY + beta_ZY * Z_cens[i]);
      }
    }