33 int delay_types, array[]
int delay_types_p, array[]
int delay_types_id,
34 array[]
int delay_types_groups, array[]
int delay_max,
35 array[]
int delay_np_pmf_groups
37 array[delay_types]
int ret;
38 for (i in 1:delay_types) {
40 for (j in delay_types_groups[i]:(delay_types_groups[i + 1] - 1)) {
41 if (delay_types_p[j]) {
42 ret[i] += delay_max[delay_types_id[j]];
44 ret[i] += delay_np_pmf_groups[delay_types_id[j] + 1] -
45 delay_np_pmf_groups[delay_types_id[j]] - 1;
80 int delay_id,
int len, array[]
int delay_types_p, array[]
int delay_types_id,
81 array[]
int delay_types_groups, array[]
int delay_max,
82 vector delay_np_pmf, array[]
int delay_np_pmf_groups,
83 vector delay_params, array[]
int delay_params_groups, array[]
int delay_dist,
84 int left_truncate,
int reverse_pmf,
int cumulative
87 vector[len] pmf = rep_vector(0, len);
91 delay_types_groups[delay_id]:(delay_types_groups[delay_id + 1] - 1)) {
92 if (delay_types_p[i]) {
93 int start = delay_params_groups[delay_types_id[i]];
94 int end = delay_params_groups[delay_types_id[i] + 1] - 1;
95 vector[delay_max[delay_types_id[i]] + 1] new_variable_pmf =
97 delay_params[start:end],
98 delay_max[delay_types_id[i]] + 1,
99 delay_dist[delay_types_id[i]],
102 new_len = current_len + delay_max[delay_types_id[i]];
103 if (current_len == 1) {
104 pmf[1:new_len] = new_variable_pmf;
107 pmf[1:current_len], reverse(new_variable_pmf), new_len
111 int start = delay_np_pmf_groups[delay_types_id[i]];
112 int end = delay_np_pmf_groups[delay_types_id[i] + 1] - 1;
113 new_len = current_len + end - start;
114 if (current_len == 1) {
115 pmf[1:new_len] = delay_np_pmf[start:end];
118 pmf[1:current_len], reverse(delay_np_pmf[start:end]), new_len
122 current_len = new_len;
126 rep_vector(0, left_truncate),
127 pmf[(left_truncate + 1):len] / sum(pmf[(left_truncate + 1):len])
131 pmf = cumulative_sum(pmf);
156 vector delay_params_mean, vector delay_params_sd,
157 array[]
int delay_params_groups,
158 array[]
int delay_dist, array[]
int weight) {
159 int n_delays = num_elements(delay_params_groups) - 1;
163 for (d in 1:n_delays) {
164 int start = delay_params_groups[d];
165 int end = delay_params_groups[d + 1] - 1;
166 for (s in start:end) {
167 if (delay_params_sd[s] > 0) {
169 target += weight[d] *
171 delay_params[s] | delay_params_mean[s], delay_params_sd[s]
174 delay_params[s] ~ normal(delay_params_mean[s], delay_params_sd[s]);
224 vector delay_np_pmf,
int delay_n_np_est,
225 array[]
int delay_np_est_groups, array[]
int delay_np_est_pos,
226 vector delay_np_est_raw
228 vector[num_elements(delay_np_pmf)] ret = delay_np_pmf;
229 for (i in 1:delay_n_np_est) {
230 int es = delay_np_est_groups[i];
231 int ee = delay_np_est_groups[i + 1] - 1;
232 real seg_sum = sum(delay_np_est_raw[es:ee]);
234 ret[delay_np_est_pos[j]] = delay_np_est_raw[j] / seg_sum;
251 int len = num_elements(mu);
254 real p = normal_cdf(lb[i] | mu[i], sigma[i]);
255 real u = uniform_rng(p, 1);
256 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 combine_np_pmf(vector delay_np_pmf, int delay_n_np_est, array[] int delay_np_est_groups, array[] int delay_np_est_pos, vector delay_np_est_raw)
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)