## Recursive forecasting in procedure

Use this forum to post questions about syntax problems or general programming issues. Questions on implementing a particular aspect of econometrics should go in "Econometrics Issues" below.

### Recursive forecasting in procedure

Hallo,

I think I came across a similar problem once...but I couldn't figure out anymore how it was solved back then. I want to produce recursive forecasts with a model in a procedure and I also want to re-estimate the involved equations in a recursive fashion. I.e. something like

Code: Select all
`PROCEDURE MODELFIT   *   option model   *mod   option integer   neqns        (...some more options...)        *   * Recursive estimation and forecasting   do time=sfroml,sto      do k=1,neqns            linreg(noprint,equation=%modeleqn(mod,k)) %modeldepvars(mod)(k) efrom time-1      end do k      forecast(print,model=mod,results=fcs,from=time,steps=fsteps)        end do timeEND PROCEDURE`

Apparently, this type of code doesn't really use the recursively estimated equations for forecasting but always the original parameter values recorded for the equations of the model. So, what do I have to change to "update" the model during the time-loop?
jonasdovern

Posts: 68
Joined: Sat Apr 11, 2009 10:30 am

### Re: Recursive forecasting in procedure

Is it not working because %modeleqn(m,k) only generates a copy of an equation? In that case: What would be an easy way to access the "true" equation connected to the model inside the procedure?

Jonas
jonasdovern

Posts: 68
Joined: Sat Apr 11, 2009 10:30 am

### Re: Recursive forecasting in procedure

Right, you need to do something else to actually change the coefficients in the model. There are a lot of ways to do this. Here's one approach, which:

* saves the current model coefficients into an array
* runs the regression for equaiton K
* replaces column K of the coefficient array with the new coefficients.
* resets the model coefficients using the revised coefficient array

Code: Select all
`do time=sfroml,sto * Create an array containing current model coefficients compute mc = %modelgetcoeffs(mod) do k=1,neqns  linreg(noprint,equation=%modeleqn(mod,k)) %modeldepvars(mod)(k) efrom time-1  * Replace column K of MC with new coefficients for equation K (the %VALID() check on beta   *    is required because the equations could have different sizes)   ewise mc(i,j) = %if( j==k, %if( %valid(%beta(i)),%beta(i),0.0 ) , mc(i,j) ) end do k * Store new coefficients back into the MODEL:  compute %modelsetcoeffs(mod,mc) forecast(print,model=mod,results=fcs,from=time,steps=fsteps)end do time`
moderator

Posts: 306
Joined: Thu Oct 19, 2006 4:33 pm

### Re: Recursive forecasting in procedure

Thanks indeed. This is a nice short - and most importantly - generally applicable way to handle such situations.
jonasdovern

Posts: 68
Joined: Sat Apr 11, 2009 10:30 am