Hi,I am trying to implement Vasicek multifactor model using Kalman filter. It is inspired by bank of Canada research paper
http://citeseerx.ist.psu.edu/viewdoc/do ... e=pdf.Also I took some help from already available matlab code in this area.Can anyone help me in finding, whats wrong with model because I am not getting the result I want to.Or alternatively suggest source where I can get ready-made and working code.Any help will be greatly appreciatedI am pasting my matlab code herematlab script (where I am passing parameters to function LLmultiVASICEK)function []=MinimizeLLRateSimVASICEK() % Inputs for term structure generator, and minimizer tau=[1/12,3/12,6/12,10];% Ya=RateSimVASICEK(0.06,0.05,0.02,-0.2,1/12,0.06,120,tau); Ya = xlsread('Copy of US.xls'); Y=Ya'; [nrow, ncol] = size(Ya); lb=[0.0001,0.0001,0.0001,-1, 0.00001*ones(1,ncol)]; ub=[ones(1,8)]; para0=[0.06,0.05,0.02,-0.2,.3,.08,.05,-.3,.5,.48,.02,-.1,.1*rand(1,ncol).*ones(1,ncol),3]; % Choose 'good' starting values % Minimizer [x,fval]=fmincon(@LLmultiVASICEK,para0,[],[],[],[],lb,ub,[],[],Y, tau, nrow, ncol,3)Function to use Kalman filter in multiple factor vasicek modelfunction sumll=LLmultiVASICEK(para,Y, tau, nrow, ncol,NoFactor)% initialize the parameters for VASICEK modeltheta=zeros(NoFactor,1);sigma=zeros(NoFactor);kappa=zeros(NoFactor);lambda=zeros(NoFactor);for i=1:NoFactortheta(i,1)=para(4*i-3); kappa(i)=para(4*i-2);sigma(i)=para(4*i-1);lambda(i)=para(4*i);endsigmai=para(4*NoFactor+1:end);R=eye(ncol);for i=1:ncol R(i,i)=sigmai(i)^2;enddt=1/12;% System Matrices InitializationC=zeros(NoFactor,1);F=zeros(NoFactor,NoFactor);for i=1:NoFactor C(i,1)=theta(i,1)*(1-exp(-kappa(i)*dt)); % eqnF(i,i) = exp(-kappa(i)*dt); endA = zeros( ncol,1);H = zeros(ncol,NoFactor);% Create A and Bfor i = 1:ncol % Make System Matrices for each tau for j=1:NoFactor AffineG=kappa(j)^2*(theta(j,1)-(sigma(j)*lambda(j))/kappa(j))-sigma(j)^2/2; % eqn a.6 AffineB=1/kappa(j)*(1-exp(-kappa(j)*tau(i))); % eqn a.5 AffineA=AffineG*(AffineB-tau(i))/kappa(j)^2-(sigma(j)^2*AffineB^2)/(4*kappa(j)); % eqn a.4 A(i)=A(i)-AffineA/tau(i); % eqn b.2 H(i,j)=AffineB/tau(i); % eqn b.2 endend%% Kalman Filter% Step 1initx=theta; % eqn 66initV=zeros(NoFactor,NoFactor);for i=1:NoFactorinitV(i,i)= sigma(i)^2/(2*kappa(i)); % eqn 67end% Starting valuesMeanY=initx;VarY=initV;LL=zeros(nrow,1); % log-likelihood vector initializationfor i=1:nrow % Step 2 MeanZ=A+H*MeanY; % eqn 69 VarZ=H*VarY*H'+R ; % eqn 70 % Step 3 PredError=Y(:,i) -MeanZ; % eqn 71 Q=zeros(NoFactor,NoFactor); for j=1:NoFactor Q(j,j)=theta(j,1)*sigma(j)*sigma(j)*(1-exp(-kappa(j)*dt))^2/(2*kappa(j))+sigma(j)*sigma(j)/kappa(j)*(exp(-kappa(j)*dt)-exp(-2*kappa(j)*dt)); % eqn b.4 end KalmanGain=VarY*H'/VarZ; % eqn 73 InitMeanY=MeanY+KalmanGain*PredError; % eqn 72 InitVarY=(1-KalmanGain*H)*VarY; % eqn 74 MeanY=C+F*InitMeanY; % eqn 75 VarY=VarY- F*InitVarY*F'+Q; % eqn 76 % Step 5 Construct the likelihood function DetY=det(VarZ); LL(i)=-(ncol/2)*log(2*pi)-0.5*log(DetY)-0.5*PredError'/VarZ*PredError; % eqn c.12endsumll = -sum(LL);endTextTextText