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

    %% Simulate a Regression Model with Nonstationary Exponential Errors
% This example shows how to simulate responses from a regression model with
% nonstationary, exponential, unconditional disturbances. Assume that the
% predictors are white noise sequences.
%%
% Specify the following ARIMA error model:
%
% $$\Delta u_t = 0.9 \Delta u_{t-1} + \varepsilon_t,$$
%
% where the innovations are Gaussian with mean 0 and variance 0.05.

% Copyright 2015 The MathWorks, Inc.

T = 50; % Sample size
MdlU = arima('AR',0.9,'Variance',0.05,'D',1,'Constant',0);
%%
% Simulate unconditional disturbances.  Exponentiate the simulated errors.
rng(10); % For reproducibility
u = simulate(MdlU,T,'Y0',[0.5:1.5]');
expU = exp(u);
%%
% Simulate two Gaussian predictor series with mean 0 and variance 1.
X = randn(T,2);
%%
% Generate responses from the regression model with time series errors:
%
% $$y_t = 3 + X_t\left[\matrix{2\cr-1.5}\right]+e^{u_t}.$$
%
Beta = [2;-1.5];
Intercept = 3;
y = Intercept + X*Beta + expU;
%%
% Plot the responses.
figure
plot(y)
title('Simulated Responses')
axis tight
%%
% The response series seems to grow exponentially (as constructed).
%%
% Regress |y| onto |X|. Plot the residuals.
RegMdl1 = fitlm(X,y);

figure
subplot(2,1,1)
plotResiduals(RegMdl1,'caseorder','LineStyle','-')
subplot(2,1,2)
plotResiduals(RegMdl1,'lagged')
%%
% The residuals seem to grow exponentially, and seem autocorrelated (as
% constructed).
%%
% Treat the nonstationary unconditional disturbances by
% transforming the data appropriately.  In this case, take the log of the
% response series. Difference the logged responses. It is recommended to
% transform the predictors the same way as the responses to maintain the
% original interpretation of their relationship. However, do not transform
% the predictors in this case because they contain negative values.
% Reestimate the regression model using the transformed responses, and
% plot the residuals.
dLogY = diff(log(y));
RegMdl2 = fitlm(X(2:end,:),dLogY);

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

h = adftest(RegMdl2.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.