Page **1** of **9**

### Basic Rolling Regression

Posted: **Fri May 22, 2009 1:45 pm**

by **EViews Gareth**

Below is a very basic rolling regression program. For more complicated/sophisticated approaches, you should look in the ROLL section of the sample programs provided with your copy of EViews.

This one might be a little easier to follow for programming beginners though.

Code: Select all

`'create some data`

create u 800

series y=nrnd

series x1=nrnd

series x2=nrnd

series z=nrnd

'-------------------------------------------------------------------------------------

'run rolling regression

' set window size

!window = 750

' set step size

!step = 40

' get size of workfile

!length = @obsrange

' declare equation for estimation

equation eq1

'calculate number of rolls

!nrolls = @round((!length-!window)/!step)

'matrix to store coefficient estimates

matrix(3,!nrolls) coefmat ' where 3 is the number of coefficients

'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 to estimation period

smpl @first+!i-1 @first+!i+!window-2

' estimate equation - where the equation is y=c(1) + c(2)*x1 + c(3)*x2

eq1.ls y c x1 x2

'store coefficients

colplace(coefmat,eq1.@coefs,!j)

next

show coefmat

### Re: Basic Rolling Regression

Posted: **Sat Dec 26, 2009 9:42 pm**

by **Vaal1**

I would like to generate a rolling regression in a similar manner to this, but instead of storing the coefficients, I would like to store the P-values (Prob.). To do this, I have to change the @coefs part in the line colplace(coefmat,eq1.@coefs,!j), but I am not sure what it should be. I have checked the command reference, but can't find anything for a matrix of Prob. values. Can anyone assist please?

### Re: Basic Rolling Regression

Posted: **Mon Dec 28, 2009 11:01 am**

by **EViews Gareth**

There isn't a data member that holds the p-values. You'll have to calculate them from the t-stats.

### Re: Basic Rolling Regression

Posted: **Thu Feb 04, 2010 7:10 pm**

by **Vaal1**

Is there anyway to store the R-square and Adjusted R-square values? Is there a command that can be used to replace the @coefs part in the line colplace(coefmat,eq1.@coefs,!j) to store these R-squares of the rolling regressions?

### Re: Basic Rolling Regression

Posted: **Fri Apr 01, 2011 8:10 am**

by **EViews Gareth**

Make a vector to hold them (rather than a matrix), then inside the loop put something like:

where myr2s is the name of the vector.

### Re: Basic Rolling Regression

Posted: **Wed May 25, 2011 9:04 am**

by **EViews Esther**

Posted a simple program to generate 4-period-ahead forecasts, based on LS equation.

Code: Select all

`'create some data`

create u 100

series y=nrnd

series x1=nrnd

series x2=nrnd

series z=nrnd

'-------------------------------------------------------------------------------------

'run rolling regression

' set window size

!window = 20

' 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(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

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-2)

smpl {%first} {%last}

' estimate equation - where the equation is y=c(1) + c(2)*x1 + c(3)*x2

eq1.ls y c x1 x2

' 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+2) '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

' set sampl to obtain the 4th period observation

smpl {%4pere} {%4pere}

' store forecasts

fcast = yf

next

smpl @all

show coefmat

show fcast.line

d(noerr) ser

### Re: Basic Rolling Regression

Posted: **Sun Jun 12, 2011 5:22 am**

by **MehranAdeli**

Hi,

I used your first code (and changed it accordingly to suit my problem). However I have realised that only the first regression is correct. The second time (when the window is rolled down) it does not exclude the end of the previous window observation, so it follows (say for a window of size 53):

1-53

1-54

1-55

While it should be

1-53

2-54

3-55

Do you know what I'm doing wrong??

### Re: Basic Rolling Regression

Posted: **Sun Jun 12, 2011 10:09 am**

by **EViews Gareth**

Sounds like you aren't changing the start of the sample - only the end of the sample.

### Re: Basic Rolling Regression

Posted: **Mon Jun 27, 2011 11:13 am**

by **maxime**

Hello,

I was wondering if it was possible to perform a monthly rolling regression. For example instead of rolling for a certain amount of days the regression would be rolled at the begining of every month, seeing as not all months have the same amount of business days. Thank you.

### Re: Basic Rolling Regression

Posted: **Mon Jun 27, 2011 11:26 am**

by **EViews Gareth**

We'll need more information. What is the frequency of your workfile? Do you want to roll a month at a time (so only one month of data is used), or do you want to roll over each month of the year (so that in the first iteration, all Januarys are used, in the second iteration, all Februarys are used etc....).

### Re: Basic Rolling Regression

Posted: **Mon Jun 27, 2011 12:25 pm**

by **maxime**

Hi,

So I am rolling a Garch model with 5yrs of estimation sample (1250 days) and a total sample of 12yrs (3000 days) to forecast violatility for the following month (about 22 days). I would like my estimation period to move up one month at a time which can sometimes be 19, 20, or 22 days depending on the number of business days in the month in question. Basically I would require a changing !step which would reflect the number of days in that month. As for the forecasted period it would have to equal the number of days in the following month.

Here is an attempt at the code...

Code: Select all

`' rolling Garch forecast on cretx11703 single daily serie with 5yr estimation sample (1999 to 2003)`

'and one month forecasting to be repeated every month until end of total sample

'ttldys is a monthly series with total number of days within month, different tab in wf...

' get size of total sample (12yrs)

smpl @first @last

!length = @obs(cretx11703)'#of days (daily data)

!mlength =@obs(ttldys)'#of months (monthly data)

' set window size

smpl @first 12/31/2003

!window = @obs(cretx11703)'# of days in sample (daily data)

!mwindow=@obs(ttldys)'#of months in sample (monthly data)

' declare equation for estimation

equation eq1

' declare series for final results (forecast)

series cvarf

'monthly increase

!y=0

!dmonth=@elem(ttdys,!mwindow+!y)

' move sample for the 84 months left in sample

for !i=1 to !length-!window step !dmonth 'number of days in next month...

!y=!y+1

' set sample to estimation period

smpl @first+!i-1 @first+!window+!i-2

' estimate equation

eq1.arch(1,1,h) cretx11703 c

' reset sample to forecast period

smpl @first+!window+!i-1 @first+!window+!dmonth+!i-2 'forecast !dmonth days ahead, will no longer work after first loop

' make forecasts in temporary series first

eq1.forecast tmp_cvarf

' copy data in current forecast sample

cvarf = tmp_cvarf

next

Thank you.

### Re: Basic Rolling Regression

Posted: **Mon Jun 27, 2011 1:44 pm**

by **EViews Gareth**

Here's an example that does something similar.

Code: Select all

`'create some data. Daily workfile 1990 to 2000`

create d5 1990 2000

series y=nrnd

series x1=nrnd

series x2=nrnd

series year = @year

!minyear = @min(year) 'the first year in the workfile

series monthnum = @month + 12*(year-!minyear) 'create a series containing the month number, running from 1 for the first month in the workfile file, up to the last month in the workfile

!nummonths = @max(monthnum) 'total number of months in the workfile.

vector(!nummonths) R2s 'vector to store r-squareds

for !i=1 to !nummonths 'loop over the months

smpl if monthnum=!i 'set the sample equal to the current month

equation eq1.ls y c x1 x2 'estimate

R2s(!i) = eq1.@r2 'store r-squared

next

smpl @all

### Re: Basic Rolling Regression

Posted: **Thu Jun 30, 2011 1:03 pm**

by **maxime**

Perfect, Thanks alot.

### Re: Basic Rolling Regression

Posted: **Fri Jul 01, 2011 5:54 am**

by **oybar**

Hi!

First, I would like to thank the eviewsteam for making this forum such a great place of information

I am working on my master thesis and need some help on the last regression I need for the thesis to be complete.

I have a forecasting model on excess returns :

The model is: r_it – rf_t= c +outputgap(-1) + b(r_mkt – rf_t)

I have named the series y = (r_it – rf_t)

Series x1 = outputgap(-1)

Series x2 = r_mkt – rf_t)

I want to estimate the following regression ri = c + x1 + x2 with either a 60 mnth rolling window or just an expanding window. I have 369 monthly observations, beginning in 1980M01, ending in 2010M10. Every month I want to store the coefficients.

I am using eviews 5, but I have also access to eviews 6.

I have tried this and get following errors after typing enterbutton:

!window = 60

!step = 1

!length = @obsrange

equation eq1

!nrolls = @floor((!length-!window)/!step) Error: !step is not defined

matrix(2,!nrolls) coefmat Error: !nrolls is not defined

!j=0

for !i 0 1 to length-!window+1-!step step !step Error: Flow of control statement executed from the command line

!j=!j+1 Error: !j is not defined

smpl @first+!i-1 @first+!i+!window-2 Error: !i is not defined

eq1.lsn y c x1 x2

Colplace(coefmat,eq1.@coefs,!j) Error: !j is not defined

next Error: Flow of control statement executed from the command line

show coefmat Error: coefmat is not defined

It seems to me as eviews cant store the information when using the command !step = 1 or any other commands. And I am not sure if my code is correct.

I would be very thankful if anyone could help me.

Best,

Oystein

### Re: Basic Rolling Regression

Posted: **Fri Jul 01, 2011 10:24 am**

by **EViews Gareth**

You need to run the code in an EViews program (File->New Program).