Automatic ARMA selection

For posting your own programs to share with others

Moderators: EViews Gareth, EViews Moderator

Felipe
Posts: 2
Joined: Wed Nov 08, 2017 4:23 pm

Re: Automatic ARMA selection

Postby Felipe » Thu Nov 09, 2017 9:21 am

Thanks for your answer.

I want the same program, the automatic ARMA selection, but the program posted in this forum consider a regression with constant.
Here:

Code: Select all

equation {%eqname}.ls dlog({%dep}) {%regs} {%lagstring} {%mastring}

Where:

Code: Select all

 {%regs}

is the constant.
So I want a regression without this parameter

Code: Select all

 {%regs}

I thought if I stablished a conditional I could resolve this problem, because I need to avoid a regression without parameters.
The first conditional considers the case without ARMA terms. So the regression is with constant:

Code: Select all

if %arstring="ar(0)" and  %mastring="ma(0)" then
      equation {%eqname}.ls(arma=cls, optmethod=legacy) {%dep} {%regs}
endif

The second conditional considers the case with ARMA terms without constant:

Code: Select all

if %arstring="ar(1)" or %arstring="ar(2)" or  %arstring="ar(3)" or  %arstring="ar(4)" or %mastring="ma(1)" or %mastring="ma(2)" or %mastring="ma(3)" or %mastring="ma(4)"  then
       equation {%eqname}.ls(arma=cls, optmethod=legacy) {%dep} {%arstring}{%mastring}
endif

But this conditionals doesn't work.
Last edited by Felipe on Thu Nov 09, 2017 10:03 am, edited 3 times in total.

EViews Gareth
Fe ddaethom, fe welon, fe amcangyfrifon
Posts: 11369
Joined: Tue Sep 16, 2008 5:38 pm

Re: Automatic ARMA selection

Postby EViews Gareth » Thu Nov 09, 2017 9:22 am

Code: Select all

'Create some data.  Delete these first few lines if you want to run on your existing workfile.

create u 1000
series y=nrnd






'Program that calculates the "best" ARMA specification for an equation.  Edit the variables below to match your particular data/setup.

%eqname = "EQ01"   'name of equation object that will be used.
%maxAR = "2"            'maximum number of AR terms
%maxMA = "3"   'maximum number of MA terms
%dep = "Y"   'dependent variable
%regs = " "   'independent variables
%criterion = "@AIC"    'which criterion to use  enter "@AIC" for Akaike, "@schwarz" for Schwarz, and @HQ for Hannan-Quinn

!maxAR = @val(%maxAR)
!maxMA = @val(%maxMA)


close {%eqname}


'create table for storing critical values.
%matname = "crits"
if @isobject(%matname) then
   %matname = "__crits"
   if @isobject(%matname) then
      delete {%matname}
   endif
endif
table(!maxar+2,!maxma+2) {%matname}
{%matname}(1,1) = "AR /  MA"
{%matname}.setlines(1) +b
{%matname}.setlines(a) +r

'set sample
smpl @first+!maxAR @last

!mincrit = 1e12  'set the minimum to an artificially large value to begin

'estimate the models
%arstring = ""
for !i=0 to !maxar
   'build up string for AR terms.
   if !i>0 then
      %arstring = %arstring + " ar(" + @str(!i) + ")"
   endif
   %mastring = ""
   for !j=0 to !maxma
      'build up string for MA terms
      if !j>0 then
         %mastring = %mastring + " ma(" + @str(!j) + ")"
      endif
      'estimate equation
      %allregs = %regs + %arstring + %mastring
      if @len(%allregs)>1 then
         equation {%eqname}.ls {%dep} {%regs} {%arstring} {%mastring}
         'capture criterion
         if @upper(%criterion) = "@AIC" then
            !crit = {%eqname}.@aic
         endif
         if @upper(%criterion) = "@SCHWARZ" then
            !crit = {%eqname}.@schwarz
         endif
         if @upper(%criterion) = "@HQ" then
            !crit = {%eqname}.@hq
         endif
         'compare criterion
         if !crit < !mincrit then
            !mincrit = !crit
            !bestAR = !i
            !bestMA = !j
            %bestARstr = %arstring   'store the best ar string
            %bestMAstr = %mastring   'store the best ma string
            {%matname}.settextcolor(@all) black   'table formatting.
            !ii=!i+2
            !jj=!j+2
            {%matname}.settextcolor(!ii,!jj) red
         endif
         {%matname}(!i+2,!j+2) = !crit
         {%matname}(!i+2,1) = !i
         {%matname}(1,!j+2) = !j
      endif
   next
next

equation {%eqname}.ls {%dep} {%regs} {%bestARstr} {%bestMAstr}

show {%eqname}
show {%matname}


Follow us on Twitter @IHSEViews


Return to “Program Repository”

Who is online

Users browsing this forum: No registered users and 2 guests