epinowcast
Loading...
Searching...
No Matches
log_expected_obs_from_latent.stan
Go to the documentation of this file.
1
51 array[] vector exp_llatent, int rd_n, vector w, array[] int v,
52 array[] int u, int t,
53 int g, vector latent_obs_prop
54) {
55 array[g] vector[t] exp_lobs;
56 if (rd_n == 1) {
57 for (k in 1:g) {
58 exp_lobs[k] = exp_llatent[k] + log(w) +
59 segment(latent_obs_prop, (k-1) * t + 1, t);
60 }
61 } else {
62 int ft = t + rd_n - 1;
63 // Declare once outside loop to avoid repeated allocation
64 vector[ft] exp_obs;
65 for (k in 1:g) {
66 exp_obs = csr_matrix_times_vector(
67 ft, ft, w, v, u, exp(exp_llatent[k])
68 );
69 exp_lobs[k] = log(exp_obs[rd_n:ft]) +
70 segment(latent_obs_prop, (k-1) * t + 1, t);
71 }
72 }
73 return(exp_lobs);
74}
array[] vector log_expected_obs_from_latent(array[] vector exp_llatent, int rd_n, vector w, array[] int v, array[] int u, int t, int g, vector latent_obs_prop)