MAAutoLags - procedure for choosing MA model

Use this forum to post complete RATS "procedures". Please be sure to include instructions on using the procedure and detailed references where applicable.

MAAutoLags - procedure for choosing MA model

Postby TomDoan » Wed Feb 25, 2009 2:21 pm

This quickly scans a set of moving average models looking for the one which minimizes one of four information criteria. This can be used in ARMA model identification, and also for diagnostics (best lag should be zero if the series is serially uncorrelated).

Code: Select all
*
* @MAAutoLags( options) series  start   end
*
* MAAutoLags computes an information criterion for various lags of MA processes
* using the innovations algorithm, finding the "optimal" choice under that
* criterion and (optionally) producing a table with the values for all lags.
*
* Parameters:
*    series       series to analyze
*    start end    range of series to use (by default, the maximum possible)
*
* Options:
*    maxlags=maximum number of lags to consider [25]
*    crit=[aic]/bic/caic/hq
*       Criterion to use. CAIC is AIC corrected for degrees of freedom (usually called AICC).
*    table/[notable]   Show full table of results (not just best)
*
* Variables Defined:
*    %%autoq = best number of lags
*
* Revision Schedule:
*   02/2009 Written by Tom Doan, Estima
*
proc MAAutoLags series start end
type series    series
type integer   start end
*
option integer maxlags 25
option choice  crit    1  aic bic hq caic
option switch  table   0
*
type series    series
type integer   start end
*
local symm     kappa
local rect     theta
local vect     v
local real     s
local series   covarx
local integer  i j n k
local integer  startl endl
local vect     ic
local real     fiddle
local integer  i maxl
local string   critlabel
*
declare integer %%autoq
*
* Don't go above T/2 for the maximum lags
*
compute maxl=maxlags
stats(noprint) series start end
if %nobs/2<maxl
   compute maxl=%nobs/2
inquire(series=series) startl<<start endl<<end
*
dim kappa(maxl+1,maxl+1) theta(maxl,maxl) v(maxl+1)
corr(covariances,number=maxl+1,noprint,method=yule) series startl endl covarx
*
* Create the Toeplitz matrix kappa
*
ewise kappa(i,j)=covarx(i-j+1)
*
compute v(1)=kappa(1,1)
compute theta=%const(0.0)
*
* Figure out the IC penalty (per free parameter).
* We use a /T variation on the criteria.
*
if crit==1
   compute fiddle=2.0/%nobs,critlabel="AIC"
else
if crit==2
   compute fiddle=log(%nobs)/%nobs,critlabel="Schwarz/Bayesian IC"
else
if crit==3
   compute fiddle=2.0*log(log(%nobs))/%nobs,critlabel="Hannan-Quinn"
else
   compute fiddle=2.0/(%nobs-1.0),critlabel="AIC-Corrected"
*
do n=1,maxl
   do k=0,n-1
      compute s=kappa(n+1,k+1)
      do j=0,k-1
         compute s=s-theta(k,k-j)*theta(n,n-j)*v(j+1)
      end do j
      compute theta(n,n-k)=s/v(k+1)
   end do k
   compute s=kappa(n+1,n+1)
   do j=0,n-1
      compute s=s-theta(n,n-j)**2*v(j+1)
   end do j
   compute v(n+1)=s
end do n
disp theta
*
* Figure out the IC penalty (per free parameter).
* We use a /T variation on the criteria.
*
if crit==1
   compute fiddle=2.0/%nobs,critlabel="AIC"
else
if crit==2
   compute fiddle=log(%nobs)/%nobs,critlabel="Schwarz/Bayesian IC"
else
if crit==3
   compute fiddle=2.0*log(log(%nobs))/%nobs,critlabel="Hannan-Quinn"
else
   compute fiddle=2.0/(%nobs-1.0),critlabel="AIC-Corrected"
*
* These count the extracted mean as a parameter
*
dim ic(maxl+1)
do j=1,maxl+1
   compute ic(j)=log(v(j))+fiddle*j
   *
   * Adjust the multiplier for the corrected AIC
   *
   if crit==4 ; compute fiddle=fiddle*(%nobs-i)/(%nobs-(j+1))
end do j
*
compute %%autoq=%minindex(ic)-1
if table {
   report(action=define,hlabels=||"Lags","IC"||)
   report(atcol=1,atrow=1,fillby=cols) %seq(0,maxl)
   report(atcol=2,atrow=1,fillby=cols,align=decimal) ic
   *
   * Tag the minimum IC value
   *
   report(action=format,atcol=2,picture="*.###",width=10,special=onestar,tag=minimum,align=decimal)
   report(action=show,window=critlabel+" Lag Analysis for "+%l(series))
}
else
   display "Minimum "+critlabel+" Lags for "+%l(series)+" =" %%autoq
end
TomDoan
 
Posts: 2720
Joined: Wed Nov 01, 2006 5:36 pm

Return to RATS Procedures

Who is online

Users browsing this forum: No registered users and 3 guests