107real
dist_lcdf(real delay, array[] real params,
int dist_id) {
109 return negative_infinity();
117 ? negative_infinity()
118 : lognormal_lcdf(delay | params[1], params[2]);
120 else if (dist_id == 2)
return gamma_lcdf(delay | params[1], params[2]);
121 else if (dist_id == 3)
return weibull_lcdf(delay | params[1], params[2]);
122 else if (dist_id == 4)
return exponential_lcdf(delay | params[1]);
123 else if (dist_id == 5)
return gengamma_lcdf(delay | params[1], params[2], params[3]);
124 else if (dist_id == 9)
return beta_lcdf(delay | params[1], params[2]);
125 else if (dist_id == 12)
return cauchy_lcdf(delay | params[1], params[2]);
126 else if (dist_id == 13)
return chi_square_lcdf(delay | params[1]);
127 else if (dist_id == 15)
return gumbel_lcdf(delay | params[1], params[2]);
128 else if (dist_id == 16)
return inv_gamma_lcdf(delay | params[1], params[2]);
129 else if (dist_id == 17)
return logistic_lcdf(delay | params[1], params[2]);
130 else if (dist_id == 18)
return normal_lcdf(delay | params[1], params[2]);
131 else if (dist_id == 19)
return inv_chi_square_lcdf(delay | params[1]);
132 else if (dist_id == 20)
return double_exponential_lcdf(delay | params[1], params[2]);
133 else if (dist_id == 21)
return pareto_lcdf(delay | params[1], params[2]);
134 else if (dist_id == 22)
return scaled_inv_chi_square_lcdf(delay | params[1], params[2]);
135 else if (dist_id == 23)
return student_t_lcdf(delay | params[1], params[2], params[3]);
136 else if (dist_id == 24)
return uniform_lcdf(delay | params[1], params[2]);
137 else if (dist_id == 25)
return von_mises_lcdf(delay | params[1], params[2]);
138 else if (dist_id == 26) {
140 int K = (size(params) - 1) %/% 2;
142 delay | to_vector(segment(params, 1, K + 1)),
143 to_vector(segment(params, K + 2, K))
146 else if (dist_id == 27 || dist_id == 28) {
150 int K = (size(params) - 1) %/% 2;
152 delay | to_vector(segment(params, 1, K + 1)),
153 to_vector(segment(params, K + 2, K))
156 else reject(
"Invalid distribution identifier: ", dist_id);
233 array[] real x_r, array[]
int x_i) {
235 int dist_id = x_i[1];
236 int primary_id = x_i[2];
237 real pwindow = x_r[2];
238 int dist_params_len = x_i[3];
239 int primary_params_len = x_i[4];
242 array[dist_params_len] real params;
243 if (dist_params_len) {
244 params = theta[1:dist_params_len];
246 array[primary_params_len] real primary_params;
247 if (primary_params_len) {
248 int primary_loc = num_elements(theta);
249 primary_params = theta[primary_loc - primary_params_len + 1:primary_loc];
252 real log_cdf =
dist_lcdf(t | params, dist_id);
253 real log_primary_pdf =
primary_lpdf(d - t | primary_id, primary_params, 0, pwindow);
255 return rep_vector(exp(log_cdf + log_primary_pdf), 1);