BookmarkSubscribeRSS Feed
Fluorite | Level 6
Re: MA(2)[ Edited ]


I am applying a second order moving average process (MA(2)) to uncover the
unobserved returns.


I am trying to estimate the parameters of the model for each hedge fund strategy by maximum likeli-
hood. Then the estimated parameters will be used to desmooth returns.

How do i go about this last part. You help would be greatly appreciated


My codes so far just gives me the moving average factor

proc arima data = sample ;
by mainstrategy;

identify var=returns nlag=6 outcov=acf noprint ;

estimate q=2;

run ;


Is there a problem with using the by statement in arima procedure. Is there another way to achieve the same results without using the by statement.



My orginal data is too huge to upload so here is a sample

Date       Return     AUM    mainstrategy

199512   -0.0055   26.9     Relative value

199601    0.0048   27.1      Relative value

199602    0.0089   30.7      CTA

SAS Employee


There is no problem with using BY groups in PROC ARIMA.  In order to obtain ML estimates of the MA parameters you must use method=ml option in the estimate statement.  However, I do not understand your question very well.  It is unclear what you mean by "desmoothing" using the estimated MA parameters.  Assuming "returns" are your observed returns, you are fitting a returns = constant + MA(2) model.  If you want, (returns - estimated constant) can surve as an estimate of the MA part.  Is this what you want?


By the way, your mathematical equation does not conform to your ARIMA model specification.  Do you mean the unobserved R_t acts like the white noise part of the ARIMA model?  ARIMA assumes theta_0 to be 1.


There is another procedure, PROC UCM, in SAS/ETS that might be more appropriate for decomposing your returns into a slow moving smooth part and a rougher noise part.  See an example of trend removal using HP filter:  You can also get a decomposition based on an MA(2) component (see the syntax for IRREGULAR component:  UCM is a very general purpose procedure to obtain such decompositions.  It supports BY processing also.  If you want even more customization, you can use the SSM procedure (  However, SSM procedure usually requires more coding.


Hope this helps.


Hope this helps.


Fluorite | Level 6

Hi Rajesh,

I think there can be a bit of confusion in the equation because of the R's. But lets take a clearer one where


where X_t is the unobserved returns and  nt is the white noise. then I want to estimate the parameters using the
maximum likelihood estimation method with the normalization constraint 1 = theta0 + theta1 + theta2.




SAS Employee

Unfortunately, PROC ARIMA will not be able to impose this restriction on thetas.  I think your theta_0 can be absorbed in the variance parameter of eta.  In ARIMA, theta1 and theta2 (scaled by theta0) satisfy the invertibility condition.



Registration is open! SAS is returning to Vegas for an AI and analytics experience like no other! Whether you're an executive, manager, end user or SAS partner, SAS Innovate is designed for everyone on your team. Register for just $495 by 12/31/2023.

If you are interested in speaking, there is still time to submit a session idea. More details are posted on the website. 

Register now!

Multiple Linear Regression in SAS

Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.

Find more tutorials on the SAS Users YouTube channel.

Discussion stats
  • 3 replies
  • 1 like
  • 2 in conversation