epinowcast
Loading...
Searching...
No Matches
regression.stan
Go to the documentation of this file.
1
51real intercept_centring_offset(vector means_fixed, vector beta,
52 vector beta_sd, matrix rdesign, int neffs) {
53 if (neffs == 0) return 0.0;
54 vector[1 + num_elements(beta_sd)] ext_beta_sd = append_row(1.0, beta_sd);
55 vector[neffs] scaled_beta = beta .* (rdesign * ext_beta_sd);
56 return dot_product(means_fixed, scaled_beta);
57}
58
72tuple(real, real) centring_offsets(
73 vector means_fixed, vector beta, vector beta_sd, matrix rdesign, int neffs,
74 int centre,
76 int arima_p, int arima_d, int arima_q,
77 matrix arima_z, vector arima_pacf, vector arima_theta,
78 array[] real arima_sigma,
79 int gp_present, int gp_T, int gp_G, int gp_M, real gp_L,
80 int gp_type, real gp_nu, int gp_d, matrix gp_PHI, matrix gp_eta,
81 array[] real gp_rho, array[] real gp_alpha
82) {
83 real design = intercept_centring_offset(
84 means_fixed, beta, beta_sd, rdesign, neffs
85 );
92 );
93 return (design, latent);
94}
95
97 array[] real intercept, vector beta, int nobs, int neffs,
98 matrix fdesign,
99 tuple(vector, array[] int, array[] int) sparse,
100 vector beta_sd, matrix rdesign,
101 int add_intercept, int sparse_design, int centre,
102 int arima_present, int arima_T, int arima_G,
103 int arima_p, int arima_d, int arima_q, int arima_n_obs,
104 matrix arima_z, vector arima_pacf, vector arima_theta,
105 array[] real arima_sigma,
106 array[] int arima_flat_idx,
107 int gp_present, int gp_T, int gp_G, int gp_M, real gp_L,
108 int gp_type, real gp_nu, int gp_d, matrix gp_PHI, matrix gp_eta,
109 array[] real gp_rho, array[] real gp_alpha,
110 array[] int gp_flat_idx
111) {
112 // Short-circuit when neither latent term is present: return
113 // combine_effects() directly so we skip materialising the
114 // intermediate `base` vector and the apply_* call frames on every
115 // gradient evaluation. Behaviour is identical when a term is present.
116 // Design centring (the `- offset` shift) is a constant applied by the
117 // caller, so it does not enter here.
118 if (!arima_present && !gp_present) {
119 return combine_effects(
120 intercept, beta, nobs, neffs, fdesign, sparse, beta_sd, rdesign,
121 add_intercept, sparse_design
122 );
123 }
124 vector[nobs] base = combine_effects(
125 intercept, beta, nobs, neffs, fdesign, sparse, beta_sd, rdesign,
126 add_intercept, sparse_design
127 );
128 // `centre` is the free-intercept flag: an integrated residual is only
129 // mean-centred when a free intercept exists to absorb the level it gives
130 // up. ARIMA and GP compose additively; each `apply_*` is inert on its
131 // own presence flag, so passing both through is safe when only one is set.
133 base, arima_n_obs, arima_present, centre, arima_T, arima_G,
136 arima_flat_idx
137 );
138 return apply_gp_term(
140 gp_PHI, gp_eta, gp_rho, gp_alpha, gp_flat_idx
141 );
142}
143
145 vector beta, vector beta_sd, array[,] real beta_sd_p,
146 int fixed, int random,
147 int arima_present, int arima_p, int arima_q,
148 matrix arima_z, vector arima_pacf, vector arima_theta,
149 array[] real arima_sigma, array[,] real arima_sigma_p,
150 array[,] real arima_pacf_p
151) {
152 effect_priors_lp(beta, beta_sd, beta_sd_p, fixed, random);
153 if (arima_present) {
154 to_vector(arima_z) ~ std_normal();
155 // Partial autocorrelations are Uniform(-1, 1) by default via their
156 // parameter bounds. A positive prior sd switches to a Normal(mean, sd)
157 // truncated to (-1, 1); the truncation constant is fixed by the bounds
158 // and so is dropped. A non-positive sd leaves the Uniform default.
159 if (arima_p > 0 && arima_pacf_p[2, 1] > 0) {
160 arima_pacf ~ normal(arima_pacf_p[1, 1], arima_pacf_p[2, 1]);
161 }
162 if (arima_q > 0) {
163 arima_theta ~ std_normal();
164 }
165 arima_sigma[1] ~ normal(
166 arima_sigma_p[1, 1], arima_sigma_p[2, 1]
167 ) T[0, ];
168 }
169}
170
180 int gp_present, matrix gp_eta,
181 array[] real gp_rho, array[] real gp_alpha,
182 array[,] real gp_rho_p, array[,] real gp_alpha_p
183) {
184 if (gp_present) {
185 to_vector(gp_eta) ~ std_normal();
186 gp_rho[1] ~ lognormal(gp_rho_p[1, 1], gp_rho_p[2, 1]);
187 gp_alpha[1] ~ normal(gp_alpha_p[1, 1], gp_alpha_p[2, 1]) T[0, ];
188 }
189}
vector apply_arima_residual(vector base, int n_obs, int present, int centre, int T, int G, int p, int d, int q, matrix z, vector pacf, vector theta, array[] real sigma, array[] int flat_idx)
real arima_latent_mean_offset(int present, int centre, int T, int G, int p, int d, int q, matrix z, vector pacf, vector theta, array[] real sigma)
vector combine_effects(array[] real intercept, vector beta, int nobs, int neffs, matrix fdesign, tuple(vector, array[] int, array[] int) sparse, vector beta_sd, matrix rdesign, int add_intercept, int sparse_design)
void effect_priors_lp(vector beta, vector beta_sd, array[,] real beta_sd_p, int fixed, int random)
real gp_latent_mean_offset(int present, int centre, int T, int G, int M, real L, int type, real nu, int d, matrix PHI, matrix eta, array[] real rho, array[] real alpha)
vector apply_gp_term(vector base, int present, int centre, int T, int G, int M, real L, int type, real nu, int d, matrix PHI, matrix eta, array[] real rho, array[] real alpha, array[] int flat_idx)
vector beta
vector vector matrix int int int int int int int int matrix vector vector array[] real int int int int real int gp_type
vector vector matrix int int centre
vector vector matrix int int int int int int int int arima_q
vector vector matrix int int int int int int int int matrix vector vector array[] real int int int int real int real int matrix matrix gp_eta
vector vector matrix int int int int int int int int matrix vector vector array[] real int int int int real int real int matrix matrix array[] real array[] real gp_alpha
vector vector matrix int neffs
vector vector matrix int int int int int int int int matrix vector vector array[] real arima_sigma
vector vector matrix int int int int int int int int matrix arima_z
void gp_priors_lp(int gp_present, matrix gp_eta, array[] real gp_rho, array[] real gp_alpha, array[,] real gp_rho_p, array[,] real gp_alpha_p)
vector vector matrix int int int int int int int arima_d
tuple(real, real) centring_offsets(vector means_fixed
vector vector matrix int int int int int int int int matrix vector vector array[] real int int int int real int real int matrix gp_PHI
vector vector beta_sd
vector vector matrix int int int int int int int int matrix vector vector array[] real int int int int real int real int gp_d
vector vector matrix int int int int int int int int matrix vector vector array[] real int int int int gp_M
vector vector matrix int int int int int int int int matrix vector vector array[] real int int gp_T
vector vector matrix int int int int int int int int matrix vector vector array[] real int int int int real int real gp_nu
vector vector matrix int int int arima_present
vector vector matrix int int int int int int int int matrix vector vector array[] real int int int gp_G
vector vector matrix int int int int int int int int matrix vector vector array[] real int int int int real gp_L
real intercept_centring_offset(vector means_fixed, vector beta, vector beta_sd, matrix rdesign, int neffs)
void regression_priors_lp(vector beta, vector beta_sd, array[,] real beta_sd_p, int fixed, int random, int arima_present, int arima_p, int arima_q, matrix arima_z, vector arima_pacf, vector arima_theta, array[] real arima_sigma, array[,] real arima_sigma_p, array[,] real arima_pacf_p)
vector vector matrix int int int int int int int int matrix vector arima_pacf
vector vector matrix int int int int int int int int matrix vector vector array[] real int int int int real int real int matrix matrix array[] real gp_rho
vector regression_predictor(array[] real intercept, vector beta, int nobs, int neffs, matrix fdesign, tuple(vector, array[] int, array[] int) sparse, vector beta_sd, matrix rdesign, int add_intercept, int sparse_design, int centre, int arima_present, int arima_T, int arima_G, int arima_p, int arima_d, int arima_q, int arima_n_obs, matrix arima_z, vector arima_pacf, vector arima_theta, array[] real arima_sigma, array[] int arima_flat_idx, int gp_present, int gp_T, int gp_G, int gp_M, real gp_L, int gp_type, real gp_nu, int gp_d, matrix gp_PHI, matrix gp_eta, array[] real gp_rho, array[] real gp_alpha, array[] int gp_flat_idx)
vector vector matrix int int int int int int arima_p
vector vector matrix int int int int arima_T
vector vector matrix int int int int int int int int matrix vector vector array[] real int gp_present
vector vector matrix int int int int int arima_G
vector vector matrix rdesign
real latent
vector vector matrix int int int int int int int int matrix vector vector arima_theta