26real
dist_lcdf(real delay, array[] real params,
int dist_id) {
27 if (delay <= 0)
return negative_infinity();
30 if (dist_id == 1)
return lognormal_lcdf(delay | params[1], params[2]);
31 else if (dist_id == 2)
return gamma_lcdf(delay | params[1], params[2]);
32 else if (dist_id == 3)
return weibull_lcdf(delay | params[1], params[2]);
33 else if (dist_id == 4)
return exponential_lcdf(delay | params[1]);
34 else if (dist_id == 9)
return beta_lcdf(delay | params[1], params[2]);
35 else if (dist_id == 12)
return cauchy_lcdf(delay | params[1], params[2]);
36 else if (dist_id == 13)
return chi_square_lcdf(delay | params[1]);
37 else if (dist_id == 15)
return gumbel_lcdf(delay | params[1], params[2]);
38 else if (dist_id == 16)
return inv_gamma_lcdf(delay | params[1], params[2]);
39 else if (dist_id == 17)
return logistic_lcdf(delay | params[1], params[2]);
40 else if (dist_id == 18)
return normal_lcdf(delay | params[1], params[2]);
41 else if (dist_id == 19)
return inv_chi_square_lcdf(delay | params[1]);
42 else if (dist_id == 20)
return double_exponential_lcdf(delay | params[1], params[2]);
43 else if (dist_id == 21)
return pareto_lcdf(delay | params[1], params[2]);
44 else if (dist_id == 22)
return scaled_inv_chi_square_lcdf(delay | params[1], params[2]);
45 else if (dist_id == 23)
return student_t_lcdf(delay | params[1], params[2], params[3]);
46 else if (dist_id == 24)
return uniform_lcdf(delay | params[1], params[2]);
47 else if (dist_id == 25)
return von_mises_lcdf(delay | params[1], params[2]);
48 else reject(
"Invalid distribution identifier: ", dist_id);
73real
primary_lpdf(real x,
int primary_id, array[] real params, real xmin, real xmax) {
75 if (primary_id == 1)
return uniform_lpdf(x | xmin, xmax);
76 if (primary_id == 2)
return expgrowth_lpdf(x | xmin, xmax, params[1]);
78 reject(
"Invalid primary distribution identifier");
94 array[] real x_r, array[]
int x_i) {
97 int primary_id = x_i[2];
98 real pwindow = x_r[2];
99 int dist_params_len = x_i[3];
100 int primary_params_len = x_i[4];
103 array[dist_params_len] real params;
104 if (dist_params_len) {
105 params = theta[1:dist_params_len];
107 array[primary_params_len] real primary_params;
108 if (primary_params_len) {
109 int primary_loc = num_elements(theta);
110 primary_params = theta[primary_loc - primary_params_len + 1:primary_loc];
113 real log_cdf =
dist_lcdf(t | params, dist_id);
114 real log_primary_pdf =
primary_lpdf(d - t | primary_id, primary_params, 0, pwindow);
116 return rep_vector(exp(log_cdf + log_primary_pdf), 1);