37 int p = num_elements(r);
42 for (j in 1:(k - 1)) {
43 work[j] = phi[j] - r[k] * phi[k - j];
45 for (j in 1:(k - 1)) {
60 int p = num_elements(phi);
61 int q = num_elements(theta);
62 vector[T] psi = rep_vector(0.0, T);
66 int kmax = min(p, t - 1);
67 for (k in 1:kmax) s += phi[k] * psi[t - k];
68 if (t - 1 <= q) s += theta[t - 1];
83 int T = num_elements(psi);
84 matrix[T, T] K = rep_matrix(0.0, T, T);
86 K[s:T, s] = head(psi, T - s + 1);
100 if (d == 0)
return diag_matrix(rep_vector(1.0, T));
101 matrix[T, T] D1 = rep_matrix(0.0, T, T);
103 D1[s:T, s] = rep_vector(1.0, T - s + 1);
106 for (i in 2:d) D = D * D1;
126 K[, col] = cumulative_sum(K[, col]);
148 if (num_elements(phi) == 0 && num_elements(theta) == 0) {
149 if (d == 0)
return Z;
150 matrix[T, G] result = Z;
153 result[, g] = cumulative_sum(result[, g]);
186 int present,
int T,
int G,
188 matrix z, vector pacf, vector theta,
190 array[]
int flat_idx) {
191 if (!present)
return base;
193 matrix[T, G] eps = sigma[1] *
arima_filter(z, phi, theta, d);
198 return base + to_vector(eps)[flat_idx];
vector apply_arima_residual(vector base, int n_obs, int present, int T, int G, int p, int d, int q, matrix z, vector pacf, vector theta, array[] real sigma, array[] int flat_idx)
matrix lower_toeplitz(vector psi)
vector arma_impulse(vector phi, vector theta, int T)
vector pacf_to_phi(vector r)
matrix cumulative_op(int T, int d)
matrix arima_filter(matrix Z, vector phi, vector theta, int d)
matrix arima_kernel_matrix(vector phi, vector theta, int d, int T)