Example: Lack Of Fit
Consider the Wölfer Sunspot Data (Anderson 1971, page 660) consisting of the number of sunspots observed each year from 1749 through 1924. The data set for this example consists of the number of sunspots observed from 1770 through 1869. An ARMA(2,1) with nonzero mean is fitted using the ARMA
class. The autocorrelations of the residuals are estimated using the AutoCorrelation
class. Class LackOfFit
is used to compute a portmanteau lack of fit test using 10 lags. The warning message from ARMA
in the output can be ignored. (See Example 2
in ARMA
for a full explanation of the warning message.)
import com.imsl.stat.*;
public class LackOfFitEx1 {
public static void main(String args[]) throws Exception {
int p = 2, q = 1, lagmax = 10, npfree = 4;
double tolerance = 0.125;
// sunspot data for 1770 through 1869
double[] x = {
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
};
// Get residuals from ARMA(2,1) for autocorrelation/lack of fit
ARMA arma = new ARMA(p, q, x);
arma.setMethod(ARMA.LEAST_SQUARES);
arma.setConvergenceTolerance(tolerance);
arma.compute();
double[] residuals = arma.getResidual();
// Get autocorrelations from residuals for lack of fit test
AutoCorrelation ac = new AutoCorrelation(residuals, lagmax);
double[] correlations = ac.getAutoCorrelations();
// Get lack of fit test statistic and p-value
double[] result
= LackOfFit.compute(x.length, correlations, npfree, lagmax);
// Print parameter estimates, test statistic, and p-value
// NOTE: Test Statistic Q follows a Chi-squared dist.
System.out.println("Lack of Fit Statistic, Q = " + result[0]);
System.out.println("P-value of Q = " + result[1]);
}
}
Output
Lack of Fit Statistic, Q = 14.60601806330646
P-value of Q = 0.0235525998617882
Link to Java source.