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

    %% Estimate a Regression Model with ARIMA Errors  
% This example shows how to estimate the sensitivity of the US Gross Domestic
% Product (GDP) to changes in the Consumer Price Index (CPI) using |estimate|.   

% Copyright 2015 The MathWorks, Inc.


%% 
% Load the US macroeconomic data set, |Data_USEconModel|. Plot the GDP and CPI. 
load Data_USEconModel
gdp = DataTable.GDP;
cpi = DataTable.CPIAUCSL;

figure
plot(dates,gdp)
title('{\bf US Gross Domestic Product, Q1 in 1947 to Q1 in 2009}')
datetick
axis tight

figure
plot(dates,cpi)
title('{\bf US Consumer Price Index, Q1 in 1947 to Q1 in 2009}')
datetick
axis tight       

%%
% |gdp| and |cpi| seem to increase exponentially.  

%% 
% Regress |gdp| onto |cpi|. Plot the residuals. 
XDes = [ones(length(cpi),1) cpi]; % Design matrix
beta = XDes\gdp;
u = gdp - XDes*beta; % Residuals

figure
plot(u)
h1 = gca;
hold on
plot(h1.XLim,[0 0],'r:')
title('{\bf Residual Plot}')
hold off    

%%
% The pattern of the residuals suggests that the standard linear model assumption
% of uncorrelated errors is violated. The residuals appear autocorrelated.  

%% 
% Plot correlograms for the residuals. 
figure
subplot(2,1,1)
autocorr(u)
subplot(2,1,2)
parcorr(u)    

%%
% The autocorrelation function suggests that the residuals are a nonstationary
% process.  

%% 
% Apply the first difference to the logged series to stabilize the residuals. 
dlGDP = diff(log(gdp));
dlCPI = diff(log(cpi));
dlXDes = [ones(length(dlCPI),1) dlCPI];
beta = dlXDes\dlGDP;
u = dlGDP - dlXDes*beta;

figure
plot(u);
h2 = gca;
hold on
plot(h2.XLim,[0 0],'r:')
title('{\bf Residual Plot, Transformed Series}')
hold off

figure
subplot(2,1,1)
autocorr(u)
subplot(2,1,2)
parcorr(u)       

%%
% The residual plot from the transformed data suggests stabilized, albeit
% heteroscedastic, unconditional disturbances. The correlograms suggest
% that the unconditional disturbances follow an AR(1) process.  

%% 
% Specify the regression model with AR(1) errors: 
%
% $$\begin{array}{c}\texttt{dlGDP} = \texttt{Intercept} +
% \texttt{dlCPI}\beta  + {u_t}\\{u_t} = \phi {u_{t - 1}} + {\varepsilon
% _t}.\end{array}$$
%
Mdl = regARIMA('ARLags',1);

%%
% |estimate| estimates any parameter having a value of |NaN|.  

%% 
% Fit |Mdl| to the data. 
EstMdl = estimate(Mdl,dlGDP,'X',dlCPI,'Display','params');  

%% 
% Alternatively, estimate the regression coefficients and Newey-West standard
% errors using |hac|. 
hac(dlCPI,dlGDP,'intercept',true,'display','full'); 

%%
% The intercept estimates are close, but the regression coefficient estimates
% corresponding to |dlCPI| are not. This is because |regARIMA| explicitly
% models for the autocorrelation of the disturbances. |hac| estimates the
% coefficients using ordinary least squares, and returns standard errors
% that are robust to the residual autocorrelation and heteroscedasticity.  

%% 
% Assuming that the model is correct, the results suggest that an increase
% of one point in the CPI rate increases the GDP growth rate by 0.399 points.
% This effect is significant according to the t statistic. 
%
% From here, you can use |forecast| or |simulate| to obtain forecasts and
% forecast intervals for the GDP rate. You can also compare several models
% by computing their AIC statistics using |aicbic|.