www.gusucode.com > econ 案例源码程序 matlab代码 > econ/RefineInitialParametersAfterFittingStateSpaceModelsExample.m
%% Refine Initial Parameters After Fitting State-Space Models % This example shows how to choose a better set of initial parameter values % to pass to |estimate| when you estimate |ssm| models. %% % State-space models tend to induce likelihood surfaces that have multiple % maxima. Also, the software uses numerical optimization to find the % parameter estimates. Therefore, it is important to use a good initial % value for the parameters to attain the global maximum of the likelihood % function. %% % Suppose that a latent process is a random walk. Subsequently, the state % equation is % % $$x_t = x_{t-1} + u_t,$$ % % where $u_t$ is Gaussian with mean 0 and standard deviation 1. %% % Generate a random series of 100 observations from $x_t$, assuming that the % series starts at 1.5. % Copyright 2015 The MathWorks, Inc. T = 100; rng(1); % For reproducibility u = randn(T,1); x = cumsum([1.5;u]); x = x(2:end); %% % Suppose further that the latent process is subject to additive % measurement error. Subsequently, the observation equation is % % $$y_t = x_t + \varepsilon_t,$$ % % where $\varepsilon_t$ is Gaussian with mean 0 and standard deviation % 1. %% % Use the random latent state process (|x|) and the observation equation to % generate observations. y = x + randn(T,1); %% % Together, the latent process and observation equations compose a % state-space model. Assume that the state is a stationary AR(1) process. % Then, the state-space model is % % $$\begin{array}{c}x_t = \phi x_{t-1} + \sigma_1u_t \\ y_t = x_t + % \sigma_2\varepsilon_t.\end{array}$$ % %% % Specify the coefficient matrices. Use |NaN| values for unknown parameters. A = NaN; B = NaN; C = 1; D = NaN; %% % Specify the state-space model using the coefficient matrices. Specify % that the initial state distribution is stationary using the |StateType| % name-value pair argument. StateType = 0; Mdl = ssm(A,B,C,D,'StateType',StateType); %% % |Mdl| is an |ssm| model. The software sets values for the initial state % mean and variance. Verify that the model is correctly specified using the % display in the Command Window. %% % Pass the observations to |estimate| to estimate the parameters. Set % starting values for the parameters to |params0| that are likely not their % corresponding true values. Also, specify lower bound constraints of |0| % for the standard deviations. params0 = [-1e7 1e-6 2000]; EstMdl = estimate(Mdl,y,params0,'lb',[-Inf,0,0]); %% % |estimate| failed to converge, and so the results are undesirable. %% % Refine |params0| using |refine|. Output = refine(Mdl,y,params0); logL = cell2mat({Output.LogLikelihood})'; [~,maxLogLIndx] = max(logL) refinedParams0 = Output(maxLogLIndx).Parameters Description = Output(maxLogLIndx).Description %% % The algorithm that yields the highest loglikelihood value is % |Loose bound interior point|, which is the third |struct| in the structure array % |Output|. %% % Estimate |Mdl| using |refinedParams0|, which is the vector of refined % initial parameter values. EstMdl = estimate(Mdl,y,refinedParams0,'lb',[-Inf,0,0]); %% % |estimate| converged, making the parameter estimates much more % desirable.