Unexpected results from GARCH Processes

I'm playing a bit with Time Series and I've been trying to estimate Garch Processes from different time series. Are TimeSeriesModelFit and EstimatedProcess returning accurate results?

An example:

proc = GARCHProcess[0.1, {0.02}, {0.04}];
data = RandomFunction[proc, {1, 250}];
tsm = TimeSeriesModelFit[data, {"GARCH", {1, 1}}];
estimatedProc1=tsm["Process"]
estimatedProc2 =
EstimatedProcess[data, GARCHProcess[1, 1],
ProcessEstimator -> "MaximumConditionalLikelihood"]

GARCHProcess[0.00551636,{0.022469},{0.923687}]
GARCHProcess[0.0112017,{0.0463092},{0.844707}]


A few questions:

• Why are these 2 functions returning different results?
• How do I know which one is the best fit? (I can't seem to get stats for Estimated Process like I do with TimeSeriesModelFit.)
• How do I know there is one with a good fit?
• Are these 2 functions rubbish and if not what do I need to do to improve the quality for the results?

P.S. question for WRI: when are we getting EGARCH, GJR, GARCH for Student T, etc.?

Updated with the same methods

proc = GARCHProcess[0.1, {0.03}, {0.05}];
data = RandomFunction[proc, {1, 250}];
tsm = TimeSeriesModelFit[data, {"GARCH", {1, 1}}];
estimatedProc1 = tsm["Process"]
estimatedProc2 =
EstimatedProcess[data, GARCHProcess[1, 1],
ProcessEstimator -> "MaximumConditionalLikelihood"]

GARCHProcess[0.113584,{0.0000239773},{0.0198394}]
GARCHProcess[0.0395911,{5.86338×10^-13},{0.659115}]


Also the results can change when run at different times.

• Unfortunately, they return different results whatever the method. Updated. Commented May 1, 2015 at 21:10
• Note that this gives different answers when run at different times because you're generating new data each time using RandomFunction. If you want your code to always generate the same data, use SeedRandom first. Commented May 1, 2015 at 22:29
• Good point. I still can't explain the difference or know which one is the best. Maybe I need to programme a MLE function? Commented May 2, 2015 at 9:34
• I've done a few tests with different Garch Processes and EstimatedProcess return higher MLE every time. I'm still not sure it's very accurate still. Commented May 3, 2015 at 8:24
• I am unsure of the specifics, but in general TimeSeriesModelFit will try to use more "lightweight" algorithms than EstimatedProcess, since it is designed to check many different models rather than one specific model, like EstimatedProcess. Commented May 4, 2015 at 15:09

Xavier,

Two things to keep in mind: estimating a GARCH(1,1) with 250 points may not find reliable parameters.

Try increasing the length of the input time series. For example, using 20,000 points I get these results from both approaches (even if the second does not converge fast enough):

with TimeSeriesModelFit:

GARCHProcess[0.0901242, {0.0395382}, {0.113799}]

and with EstimatedProccess:

GARCHProcess[0.0929155, {0.0368543}, {0.0901876}]

Differences hint at different implementations... but Mathematica is a collection of handy black boxes, so this shall remain a mystery until the release of OpenMathematica...(yeah, right)

Cheers!

• Thanks for this Paramecium. I didn't check for higher number of points. Interestingly EstimatedProcess returns the same results as Matlab. Matlab is way faster though! Commented Jul 7, 2015 at 16:48
• Glad I could help. I've looked again at this problem in Matlab 8.3.0.532(R2014a), with the Financial toolbox v5.3 and beware, because although it is a faster numerical computation, the results are not stable (as expected). I do not know how to make a reliable diagnosis of the matlab algorithm, so please beware of taking speed as a sign of accuracy or reliability. Cheers! Commented Jul 20, 2015 at 15:19