如何将对角线转换矩阵合并到状态空间模型(SSM)框架中?

时间:2019-05-22 13:44:59

标签: matlab kalman-filter state-space

我正在使用SSM框架来估计Diebold-Li的收益曲线模型,类似于https://nl.mathworks.com/help/econ/examples/using-the-kalman-filter-to-estimate-and-forecast-the-diebold-li-model.html

但是,上面的链接对过渡矩阵A使用VAR(1)模型,而我想将A限制为对角线(三个单独的AR(1)进程)。 是否有巧妙的方法将此限制纳入所提供的代码中?

%% State-Space Estimation of the DNS-model with Kalman filter 
Mdl = ssm(@(params)Example_DieboldLi(params,yields,maturities));
% Initialisation 
A0 = EstMdlVAR.AR{1};      % Get the VAR(1) matrix (stored as a cell array)
A0 = A0(:);                % Stack it columnwise
options = optimoptions('fminunc','MaxFunEvals',25000,'algorithm','quasi-newton', ...
    'TolFun' ,1e-8,'TolX',1e-8,'MaxIter',1000,'Display','off');
[EstMdlSSM,params] = estimate(Mdl,yields,param0,'Display','off', ...
    'options',options,'Univariate',true);

我怀疑我必须将优化过程从'fminunc'更改为'fmincon',但是我不知道如何在给定代码编写方式的情况下添加约束。

我试图将A的非对角元素初始化为0,并将优化过程保持为'fminunc',但最终得到了完整的VAR(1)矩阵。

A0 = zeros(3);               % AR(1) version
A0(1,1) = EstMdlAR_beta1.AR{1,1};
A0(2,2) = EstMdlAR_beta2.AR{1,1};
A0(3,3) = EstMdlAR_beta3.AR{1,1};
A0_column = A0(:);           % Stack it columnwise

谢谢。

0 个答案:

没有答案