我正在使用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
谢谢。