29 vector[M] indices = linspaced_vector(M, 1, M);
30 real factor = alpha * sqrt(sqrt(2 * pi()) * rho);
31 real exponent = -0.25 * (rho * pi() / 2 / L)^2;
32 return factor * exp(exponent * square(indices));
39 vector[M] indices = linspaced_vector(M, 1, M);
40 return square(pi() / (2 * L) * indices);
48 return alpha * sqrt(2 ./ denom);
55 real factor = 2 * alpha * (sqrt(3) / rho)^1.5;
57 return factor ./ denom;
64 real factor = 16 * pow(sqrt(5) / rho, 5);
65 vector[M] denom = 3 * pow(5 / square(rho) +
matern_indices(M, L), 3);
66 return alpha * sqrt(factor ./ denom);
73 real a = inv_square(rho);
74 vector[M] indices = linspaced_vector(M, 1, M);
77 (log(2) - a + to_vector(log_modified_bessel_first_kind(indices, a)))
79 return append_row(q, q);
95vector
update_gp(matrix PHI,
int M, real L, real alpha,
96 real rho, vector eta,
int type, real nu) {
97 vector[type == 1 ? 2 * M : M] diagSPD;
100 }
else if (type == 1) {
102 }
else if (type == 2) {
105 }
else if (nu == 1.5) {
107 }
else if (nu == 2.5) {
110 reject(
"nu must be one of 0.5, 1.5, or 2.5; found nu=", nu);
113 return PHI * (diagSPD .* eta);
170 int d, matrix PHI, matrix eta,
171 array[] real rho, array[] real alpha) {
175 PHI, M, L, alpha[1], rho[1], eta[, g], type, nu
180 vector[T] col = rep_vector(0.0, T);
183 col = cumulative_sum(col);
203 int M, real L,
int type, real nu,
int d,
204 matrix PHI, matrix eta,
205 array[] real rho, array[] real alpha) {
206 if (!present || !
centre || d < 1)
return 0.0;
208 T, G, M, L, type, nu, d, PHI, eta, rho, alpha
210 return mean(to_vector(gp_eps));
214 int M, real L,
int type, real nu,
int d,
215 matrix PHI, matrix eta,
216 array[] real rho, array[] real alpha,
217 array[]
int flat_idx) {
218 if (!present)
return base;
220 T, G, M, L, type, nu, d, PHI, eta, rho, alpha
226 gp_eps = gp_eps - mean(to_vector(gp_eps));
228 return base + to_vector(gp_eps)[flat_idx];
vector diagSPD_EQ(real alpha, real rho, real L, int M)
vector diagSPD_Periodic(real alpha, real rho, int M)
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)
matrix gp_latent_matrix(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 diagSPD_Matern12(real alpha, real rho, real L, int M)
vector update_gp(matrix PHI, int M, real L, real alpha, real rho, vector eta, int type, real nu)
vector diagSPD_Matern52(real alpha, real rho, real L, int M)
vector diagSPD_Matern32(real alpha, real rho, real L, int M)
vector matern_indices(int M, real L)
vector vector matrix int int centre