data {
int<lower=0> Q; // num previous noise terms
int<lower=3> T; // num observations
vector[T] y; // observation at time t
}
parameters {
real mu; // mean
real<lower=0> sigma; // error scale
vector[Q] theta; // error coeff, lag -t
}
transformed parameters {
vector[T] epsilon; // error term at time t
for (t in 1:T) {
epsilon[t] = y[t] - mu;
for (q in 1:min(t - 1, Q))
epsilon[t] = epsilon[t] - theta[q] * epsilon[t - q];
}
}
model {
vector[T] eta;
mu ~ cauchy(0, 2.5);
theta ~ cauchy(0, 2.5);
sigma ~ cauchy(0, 2.5);
for (t in 1:T) {
eta[t] = mu;
for (q in 1:min(t - 1, Q))
eta[t] = eta[t] + theta[q] * epsilon[t - q];
}
y ~ normal(eta, sigma);
}
Hi @dis, welcome to discourse! I don’t quite understand what your question is. What do you wish to compute in the generated quantities?
you can try generate the fitted values and residuals of a MA model in the bayesforecast package
library(bayesforecast)
Sf1 = stan_sarima(ts,c(0,0,q))
ft = posterior_predict(Sf1)
where ts is the time series and q the number of lags in the ma model
1 Like