Page 1 of 1

Ragged Edge ARMA Forecasting

Posted: Tue Jun 10, 2014 3:53 pm
by JRichards
Version 8, build June 4, 2014

I have multiple series that I want to forecast, with ARMA processes in their equations. The history is a ragged edge (ends in different periods for each endogenous variable, according to when data is released). If I start the model solve way back in history (period 700 in the example below), excluding actuals, then I get a forecast that (to all intents and purposes) does not include the ARMA processes. If I start the model solve in the first period with missing data for any of the endogenous variables (Y1, period 801 in the example below), then it includes the ARMA process for that variable, but doesn't for variables that start in different periods. If I start the model solve in the later period, it only incorporates the ARMA process for the second endogenous variable (Y2, period 803 in the example below).

So the question is: what is the best way of using a model object to forecast series with ARMA processes that have a ragged historical edge (obviously it's easy if there are no linkages between the series, simply forecast them individually, but if they are functions of each other)?

Code: Select all

'create workfile
wf u 1000

'create independent variable
smpl @all
series X = nrnd

'create series with AR error process
smpl 1 1
series ARProcess = 1
smpl 2 @last
ARProcess = 0.8*@lag(ARProcess,1) + nrnd
'series with MA error process
smpl @all
series MAResid = nrnd
series MAProcess = MAResid + 0.7 * @lag(MAResid,1)

'create dependent variables
smpl 1 800
series Y1 = X + ARProcess
smpl 1 802
series Y2 = X + MAProcess

'estimate equations and add to model
model m_test
smpl 200 @last
equation eq_Y1.ls Y1 X AR(1)
m_test.merge eq_Y1
equation eq_Y2.ls Y2 X MA(1)
m_test.merge eq_Y2

'forecasting from different start dates
%StartDateList = "700 801 803"
for %startdate {%StartDateList}
   m_test.scenario(n, a=%startdate) Forecast from Obs {%startdate} excluding actuals
   m_test.exclude(actexist=t)
   smpl %startdate @last
   m_test.solve
next

'graph showing difference
smpl 790 820
for %Y Y1 Y2
   %graphlist = @wcross(%Y,%StartDateList,"?_?") + " " + %Y
   graph gr_{%Y}.line {%graphlist}
   show gr_{%Y}
next