Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

- Home
- /
- Analytics
- /
- Forecasting
- /
- A question regarding Exponential GARCH models

Options

- RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

Posted 12-09-2013 09:24 AM
(1173 views)

To whom it may concern,

The estimate I got for EGARCH1 is too high (above 0.99) and it suggests that it may not be a global maximum, is there anyway to restrict the parameter to be something smaller than 0.99?

This is the code I originally used:

proc autoreg data=Finance_Modeling_Sample;

model y = / garch=(p=1,q=1 , type = exp);

hetero het1 het2;

run;

The result I got, with EGARCH1(0.9950) being too high.

Intercept | 1 | 1.6148 | 0.000540 | 2990.80 | <.0001 |
---|---|---|---|---|---|

EARCH0 | 1 | 0.000673 | 0.000261 | 2.58 | 0.0099 |

EARCH1 | 1 | 0.0736 | 0.000454 | 162.14 | <.0001 |

EGARCH1 | 1 | 0.9950 | 0.0000691 | 14401.0 | <.0001 |

THETA | 1 | 0.0166 | 0.002381 | 6.97 | <.0001 |

HET1 | 1 | 0.004952 | 0.002694 | 1.84 | 0.0661 |

HET2 | 1 | 5.8208 | 0.6125 | 9.50 | <.0001 |

So I added the restrict statement below,

proc autoreg data=Data;

model y = / garch=(p=1,q=1 , type = exp);

hetero het1 het2;

restrict Egarch1<=0.98;

run;

But it seems HET1 is affected and I'm not sure why t value is infinity. Something doesn't seem right. Did I use the restrict statement correctly?

Intercept | 1 | 1.6173 | 0.000583 | 2776.25 | <.0001 |
---|---|---|---|---|---|

EARCH0 | 1 | -0.0214 | 0.000477 | -44.90 | <.0001 |

EARCH1 | 1 | 0.1493 | 0.000776 | 192.29 | <.0001 |

EGARCH1 | 1 | 0.9800 | 0 | Infty | <.0001 |

THETA | 1 | -0.0503 | 0.002424 | -20.77 | <.0001 |

HET1 | 1 | 0 | 0 | . | . |

HET2 | 1 | 37.2072 | 1.3713 | 27.13 | <.0001 |

Restrict1 | -1 | 95.7594 | 49.6844 | 1.93 | 0.0539 |

Restrict2 | -1 | 39224 | 540.4422 | 72.58 | <.0001 |

I only had one restrict statement, how come there are two restrict parameters in the table above?

I also tried to hard-coded following an example online:

PROC MODEL DATA=Data;

label ro='x1 parameter'

cv='x2 parameter'

tb='x3 parameter'

tp='x4 parameter'

Dm='x5 parameter'

ro2='het1 parameter'

cv2='het2 parameter';

/*Mean model*/

log_yield = intercept+ro*x1+cv*x2+tb*x3+tp*x4+dm*x5;

/*Variance Model*/

if (_obs_=1) then

h.y=exp(earch0+egarch1*log(mse.y))+ro2*x1+CV2*x2;

else

h.y=exp(earch0+earch1*zlag(g) +egarch1*log(zlag(h.y)))+ro2*het1+CV2*het2;

g=- theta*nresid.y+abs(nresid.y) - sqrt(2/CONSTANT('pi')) ;

fit y/method=marquardt fiml;

run;

However, I got the following error message. My data set is mostly populated and what would you advise me to do to fix this?

A total of 87930 errors occurred for 87930 observations during execution of the model program. These errors may produce missing valued results, which may cause the observations to be omitted.

At FIML Iteration 0, with the parameter values listed below, there are 0 nonmissing observations available. At least 18 are needed to compute the next iteration.

Note: | Check the starting values used for the parameter estimates. Invalid starting values can cause errors which produce missing results, and prevent the iterative estimation process from proceeding. |

Thank you, in advance, for taking your time to read my question!

1 REPLY 1

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

I have consulted with the author of procedure and he has informed me that currently there does not exist the capability to estimate this model with an inequality constraint. A product improvement suggestion has been initiated. Thank you.

the correct form for an equality constraint in AUTOREG on 12.3 is .

**data** MyData;

do t=**1** to **1000**;

Log_Yield = normal(**111**);

temp = normal(**111**);

if (temp>**0**) then extravar1 = **1**;

else extravar1 = **0**;

temp = normal(**111**);

if (temp>**0**) then extravar2 = **1**;

else extravar2 = **0**;

output;

end;

drop temp t;

**run**;

**proc** **autoreg** data=MyData outest=o1;

model Log_Yield = / garch=(p=**1**,q=**1** , type = exp) initial=(**1.6** **0.01** **0.07** **0.1** **0.01** **0.01** **5.47**) maxiter=**1000** converge=**0.01** ;

hetero extravar1 extravar2 / coef=nonneg;

restrict _GH_1=**0.0099**;

**run**;

Are you ready for the spotlight? We're accepting content ideas for **SAS Innovate 2025** to be held May 6-9 in Orlando, FL. The call is **open **until September 25. Read more here about **why** you should contribute and **what is in it** for you!

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.