16 if (primary_id != 1)
return 0;
17 return dist_id == 2 || dist_id == 1 || dist_id == 3 || dist_id == 5;
41 if (dist_id == 26 || dist_id == 27 || dist_id == 28) {
42 return primary_id == 1 || primary_id == 2;
70 real log_A = log_sum_exp(terms_d[1], terms_q[2]);
71 real log_B = log_sum_exp(terms_q[1], terms_d[2]);
75 if (log_A == negative_infinity() && log_B == negative_infinity()) {
76 return negative_infinity();
78 return log_diff_exp(log_A, log_B) - log(pwindow);
92 array[] real params) {
94 return rep_vector(negative_infinity(), 2);
96 real shape = params[1];
97 real rate = params[2];
99 real log_E = log(shape) - log(rate);
102 real log_F_T_k = gamma_lcdf(t | shape, rate);
103 real gamma_kp1_pdf_log = shape * log(rate * t) - rate * t
105 real log_F_T_kp1 = log_diff_exp(log_F_T_k, gamma_kp1_pdf_log);
106 return [log(t) + log_F_T_k, log_E + log_F_T_kp1]
';
123vector primarycensored_lognormal_uniform_terms(real t,
124 array[] real params) {
126 real sigma = params[2];
127 real mu_sigma2 = mu + square(sigma);
128 // log E where E = exp(mu + sigma^2/2) is the mean of the delay
129 real log_E = mu + 0.5 * square(sigma);
130 real log_t_F_T = lognormal_lcdf_underflows(t, mu, sigma)
131 ? negative_infinity()
132 : log(t) + lognormal_lcdf(t | mu, sigma);
133 real log_E_tF_T = lognormal_lcdf_underflows(t, mu_sigma2, sigma)
134 ? negative_infinity()
135 : log_E + lognormal_lcdf(t | mu_sigma2, sigma);
136 return [log_t_F_T, log_E_tF_T]';
154 real x = pow(t * inv(scale), shape);
155 real a = 1 + inv(shape);
160 return gamma_lcdf(x | a, 1) + lgamma(a);
176 array[] real params) {
178 return rep_vector(negative_infinity(), 2);
180 real shape = params[1];
181 real scale = params[2];
183 log(t) + weibull_lcdf(t | shape, scale),
205vector primarycensored_gengamma_uniform_terms(real t,
206 array[] real params) {
208 return rep_vector(negative_infinity(), 2);
210 real shape = params[1];
211 real scale = params[2];
213 real k_shift = k + inv(shape);
214 real log_E = log(scale) + lgamma(k_shift) - lgamma(k);
216 log(t) + gengamma_lcdf(t | shape, scale, k),
217 log_E + gengamma_lcdf(t | shape, scale, k_shift)
234 array[] real params) {
237 }
else if (dist_id == 1) {
239 }
else if (dist_id == 3) {
241 }
else if (dist_id == 5) {
244 reject(
"Invalid distribution identifier: ", dist_id);
341 array[] real primary_params) {
342 real q = max({d - pwindow, 0});
344 if (dist_id == 2 && primary_id == 1) {
346 }
else if (dist_id == 1 && primary_id == 1) {
348 }
else if (dist_id == 3 && primary_id == 1) {
350 }
else if (dist_id == 5 && primary_id == 1) {
352 }
else if (dist_id == 26) {
354 int K = (size(params) - 1) %/% 2;
356 d | to_vector(segment(params, 1, K + 1)),
357 to_vector(segment(params, K + 2, K)),
358 primary_id, primary_params, pwindow
360 }
else if (dist_id == 27 || dist_id == 28) {
364 int K = (size(params) - 1) %/% 2;
366 d | to_vector(segment(params, 1, K + 1)),
367 to_vector(segment(params, K + 2, K)),
368 primary_id, primary_params, pwindow
371 return negative_infinity();
392 data real pwindow, data real L,
393 data real D,
int primary_id,
394 array[] real primary_params) {
395 if (d <= L)
return negative_infinity();
396 if (d >= D)
return 0;
399 d, dist_id, params, pwindow, primary_id, primary_params
403 if (!is_inf(D) || L > 0) {
405 L, D, dist_id, params, pwindow, primary_id, primary_params
407 real log_cdf_L = bounds[1];
408 real log_cdf_D = bounds[2];
435 data real pwindow, data real L,
436 data real D,
int primary_id,
437 array[] real primary_params) {
462 pwindow >= 1 && floor(pwindow) == pwindow;
490 int pw = to_int(pwindow);
493 array[n + 1] vector[2] terms;
494 for (t in max(start - pw, 0):n) {
499 terms[d + 1], terms[max(d - pw, 0) + 1], pwindow
real log_weibull_g(real t, real shape, real scale)
vector primarycensored_weibull_uniform_terms(real t, array[] real params)
vector primarycensored_lognormal_uniform_terms(real t, array[] real params)
vector primarycensored_gengamma_uniform_terms(real t, array[] real params)
int check_for_uniform_terms(int dist_id, int primary_id)
vector primarycensored_gamma_uniform_terms(real t, array[] real params)
int check_for_analytical_vectorized(int dist_id, int primary_id, data real pwindow)
vector primarycensored_uniform_terms(real t, data int dist_id, array[] real params)
real primarycensored_uniform_lcdf_from_terms(vector terms_d, vector terms_q, data real pwindow)
int check_for_analytical(int dist_id, int primary_id)
real primarycensored_weibull_uniform_lcdf(data real d, real q, array[] real params, data real pwindow)
vector primarycensored_analytical_lcdf_vectorized(data int start, data int n, data int dist_id, array[] real params, data real pwindow)
real primarycensored_analytical_lcdf_raw(data real d, int dist_id, array[] real params, data real pwindow, int primary_id, array[] real primary_params)
real primarycensored_lognormal_uniform_lcdf(data real d, real q, array[] real params, data real pwindow)
real primarycensored_analytical_lcdf(data real d, int dist_id, array[] real params, data real pwindow, data real L, data real D, int primary_id, array[] real primary_params)
real primarycensored_gengamma_uniform_lcdf(data real d, real q, array[] real params, data real pwindow)
real primarycensored_gamma_uniform_lcdf(data real d, real q, array[] real params, data real pwindow)
real primarycensored_analytical_cdf(data real d, int dist_id, array[] real params, data real pwindow, data real L, data real D, int primary_id, array[] real primary_params)
real discretestep_lcdf(data real d, vector boundaries, vector pmf, int primary_id, array[] real primary_params, data real pwindow)
real discretehazard_lcdf(data real d, vector boundaries, vector hazards, int primary_id, array[] real primary_params, data real pwindow)
real primarycensored_apply_truncation(real log_cdf, real log_cdf_L, real log_normalizer, real L)
real primarycensored_log_normalizer(real log_cdf_D, real log_cdf_L, real L)
vector primarycensored_truncation_bounds(data real L, data real D, data int dist_id, array[] real params, data real pwindow, data int primary_id, array[] real primary_params)