import java.text.*; import com.imsl.stat.*; import com.imsl.math.PrintMatrix; import com.imsl.math.PrintMatrixFormat; public class ARMAEx3 { public static void main(String args[]) throws Exception { /* sunspots from 1770 to 1869 */ 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}; int backwardOrigin = 3; double[][] printTable = new double[15][4]; double[][] printEstimates = new double[1][4]; double[] forecasts; double[] deviations; PrintMatrixFormat pmf = new PrintMatrixFormat(); PrintMatrix pm = new PrintMatrix(); NumberFormat nf = NumberFormat.getNumberInstance(); pm.setColumnSpacing(3); ARMA arma = new ARMA(2, 1, z); arma.setRelativeError(0.0); arma.setMaxIterations(0); arma.compute(); System.out.println("ARMA ESTIMATES"); double[] ar = arma.getAR(); double[] ma = arma.getMA(); printEstimates[0][0] = arma.getConstant(); printEstimates[0][1] = ar[0]; printEstimates[0][2] = ar[1]; printEstimates[0][3] = ma[0]; String[] estimateLabels = {"Constant", "AR(1)", "AR(2)", "MA(1)"}; pmf.setColumnLabels(estimateLabels); nf.setMinimumFractionDigits(5); nf.setMaximumFractionDigits(5); pmf.setNumberFormat(nf); pm.setTitle("ARMA ESTIMATES"); pm.print(pmf, printEstimates); arma.setBackwardOrigin(backwardOrigin); String[] labels = { "From 1866", "From 1867", "From 1868", "From 1869"}; pmf.setColumnLabels(labels); pmf.setFirstRowNumber(1); nf.setMinimumFractionDigits(1); nf.setMaximumFractionDigits(1); pmf.setNumberFormat(nf); pm.setTitle("FORECASTS"); pm.print(pmf, arma.forecast(5)); /* FORECASTING - An example of forecasting using the ARMA estimates * In this case, forecasts are returned for the last 10 values in the * series followed by the forecasts for the next 5 values. */ String[] forecastLabels={"Observed", "Forecast", "Residual", "UCL(90%)"}; pmf.setColumnLabels(forecastLabels); backwardOrigin = 10; arma.setBackwardOrigin(backwardOrigin); int n_forecast = 5; arma.setConfidence(0.9); forecasts = arma.getForecast(n_forecast); deviations = arma.getDeviations(); for(int i=0; i