Example 2: ARMA

The data for this example are the same as that for Example 1. Preliminary method of moments estimates are computed by default, and the method of least squares is used to find the final estimates. Note that at the end of the output, a warning message appears. In most cases, this warning message can be ignored. There are three general reasons this warning can occur:

  1. Convergence is declared using the criterion based on tolerance, but the gradient of the residual sum-of-squares function is nonzero. This occurs in this example. Either the message can be ignored or tolerance can be reduced to allow more iterations and a slightly more accurate solution.
  2. Convergence is declared based on the fact that a very small step was taken, but the gradient of the residual sum-of-squares function was nonzero. This message can usually be ignored. Sometimes, however, the algorithm is making very slow progress and is not near a minimum.
  3. Convergence is not declared after 100 iterations.

Trying a smaller value for tolerance can help determine what caused the error message.

import java.text.*;
import com.imsl.stat.*;
import com.imsl.math.PrintMatrix;

public class ARMAEx2 {
    public static void main(String args[]) throws Exception {
        double[] arInit = {1.24426e0, -5.75149e-1};
        double[] maInit = {-1.24094e-1};
        double[] z = {100.8, 81.6, 66.5, 34.8, 30.6, 7, 19.8, 92.5,
        154.4, 125.9, 84.8, 68.1, 38.5, 22.8, 10.2, 24.1, 82.9,
        132, 130.9, 118.1, 89.9, 66.6, 60, 46.9, 41, 21.3, 16,
        6.4, 4.1, 6.8, 14.5, 34, 45, 43.1, 47.5, 42.2, 28.1, 10.1,
        8.1, 2.5, 0, 1.4, 5, 12.2, 13.9, 35.4, 45.8, 41.1, 30.4,
        23.9, 15.7, 6.6, 4, 1.8, 8.5, 16.6, 36.3, 49.7, 62.5,
        67, 71, 47.8, 27.5, 8.5, 13.2, 56.9, 121.5, 138.3, 103.2,
        85.8, 63.2, 36.8, 24.2, 10.7, 15, 40.1, 61.5, 98.5,
        124.3, 95.9, 66.5, 64.5, 54.2, 39, 20.6, 6.7, 4.3, 22.8,
        54.8, 93.8, 95.7, 77.2, 59.1, 44, 47, 30.5, 16.3, 7.3,
        37.3, 73.9};
        
        ARMA arma = new ARMA(2, 1, z);
        arma.setMethod(arma.LEAST_SQUARES);
        arma.setInitialEstimates(arInit, maInit);
        arma.setConvergenceTolerance(0.125);
        arma.setMean(46.976);
        arma.compute();
        
        new PrintMatrix("AR estimates are:  ").print(arma.getAR());
        System.out.println();
        new PrintMatrix("MA estimate is:  ").print(arma.getMA());
    }
}

Output

AR estimates are:  
     0     
0   1.393  
1  -0.734  


MA estimate is:  
     0     
0  -0.137  

Link to Java source.