I want to estimate the random walk model y=y(-1)+e with 148 data. Then I want to obtain the mean squared forecasting error for each one step ahead forecasting.
The estimation window is from observation 1 to 96, and the forecasting window is from 97 to 148. So the window size is 96.
I have write the code according to Esther's work. But, the work of Esther is 4 period ahead and the below one is the 1 period ahead.
please Can anyone help me to check if the below code is all correct? And I am not sure how to get the mean squared prediction error. All I know is the equation
MSPE= (sum(y-fy)^2)/window size, here fy is the forecasting dependent variable
Here is the code. I use Eviews 7
Code: Select all
'get same data
wfcreate u 148
'create the random walk series
series y=nrnd
series x1=y(-1)
'run rolling regression
' set window size
!window = 96
' set step size
!step = 1
' get size of workfile
!length = @obsrange
' declare equation for estimation
equation eq1
'calculate number of rolls
!nrolls = @floor((!length-!window)/!step)
'matrix to store coefficient estimates
matrix(1,!nrolls) coefmat ' where 3 is the number of coefficients
'series to store forecast estimates
series fcast
'redundant series for catching start and end points
series ser = 1
%start = @otod(@ifirst(ser))
%end = @otod(@ilast(ser))
'variable keeping track of how many rolls we've done
!j=0
' move sample !step obs at a time
for !i = 1 to !length-!window+1-!step step !step
!j=!j+1
' set sample for estimation period
%first = @otod(@dtoo(%start)+!i-1)
%last = @otod(@dtoo(%start)+!i+!window)
smpl {%first} {%last}
' estimate equation - where the equation is y=c(1)*x1
eq1.ls y x1
' store coefficients
colplace(coefmat,eq1.@coefs,!j)
' 4-period-ahead forecast
%4pers = @otod(@dtoo(%start)+!i+!window-1) 'start point
%4pere = @otod(@dtoo(%start)+!i+!window) 'end point: %4pere - %4pers +1 = 4
if {%end} < {%4pere} then 'check whether the forecast end point is greater than the workfile end point
return
endif
' set smpl for forecasting period
smpl {%4pers} {%4pere}
' forecast with command *forecast* (see also *fit*)
eq1.forecast(f=na) yf
'estimate the forecasting error
eq1.resids
' set sampl to obtain the 4th period observation
smpl {%4pere} {%4pere}
' store forecasts
fcast = yf
'series to store forecasting error
series ferror
next
smpl @all
show coefmat
show fcast.line
d(noerr) ser
