www.gusucode.com > econ 案例源码程序 matlab代码 > econ/BoxJenkinsModelSelectionExample.m

    %% Box-Jenkins Model Selection  
% This example shows how to use the Box-Jenkins methodology to select an
% ARIMA model. The time series is the log quarterly Australian Consumer
% Price Index (CPI) measured from 1972 and 1991.   

% Copyright 2015 The MathWorks, Inc.


%% Load the Data
% Load and plot the Australian CPI data. 
load Data_JAustralian
y = DataTable.PAU;
T = length(y);

figure
plot(y)
h1 = gca;
h1.XLim = [0,T];
h1.XTick = 1:10:T;
h1.XTickLabel = datestr(dates(1:10:T),17);
title('Log Quarterly Australian CPI')    

%%
% The series is nonstationary, with a clear upward trend.  

%% Plot the Sample ACF and PACF
% Plot the sample autocorrelation function (ACF) and partial autocorrelation
% function (PACF) for the CPI series. 
figure
subplot(2,1,1) 
autocorr(y)
subplot(2,1,2)
parcorr(y)    

%%
% The significant, linearly decaying sample ACF indicates a nonstationary
% process.  

%% Difference the Data
% Take a first difference of the data, and plot the differenced series. 
dY = diff(y);

figure
plot(dY)
h2 = gca;
h2.XLim = [0,T];
h2.XTick = 1:10:T;
h2.XTickLabel = datestr(dates(2:10:T),17);
title('Differenced Log Quarterly Australian CPI')    

%%
% Differencing removes the linear trend. The differenced series appears
% more stationary.  

%% Plot the Sample ACF and PACF of the Differenced Series
% Plot the sample ACF and PACF of the differenced series to look for behavior
% more consistent with a stationary process. 
figure
subplot(2,1,1)
autocorr(dY)
subplot(2,1,2)
parcorr(dY)    

%%
% The sample ACF of the differenced series decays more quickly. The sample
% PACF cuts off after lag 2. This behavior is consistent with a second-degree
% autoregressive (AR(2)) model.  

%% Specify and Estimate an ARIMA(2,1,0) Model
% Specify, and then estimate, an ARIMA(2,1,0) model for the log quarterly
% Australian CPI. This model has one degree of nonseasonal differencing
% and two AR lags. By default, the innovation distribution is Gaussian with
% a constant variance. 
Mdl = arima(2,1,0);
EstMdl = estimate(Mdl,y); 

%%
% Both AR coefficients are significant at the 0.05 significance level.  

%% Check Goodness of Fit
% Infer the residuals from the fitted model. Check that the residuals are
% normally distributed and uncorrelated. 
res = infer(EstMdl,y);

figure
subplot(2,2,1)
plot(res./sqrt(EstMdl.Variance))
title('Standardized Residuals')
subplot(2,2,2)
qqplot(res)
subplot(2,2,3)
autocorr(res)
subplot(2,2,4)
parcorr(res)

hvec = findall(gcf,'Type','axes');
set(hvec,'TitleFontSizeMultiplier',0.8,...
    'LabelFontSizeMultiplier',0.8);
%%
% The residuals are reasonably normally distributed and uncorrelated.  

%% Generate Forecasts
% Generate forecasts and approximate 95% forecast intervals for the next
% 4 years (16 quarters). 
[yF,yMSE] = forecast(EstMdl,16,'Y0',y);
UB = yF + 1.96*sqrt(yMSE);
LB = yF - 1.96*sqrt(yMSE);

figure
h4 = plot(y,'Color',[.75,.75,.75]);
hold on
h5 = plot(78:93,yF,'r','LineWidth',2);
h6 = plot(78:93,UB,'k--','LineWidth',1.5);
plot(78:93,LB,'k--','LineWidth',1.5);
fDates = [dates; dates(T) + cumsum(diff(dates(T-16:T)))];
h7 = gca;
h7.XTick = 1:10:(T+16);
h7.XTickLabel = datestr(fDates(1:10:end),17);
legend([h4,h5,h6],'Log CPI','Forecast',...
       'Forecast Interval','Location','Northwest')
title('Log Australian CPI Forecast')
hold off
%%
% References: 
%
% Box, G. E. P., G. M. Jenkins, and G. C. Reinsel. _Time Series Analysis: Forecasting and Control_. 3rd ed. Englewood Cliffs, NJ: Prentice Hall, 1994.