package com.imsl.test.example.stat; import com.imsl.math.Quadrature; import com.imsl.stat.EGARCH; import com.imsl.stat.ExtendedGARCH; import com.imsl.stat.Pdf; import com.imsl.stat.TimeSeries; import java.util.logging.Level; import java.util.logging.Logger; /** * *

* Fits an EGARCH(1, 1) with a user defined distribution on \(z_t\). *

* *

* This example fits the exponential GARCH (EGARCH) to a segment of S&P 500 * returns for a period in 1988. Forecasts 4 steps ahead from the end of the series * are generated. A t-distribution is defined for \(z_t\), along with estimation * of \(E[|z_t|]\) using a quadrature method. *

* * @see Code * @see Output */ public class EGARCHEx2 { public static void main(String args[]) { double data1[] = { 0.940543272, 2.664279727, 0.252045652, 1.221098464, 0.270575973, 0.446882726, 0.073672969, -4.450030305, 0.007699415, -0.215808015, -0.498908466, -0.696433123, 0.113159704, 1.440322251, 0.887874183, 0.5585227, -0.049267619, -0.452119841, -0.488606538, 0.087972619, 0.549032948, -1.024238871, -0.589472147, -0.507487482, -0.365744931, 0.42010331, -1.687159586, 0.212950629, 1.147614577, 0.748805609, -1.311175287, -1.574960025, 0.484204788, 0.178009897, -0.869311816, 1.062785115, 0.098566846, 0.342257263, -0.47633197 }; TimeSeries ts; ts = new TimeSeries(); ts.setSeriesValues(data1); class myZdistribution implements ExtendedGARCH.zDistribution { private double df = ts.getLength() - 4; class QuadratureFunction implements Quadrature.Function { @Override public double f(double z) { return StrictMath.abs(z) * zPdf(z); } } @Override public double zPdf(double z) { double pdf = 0.0; try { pdf = Pdf.noncentralStudentsT(z, df, 0.0); } catch (Pdf.AltSeriesAccuracyLossException ex) { Logger.getLogger(EGARCHEx2.class.getName()).log(Level.SEVERE, null, ex); } return pdf; } public double getExpectedAbsZ() { Quadrature q = new Quadrature(); QuadratureFunction fcn = new QuadratureFunction(); double a = -5; double b = 5; q.setRule(2); return q.eval(fcn, a, b); } } myZdistribution myZdist = new myZdistribution(); EGARCH egarch = new EGARCH(ts); egarch.setZDistribution(myZdist); double[] values=new double[1]; values[0]=myZdist.getExpectedAbsZ(); egarch.setValues(values); String[] names={"omega","alpha","beta","gamma"}; try { egarch.estimate(); double[] parameters = egarch.getParameters(); int nParameters = egarch.getNumberOfParameters(); int T = egarch.getT(); double[][][] forecasts = egarch.forecast(1, 4); System.out.println("Parameter estimates:"); for(int j=0;j