The data for this example are generated to follow a GARCH(p,q) process by using a random number generation function sgarch . The data set is analyzed and estimates of sigma, the AR parameters, and the MA parameters are returned. The values of the Log-likelihood function and the Akaike Information Criterion are returned.
import java.text.*; import com.imsl.stat.*; import com.imsl.math.PrintMatrix; public class GARCHEx1 { static private void sgarch(int p, int q, int m, double[] x, double[] y, double[] z, double[] y0, double[] sigma) { int i, j, l; double s1, s2, s3; Random rand = new Random(182198625L); rand.setMultiplier(16807); for (i = 0; i < m + 1000; i++) { z[i] = rand.nextNormal(); } l = Math.max(p, q); l = Math.max(l, 1); for (i = 0; i < l; i++) { y0[i] = z[i] * x[0]; } /* COMPUTE THE INITIAL VALUE OF SIGMA */ s3 = 0.0; if (Math.max(p, q) >= 1) { for (i = 1; i < (p + q + 1); i++) { s3 += x[i]; } } for (i = 0; i < l; i++) { sigma[i] = x[0] / (1.0 - s3); } for (i = l; i < (m + 1000); i++) { s1 = 0.0; s2 = 0.0; if (q >= 1) { for (j = 0; j < q; j++) { s1 += x[j + 1] * y0[i - j - 1] * y0[i - j - 1]; } } if (p >= 1) { for (j = 0; j < p; j++) { s2 += x[q + 1 + j] * sigma[i - j - 1]; } } sigma[i] = x[0] + s1 + s2; y0[i] = z[i] * Math.sqrt(sigma[i]); } /* * DISCARD THE FIRST 1000 SIMULATED OBSERVATIONS */ for (i = 0; i < m; i++) { y[i] = y0[1000 + i]; } return; } public static void main(String args[]) throws Exception { int p, q, m; double[] x = {1.3, 0.2, 0.3, 0.4}; double[] xguess = {1.0, 0.1, 0.2, 0.3}; double[] y = new double[1000]; double[] wk1 = new double[2000]; double[] wk2 = new double[2000]; double[] wk3 = new double[2000]; NumberFormat nf = NumberFormat.getInstance(); nf.setMaximumFractionDigits(3); m = 1000; p = 2; q = 1; sgarch(p, q, m, x, y, wk1, wk2, wk3); GARCH garch = new GARCH(p, q, y, xguess); garch.compute(); System.out.println("Sigma estimate is " + nf.format(garch.getSigma())); System.out.println(); new PrintMatrix("ARCH estimate is ").print(garch.getARCH()); new PrintMatrix("GARCH estimate is ").print(garch.getGARCH()); System.out.println("Log-likelihood function value is " + nf.format(garch.getLogLikelihood())); System.out.println("Akaike Information Criterion value is " + nf.format(garch.getAkaike())); } }
Sigma estimate is 1.692 ARCH estimate is 0 0 0.245 GARCH estimate is 0 0 0.337 1 0.31 Log-likelihood function value is -2,707.072 Akaike Information Criterion value is 5,422.144Link to Java source.