5
$\begingroup$

When I run the following sim:

set.seed(999)
inter.vec <- vector()
mean.vec <- vector()
for (i in 1:999){
    yt <- arima.sim(n=9999, list(order=c(0,0,0)), mean = 0.6)
    mean.vec[i] <- mean(yt)

    fit <- Arima(yt, order = c(0,0,0), include.mean = T)
    inter.vec[i] <- coef(fit)[1]
}
lattice::densityplot(mean.vec)
lattice::densityplot(inter.vec)

I get exactly what I expect under the specification $Y_t = \mu + e_t$. The means of the generated series are centred on 0.6 and the estimate for the intercept from the Arima model is centred on 0.6.

Example of yt

Distribution of means of yt

Distribution of intercepts estimated from Arima

Then I run the following sim, an MA(1) model with non-zero mean, initially under the impression I am generating data from the specification $Y_t = 0.6 -0.3 e_{t-1} + e_t$:

set.seed(616)
ma.vec <- vector()
inter.vec <- vector()
mean.vec <- vector()
for (i in 1:999){
   yt <- arima.sim(n=9999, list(order=c(0,0,1), ma=-.3), mean = 0.6)
   mean.vec[i] <- mean(yt)

   fit <- Arima(yt, order = c(0,0,1), include.mean = T)
   ma.vec[i] <- coef(fit)[1]
   inter.vec[i] <- coef(fit)[2]
}

But the model that I thought I was generating data from is not recovered as can be seen from the following plots. Clearly, the MA parameter is recovered well, but the intercept/mean is not. So what model is the sim generating data from?

Example of yt with red showing 0.6 and blue showing observed mean

Distribution of means from yt sims

Distribution of MA(1) estimate recovered from model

Distribution of mean/intercept recovered from model

$\endgroup$

1 Answer 1

2
$\begingroup$

For an MA(1) models (as per my question), the implementation of arima.sim initially constructs a sample of random values (innov in the function call) using the mean value that I passed in ($0.6$). If the user does not say otherwise, a normal distribution is assumed giving a series of random values distributed as $e_i \sim N(0.6, 1)$. As the sample size increases the mean of the realised series will tend to 0.6, i.e. $\bar{e} = \frac{\sum_i^n e_i}{n} \approx 0.6$.

Next, arima.sim makes use of the stats::filter function, which in my case is passed a filter parameter equal to the vector c(1, -0.3). In response, the filter then sums the current value and the product of -0.3 and the previous value and this is the requested MA(1) series.

However, the new mean will be as follows:

\begin{align} \bar{e}_{new} &= \frac{(-0.3e_1 + e_2)+(-0.3e_2 + e_3)+...+(-0.3e_{n-1} + e_n)}{n} \\ &= \frac{-0.3e_1 + 0.7e_2 + 0.7e_3+...+0.7e_{n-1} + e_n}{n} \end{align}

For simplicity apply $E[e_1] = E[e_n] = 0$ gives:

\begin{align} \bar{e}_{new} &= \frac{0.7e_2 + 0.7e_3+...+0.7e_{n-1}}{n}\\ & \approx 0.7 \bar{e} \approx 0.7 \times 0.6 = 0.42 \end{align}

So, it looks to me like the underlying data generating process is (approximately) \begin{align} Y_t=0.42 - 0.3 e_{t-1}+e_t \end{align} and not $Y_t=0.6 - 0.3 e_{t-1}+e_t$ as one may be (possibly) forgiven for thinking.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.