24 int delay_types, array[]
int delay_types_p, array[]
int delay_types_id,
25 array[]
int delay_types_groups, array[]
int delay_max,
26 array[]
int delay_np_pmf_groups
28 array[delay_types]
int ret;
29 for (i in 1:delay_types) {
31 for (j in delay_types_groups[i]:(delay_types_groups[i + 1] - 1)) {
32 if (delay_types_p[j]) {
33 ret[i] += delay_max[delay_types_id[j]];
35 ret[i] += delay_np_pmf_groups[delay_types_id[j] + 1] -
36 delay_np_pmf_groups[delay_types_id[j]] - 1;
66 int delay_id,
int len, array[]
int delay_types_p, array[]
int delay_types_id,
67 array[]
int delay_types_groups, array[]
int delay_max,
68 vector delay_np_pmf, array[]
int delay_np_pmf_groups,
69 vector delay_params, array[]
int delay_params_groups, array[]
int delay_dist,
70 int left_truncate,
int reverse_pmf,
int cumulative
73 vector[len] pmf = rep_vector(0, len);
77 delay_types_groups[delay_id]:(delay_types_groups[delay_id + 1] - 1)) {
78 if (delay_types_p[i]) {
79 int start = delay_params_groups[delay_types_id[i]];
80 int end = delay_params_groups[delay_types_id[i] + 1] - 1;
81 vector[delay_max[delay_types_id[i]] + 1] new_variable_pmf =
83 delay_params[start:end],
84 delay_max[delay_types_id[i]] + 1,
85 delay_dist[delay_types_id[i]],
88 new_len = current_len + delay_max[delay_types_id[i]];
89 if (current_len == 1) {
90 pmf[1:new_len] = new_variable_pmf;
93 pmf[1:current_len], reverse(new_variable_pmf), new_len
97 int start = delay_np_pmf_groups[delay_types_id[i]];
98 int end = delay_np_pmf_groups[delay_types_id[i] + 1] - 1;
99 new_len = current_len + end - start;
100 if (current_len == 1) {
101 pmf[1:new_len] = delay_np_pmf[start:end];
104 pmf[1:current_len], reverse(delay_np_pmf[start:end]), new_len
108 current_len = new_len;
112 rep_vector(0, left_truncate),
113 pmf[(left_truncate + 1):len] / sum(pmf[(left_truncate + 1):len])
117 pmf = cumulative_sum(pmf);
139 vector delay_params_mean, vector delay_params_sd,
140 array[]
int delay_params_groups,
141 array[]
int delay_dist, array[]
int weight) {
142 int n_delays = num_elements(delay_params_groups) - 1;
146 for (d in 1:n_delays) {
147 int start = delay_params_groups[d];
148 int end = delay_params_groups[d + 1] - 1;
149 for (s in start:end) {
150 if (delay_params_sd[s] > 0) {
152 target += weight[d] *
154 delay_params[s] | delay_params_mean[s], delay_params_sd[s]
157 delay_params[s] ~ normal(delay_params_mean[s], delay_params_sd[s]);
175 int len = num_elements(mu);
178 real p = normal_cdf(lb[i] | mu[i], sigma[i]);
179 real u = uniform_rng(p, 1);
180 ret[i] = (sigma[i] * inv_Phi(u)) + mu[i];
array[] int get_delay_type_max(int delay_types, array[] int delay_types_p, array[] int delay_types_id, array[] int delay_types_groups, array[] int delay_max, array[] int delay_np_pmf_groups)
void delays_lp(vector delay_params, vector delay_params_mean, vector delay_params_sd, array[] int delay_params_groups, array[] int delay_dist, array[] int weight)
vector get_delay_rev_pmf(int delay_id, int len, array[] int delay_types_p, array[] int delay_types_id, array[] int delay_types_groups, array[] int delay_max, vector delay_np_pmf, array[] int delay_np_pmf_groups, vector delay_params, array[] int delay_params_groups, array[] int delay_dist, int left_truncate, int reverse_pmf, int cumulative)