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);
156 return log(gamma_p(a, x)) + lgamma(a);
172 array[] real params) {
174 return rep_vector(negative_infinity(), 2);
176 real shape = params[1];
177 real scale = params[2];
179 log(t) + weibull_lcdf(t | shape, scale),
201vector primarycensored_gengamma_uniform_terms(real t,
202 array[] real params) {
204 return rep_vector(negative_infinity(), 2);
206 real shape = params[1];
207 real scale = params[2];
209 real k_shift = k + inv(shape);
210 real log_E = log(scale) + lgamma(k_shift) - lgamma(k);
212 log(t) + gengamma_lcdf(t | shape, scale, k),
213 log_E + gengamma_lcdf(t | shape, scale, k_shift)
230 array[] real params) {
233 }
else if (dist_id == 1) {
235 }
else if (dist_id == 3) {
237 }
else if (dist_id == 5) {
240 reject(
"Invalid distribution identifier: ", dist_id);
337 array[] real primary_params) {
338 real q = max({d - pwindow, 0});
340 if (dist_id == 2 && primary_id == 1) {
342 }
else if (dist_id == 1 && primary_id == 1) {
344 }
else if (dist_id == 3 && primary_id == 1) {
346 }
else if (dist_id == 5 && primary_id == 1) {
348 }
else if (dist_id == 26) {
350 int K = (size(params) - 1) %/% 2;
352 d | to_vector(segment(params, 1, K + 1)),
353 to_vector(segment(params, K + 2, K)),
354 primary_id, primary_params, pwindow
356 }
else if (dist_id == 27 || dist_id == 28) {
360 int K = (size(params) - 1) %/% 2;
362 d | to_vector(segment(params, 1, K + 1)),
363 to_vector(segment(params, K + 2, K)),
364 primary_id, primary_params, pwindow
367 return negative_infinity();
388 data real pwindow, data real L,
389 data real D,
int primary_id,
390 array[] real primary_params) {
391 if (d <= L)
return negative_infinity();
392 if (d >= D)
return 0;
395 d, dist_id, params, pwindow, primary_id, primary_params
399 if (!is_inf(D) || L > 0) {
401 L, D, dist_id, params, pwindow, primary_id, primary_params
403 real log_cdf_L = bounds[1];
404 real log_cdf_D = bounds[2];
431 data real pwindow, data real L,
432 data real D,
int primary_id,
433 array[] real primary_params) {
458 pwindow >= 1 && floor(pwindow) == pwindow;
486 int pw = to_int(pwindow);
489 array[n + 1] vector[2] terms;
490 for (t in max(start - pw, 0):n) {
495 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)