' rolling forecast, re-estimating coefs
' for version 4
' last checked 11/3/2000 h

' create workfile
workfile rollfcst q 1968 1982

' fill data
series y
y.fill 3.733,3.567,3.533,3.400,3.400,3.433,3.576,3.567,4.167,4.733,5.167,5.867,5.900,5.900,6.033,5.967,5.767,5.633,5.600,5.333,4.933,4.867,4.833,4.800,5.033,5.133,5.633,6.667,8.133,8.767,8.600,8.433,7.633,7.467,7.833,7.900,7.467,7.100,6.900,6.633,6.200,6.000,5.967,5.833,5.733,5.767,5.800,5.867,6.133,7.500,7.633,7.500,7.333,7.400,7.333,8.367,8.767,9.367,9.500,10.53

' set window size
!window = 20

' get size of workfile
!length = @obsrange

' declare equation for estimation
equation eq1

' declare series for final results
series yhat			' point estimates
series yhat_se		' forecast std.err.

' set step size
!step = 4

' move sample !step obs at a time
for !i = 1  to  !length-!window+1-!step step !step
	' set sample to estimation period
	smpl @first+!i-1 @first+!i+!window-2
	' estimate equation
	eq1.ls y c y(-1) y(-2)
	' reset sample to forecast period
	smpl @first+!i+!window-1 @first+!i+!window-2+!step
	' make forecasts in temporary series first
	eq1.forecast(f=na) tmp_yhat tmp_se
	' copy data in current forecast sample
	yhat = tmp_yhat
	yhat_se = tmp_se
next

' construct forecast confidence bounds
' approximate 95% interval assuming normal distribution
smpl @all

series yhat_upp = yhat + 2.0*yhat_se
series yhat_low = yhat - 2.0*yhat_se

' plot actual and rolling forecasts with confidence bounds
graph graph1.line y yhat yhat_upp yhat_low
graph1.options size(8,2) linepat
graph1.setelem(1) lcolor(blue) lpat(solid) legend(actual)
graph1.setelem(2) lcolor(red) lpat(solid) legend(rolling forecast)
graph1.setelem(3) lcolor(red) lpat(dash1) legend(95% bound)
graph1.setelem(4) lcolor(red) lpat(dash1) legend()
graph1.legend position(0,0) columns(1)
graph1.addtext(t) Rolling forecast with coefficient update

show graph1