MOMENT Statement
MOMENT variables = moment specification ;
In many scenarios, endogenous variables are observed from data. From the models, you can simulate these endogenous variables based on a fixed set of parameters. The goal of simulated method of moments (SMM) is to find a set of parameters such that the moments of the simulated data match the moments of the observed variables. If there are many moments to match, the code might be tedious. The following MOMENT statement provides a way to generate some commonly used moments automatically. Multiple MOMENT statements can be used.

variables can be one or more endogenous variables.

moment specification can have the following four types:

  • ( number list ) specifies that the endogenous variable is raised to the power specified by each number in number list. For example,

       moment y = (2 3);
    

    adds the following two equations to be estimated:

       eq._moment_1 = y**2 - pred.y**2;
       eq._moment_2 = y**3 - pred.y**3;
    
  • ABS( number list ) specifies that the absolute value of the endogenous variable is raised to the power specified by each number in number list. For example,

       moment y = ABS(3);
    

    adds the following equation to be estimated:

       eq._moment_2 = abs(y)**3 - abs(pred.y)**3;
    
  • LAGnum ( number list ) specifies that the endogenous variable is multiplied by the num th lag of the endogenous variable, and this product is raised to the power specified by each number in number list. For example,

        moment y = LAG4(3);
    

    adds the following equation to be estimated:

       eq._moment_3 = (y*lag4(y))**3 - (pred.y*lag4(pred.y))**3;
    
  • ABS_LAGnum ( number list ) specifies that the endogenous variable is multiplied by the num th lag of the endogenous variable, and the absolute value of this product is raised to the power specified by each number in number list. For example,

        moment y = ABS_LAG4(3);
    

    adds the following equation to be estimated:

       eq._moment_4 = abs(y*lag4(y))**3 - abs(pred.y*lag4(pred.y))**3;
    

The following PROC MODEL statements use the MOMENT statement to generate 24 moments and fit these moments using SMM.

   proc model data=_tmpdata list;
      parms a b .5 s 1;
      instrument _exog_ / intonly;

      u = rannor( 10091 );
      z = rannor( 97631 );

      lsigmasq = xlag(sigmasq,exp(a));

      lnsigmasq = a + b * log(lsigmasq) + s * u;
      sigmasq = exp( lnsigmasq );

      y = sqrt(sigmasq) * z;

      moment y = (2 4) abs(1 3) abs_lag1(1 2) abs_lag2(1 2);
      moment y = abs_lag3(1 2) abs_lag4(1 2)
                 abs_lag5(1 2) abs_lag6(1 2)
                 abs_lag7(1 2) abs_lag8(1 2)
                 abs_lag9(1 2) abs_lag10(1 2);

      fit y  / gmm npreobs=20 ndraw=10;
      bound s > 0, 1>b>0;

   run;