

'run rolling regression

' set window size
!window = 142

' set step size

' declare equation for estimation
equation eq01

' get size of workfile
!length = @obsrange

%cmnd = _this.@command 'EDIT: get the equation specification

!step = 4

'calculate number of rolls
!nrolls = @floor((!length-!window)/!step)

'matrix to store coefficient estimates
matrix(3,!nrolls) coefmat ' where 3 is the number of coefficients

'series to store forecast estimates
series fcast

'redundant series for catching start and end points
%start = "@first" '@otod(@ifirst(ser))   
%end = "@last"   '@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-2)
   smpl {%first} {%last}     

   ' estimate equation - where the equation is y=c(1) + c(2)*x1 

 
   

  ' 4-period-ahead forecast
%4pers = @otod(@dtoo(%start)+!i+!window-1) 'start point
%4pere = @otod(@dtoo(%start)+!i+!window+4) 'end point

if @dtoo(%end) < @dtoo(%4pere) then   'check whether the forecast end point is greater than the workfile end point
      exitloop
   endif  
   
   ' set smpl for forecasting period
   smpl {%4pers} {%4pere}   
   
   ' forecast with command *forecast* (see also *fit*)
   eq01.forecast(f=na) yf     
   
   ' set sampl to obtain the 4th period observation
   smpl {%4pere} {%4pere}   
   
   ' store forecasts
   fcast = yf
next
show coefmat

smpl @all
show coefmat
show fcast.line

d(noerr) yf

'calculate RMSE
scalar rmse=@rmse(y, fcast)

show (y, fcast)

