www.gusucode.com > econ 案例源码程序 matlab代码 > econ/SmoothStatesOfDiffuseStateSpaceModelWithRegExample.m
%% Smooth States of Diffuse State-Space Model Containing Regression Component % Suppose that the linear relationship between unemployment rate and the % nominal gross national product (nGNP) is of interest. Suppose % further that unemployment rate is an AR(1) series. Symbolically, and in % state-space form, the model is % % $$\begin{array}{l} % x_{t} = \phi x_{t - 1} + \sigma u_{t}\\ % {y_t} - \beta {Z_t} = {x_{t}}, % \end{array}$$ % % where: % % * $x_{t}$ is the unemployment rate at time _t_. % * $y_{t}$ is the observed change in the unemployment rate being deflated % by the return of nGNP ($Z_t$). % * $u_{t}$ is the Gaussian series of state disturbances having mean 0 and % unknown standard deviation $\sigma$. % %% % Load the Nelson-Plosser data set, which contains the unemployment rate % and nGNP series, among other things. % Copyright 2015 The MathWorks, Inc. load Data_NelsonPlosser %% % Preprocess the data by taking the natural logarithm of the nGNP series, % and removing the starting |NaN| values from each series. isNaN = any(ismissing(DataTable),2); % Flag periods containing NaNs gnpn = DataTable.GNPN(~isNaN); y = diff(DataTable.UR(~isNaN)); T = size(gnpn,1); % The sample size Z = price2ret(gnpn); %% % This example continues using the series without |NaN| values. However, using % the Kalman filter framework, the software can accommodate series % containing missing values. %% % Specify the coefficient matrices. A = NaN; B = NaN; C = 1; %% % Create the state-space model using |dssm| by supplying the coefficient % matrices and specifying that the state values come from a diffuse % distribution. The diffuse specification indicates complete ignorance % about the moments of the initial distribution. StateType = 2; Mdl = dssm(A,B,C,'StateType',StateType); %% % Estimate the parameters. Specify the regression component and its % initial value for optimization using the |'Predictors'| and |'Beta0'| % name-value pair arguments, respectively. Display the estimates and all % optimization diagnostic information. Restrict the estimate of $\sigma$ % to all positive, real numbers. params0 = [0.3 0.2]; % Initial values chosen arbitrarily Beta0 = 0.1; [EstMdl,estParams] = estimate(Mdl,y,params0,'Predictors',Z,'Beta0',Beta0,... 'lb',[-Inf 0 -Inf]); %% % |EstMdl| is a |dssm| model, and you can access its properties using dot % notation. %% % Smooth the estimated diffuse state-space model. |EstMdl| does not store % the data or the regression coefficients, so you must pass in them in % using the name-value pair arguments |'Predictors'| and |'Beta'|, % respectively. Plot the smoothed states. SmoothedX = smooth(EstMdl,y,'Predictors',Z,'Beta',estParams(end)); figure plot(dates(end-(T-1)+1:end),SmoothedX); xlabel('Period') ylabel('Change in the unemployment rate') title('Smoothed Change in the Unemployment Rate') axis tight