我正在尝试使用粒子滤波器或广义卡尔曼滤波器来评估动态多变量Tobit模型的可能性,即使用经过审查的数据;该代码将用Matlab编写。 我的方法是将模型重新构建为状态空间系统,其中潜在变量对应于系统状态。从潜伏空间到可观测空间的映射测量方程的特征在于时变系数,取决于给定时间段内的数据是否被删失-自然地,该“参数”无需估算。但是,这导致卡尔曼增益(或其他滤波器中的相应概念)是奇异的,并且无法评估可能性。
非常感谢您提供有关如何解决此问题的建议。
最好的问候, 卢卡斯
注意:以下是使用简单卡尔曼滤波器的代码说明
% Initialize the State Vector at the Stationary Distribution
[T,l] = size(y);
[n,n] = size(Phi);
s = zeros(T+1,n);
P = zeros(T+1,n,n);
s(1,:) = zeros(n,1)';
a = inv(eye(n*n) - kron(Phi,Phi))*reshape(R*Se*R',n*n,1);
P(1,:,:) = reshape(a,n,n);
% Kalman Filter Recursion
sprime = zeros(n,1);
Pprime = zeros(n,n);
errorprediction = ones(T,l);
Varerrorprediction = ones(T,l,l);
liki = ones(T,1);
measurepredi = ones(T,l);
for i=1:T
% Updating Step
sprime = Phi*s(i,:)';
Pprime = Phi*squeeze(P(i,:,:))*Phi' + R*Se*R';
% Prediction Step
yprediction = A + B(i)*sprime;
v = y(i,:)' - yprediction;
F = B(i)*Pprime*B(i)' + H; % B is a vector of 1/0's =>F singular /:
kgain = Pprime*B(i)'*inv(F);
s(i+1,:) = (sprime + kgain*v)';
P(i+1,:,:) = Pprime - kgain*B(i)*Pprime;
errorprediction(i,:) = v';
Varerrorprediction(i,:,:) = F;
liki(i) = -0.5*l*log(2*pi) - 0.5*log(det(F)) - 0.5*v'*inv(F)*v;
measurepredi(i,:) = y(i,:)-v';
end
statepredi = s;
varstatepredi = P;