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

    %% Simulate a Regression Model with Nonstationary Errors
% This example shows how to simulate responses from a regression model with
% ARIMA unconditional disturbances, assuming that the predictors
% are white noise sequences.
%%
% Specify the regression model with ARIMA errors:
%
% $$y_t = 3 + X_t\left[\matrix{2 \cr -1.5}\right] + u_t$$
% 
% $$\Delta u_t = 0.5\Delta u_{t-1} + \varepsilon_t + 1.4\varepsilon_{t-1} + 0.8\varepsilon_{t-2},$$
%
% where the innovations are Gaussian with variance 1.

% Copyright 2015 The MathWorks, Inc.

T = 150; % Sample size
Mdl = regARIMA('MA',{1.4,0.8},'AR',0.5,'Intercept',3,...
    'Variance',1,'Beta',[2;-1.5],'D',1);
%%
% Simulate two Gaussian predictor series with mean 0 and variance 1.
rng(1); % For reproducibility
X = randn(T,2);
%%
% Simulate and plot the response series.
y = simulate(Mdl,T,'X',X);

figure;
plot(y);
title 'Simulated Responses';
axis tight;
%%
% Regress |y| onto |X|. Plot the residuals, and test them for a unit root.
RegMdl = fitlm(X,y);

figure;
subplot(2,1,1);
plotResiduals(RegMdl,'caseorder');
subplot(2,1,2);
plotResiduals(RegMdl,'lagged');

h = adftest(RegMdl.Residuals.Raw)
%%
% The residual plots indicate that they are autocorrelated and possibly
% nonstationary (as constructed).  |h = 0| indicates that there is insufficient evidence to
% suggest that the residual series is not a unit root process.
%%
% Treat the nonstationary unconditional disturbances by 
% transforming the data appropriately. In this case, difference the responses
% and predictors. Reestimate the regression model using the transformed
% responses, and plot the residuals.
dY = diff(y);
dX = diff(X);
dRegMdl = fitlm(dX,dY);

figure;
subplot(2,1,1);
plotResiduals(dRegMdl,'caseorder','LineStyle','-');
subplot(2,1,2);
plotResiduals(dRegMdl,'lagged');

h = adftest(dRegMdl.Residuals.Raw)
%%
% The residual plots indicate that they are still autocorrelated, but
% stationary. |h = 1| indicates that there is enough evidence to suggest
% that the residual series is not a unit root process.
%%
% Once the residuals appear stationary, you can determine the appropriate
% number of lags for the error model using Box and Jenkins methodology.
% Then, use |regARIMA| to completely model the regression model with ARIMA
% errors.