DiD Model fails too build

I’m working on a difference in difference (DiD) model for an experiment where the response variable of interest is binary. I’m chiefly interested in the lift in success rate due to treatment exposure. Note that, pre-experiment, the treatment group has elevated success rate, relative to control group in absence of treatment exposure (hence why I’ve opted for a DiD model.

Here is my model:

bayesian_model = """
data {
  int<lower=0> N1;        // num pre-treat observations
  int<lower=0> N2;        // num post-treat observations
  int<lower=0> N3;        // num pre-ctrl observations
  int<lower=0> N4;        // num post-ctrl observations  
  
  int<lower=0> preTreat_N[N1];  // num pre-treat trials
  int<lower=0> preTreat_K[N1];  // num pre-treat successes
  
  int<lower=0> postTreat_N[N2];  // num post-treat trials
  int<lower=0> postTreat_K[N2];  // num post-treat successes  
  
  int<lower=0> preCtrl_N[N3];  // num pre-ctrl trials
  int<lower=0> preCtrl_K[N3];  // num pre-ctrl successes
  
  int<lower=0> postCtrl_N[N4];  // num post-ctrl trials
  int<lower=0> postCtrl_K[N4];  // num post-ctrl successes    
}

parameters {
  // model parameters
  real mu_preTreat_N;
  real mu_preTreat_K;  
  
  real mu_postTreat_N;
  real mu_postTreat_K;  
  
  real mu_preCtrl_N;
  real mu_preCtrl_K;
  
  real mu_postCtrl_N;
  real mu_postCtrl_K;  
  
  // hyper-prior parameters
  real mu_N;
  real<lower=0> std_N;
  
  real mu_K;
  real<lower=0> std_K;
}

model {
  // prior distributions
  mu_preTreat_N ~ normal(mu_N, std_N);
  mu_preTreat_K ~ normal(mu_K, std_K);  
  
  mu_postTreat_N ~ normal(mu_N, std_N);
  mu_postTreat_K ~ normal(mu_K, std_K);    
  
  mu_preCtrl_N ~ normal(mu_N, std_N);
  mu_preCtrl_K ~ normal(mu_K, std_K);  
  
  mu_postCtrl_N ~ normal(mu_N, std_N);
  mu_postCtrl_K ~ normal(mu_K, std_K);      

  // hyper-prior distributions 
  mu_N ~ normal(100,10);
  mu_K ~ normal(70,10);
  
  std_N ~ exponential(0.1);
  std_K ~ exponential(0.1);  

  // likelihood function
  for (i in 1:N1){
    preTreat_N[i] ~ normal(mu_preTreat_N, std_N);
    preTreat_K[i] ~ normal(mu_preTreat_K, std_K);    
  }
  
  for (i in 1:N2){
    postTreat_N[i] ~ normal(mu_postTreat_N, std_N);
    postTreat_K[i] ~ normal(mu_postTreat_K, std_K);    
  }  
  
  for (i in 1:N3){
    preCtrl_N[i] ~ normal(mu_preCtrl_N, std_N);
    preCtrl_K[i] ~ normal(mu_preCtrl_K, std_K);    
  }  
  
  for (i in 1:N4){
    postCtrl_N[i] ~ normal(mu_postCtrl_N, std_N);
    postCtrl_K[i] ~ normal(mu_postCtrl_K, std_K);    
  }    
  
}

generated quantities {
  real postTreat_rate;
  real preTreat_rate;
  real postCtrl_rate;
  real preCtrl_rate;
  real lift;
  
  postTreat_rate = mu_postTreat_K / mu_postTreat_N;
  preTreat_rate = mu_preTreat_K / mu_preTreat_N;
  postCtrl_rate = mu_postCtrl_K / mu_postCtrl_N;
  preCtrl_rate = mu_preCtrl_K / mu_preCtrl_N;
  
  lift = (postTreat_rate - postCtrl_rate) - (preTreat_rate - preCtrl_rate);
}
"""    

My problem is that model is failing to build. I suppose it’s too big. However, I only have 25 units in each group so data-wise, it’s not that cumbersome.

Perhaps my hyper-prior selections could be different?