' --------------------------------------------------------------------------------------------------------------------
'	DESCRIPTION: 	State-Space model dynamic forecasting with lagged signal (version 2)
'
'	DATE: 				 08 / 03 / 2017
'
'	AUTHOR:			Graeme Walsh
' --------------------------------------------------------------------------------------------------------------------

' ********************************************************************************************************************
' Pre-liminary set-up
' ********************************************************************************************************************
  
  wfcreate(wf=example) Q 1980Q1 2017Q4

' ********************************************************************************************************************
' Create Simulated Data
' ********************************************************************************************************************

  rndseed 123456

  series e1 = nrnd
  series Y = 0

  model AR2
  AR2.append Y = 3.20 + 0.22 * Y(-1) + 0.15 * Y(-2) + e1
  AR2.solveopt(s=d,d=d)
  AR2.solve

  series Y = Y_0

' ********************************************************************************************************************
' Restructure page for out-of-sample forecasting
' ********************************************************************************************************************
  
  pagestruct(end=2020Q4)

' ********************************************************************************************************************
' AR(1) Model
' ********************************************************************************************************************

' Estimate model
  smpl 1980Q1 2017Q4
  equation ARMOD.ls Y = c(1) + c(2) * Y(-1)

' Out-of-sample forecast
  smpl 2018Q1 2020Q4
  ARMOD.forecast YF1

' ********************************************************************************************************************
' State-space model - AR(1) version 1
' ********************************************************************************************************************

' Create the sspace object
  sspace dyn_mod  

' Measurement equation
  dyn_mod.append @signal Y = c(1) + c(2) * Y(-1) + 0 * sv1 + eps 
  dyn_mod.append @ename eps 
  dyn_mod.append @evar var(eps) = exp(c(4))

' Dummy state equation (sv1)
  dyn_mod.append @state sv1 = 0 * sv1 + eps_sv1 
  dyn_mod.append @ename eps_sv1
  dyn_mod.append @evar var(eps_sv1) = 0  
   
' Estimate model by maximum likelihood
  smpl 1980q1 2017q4
  dyn_mod.ml

' Make copy of model with set coefficients
  dyn_mod.makefilter new_dyn_mod

' Copy the orginal series
  series Y_COPY = Y
    
' Loop for dynamic forecasting
  for !i = 0 to 11
  	smpl @first 2018Q1+!i
    	new_dyn_mod.ml
    	smpl 2018Q1+!i 2020Q4
    	new_dyn_mod.forecast @signal *F2
    	series Y = YF2
  next
 
' Restore original series and tidy up
   smpl @all
   series YF2 = Y
   series Y = Y_COPY
   delete Y_COPY

' ********************************************************************************************************************
' State-space model - AR(1) version 2
' ********************************************************************************************************************

' Create the sspace object
  sspace dyn_mod2 

' Measurement equation
  dyn_mod2.append @signal Y =  Y_STAR + eps 
  dyn_mod2.append @ename eps 
  dyn_mod2.append @evar var(eps) = 0

' State equation
  dyn_mod2.append @state Y_STAR = c(1) + c(2) * Y_STAR(-1) + eps_sv1 
  dyn_mod2.append @ename eps_sv1
  dyn_mod2.append @evar var(eps_sv1) = exp(c(3))
   
' Estimate model by maximum likelihood
  smpl 1980Q4 2017Q4
  dyn_mod2.ml

' Out-of-sample forecast  
  smpl 2018Q1 2020Q4
  dyn_mod2.forecast @signal *F3
 
' ********************************************************************************************************************
' Compare Forecasts
' ********************************************************************************************************************

  show Y YF1 YF2 YF3
    
' -------------------------------------------------------------------------------------------------------------------
'	END OF PROGRAM
' -------------------------------------------------------------------------------------------------------------------


