function compare_kalman_routines(experience) %% This function compares the kalman filter routines. %% %% %% stephane [DOT] adjemian [AT] ens [DOT] fr pp = experience.Number0fObservedVariables; mm = experience.SizeOfTheStateVector; rr = experience.NumberOfStructuralShocks; measurement_error_flag = experience.MeasurementErrors; gend = experience.NumberOfPeriods; PercentageOfMissingObservations = experience.PercentageOfMissingObservations; PeriodsWithMissingObservations = experience.PeriodsWithMissingObservations; %% SET VARIOUS PARAMETERS kalman_tol = 1e-12; riccati_tol =1e-9; start = 1; %% SET THE STATE SPACE MODEL: % I randomly choose the mm eigenvalues of the transition matrix. TransitionEigenvalues = rand(mm,1)*2-1; % I randomly choose the mm eigenvectors of the transition matrix tmp = rand(mm,mm*100); TransitionEigenvectors = tmp*tmp'/(mm*100); TransitionEigenvectors = rand(mm,mm); % I build the transition matrix T = TransitionEigenvectors*diag(TransitionEigenvalues)*inv(TransitionEigenvectors); % I randomly choose matrix R R = randn(mm,rr); % I randomly choose the covariance matrix of the structurtal innovations E = randn(rr,20*rr); Q = E*transpose(E)/(20*rr); % If needed I randomly choose the covariance matrix of teh measurement errors if measurement_error_flag == 0 H = zeros(pp,1); elseif measurement_error_flag == 1 H = rand(pp,1); elseif measurement_error_flag == 2 E = randn(pp,20*pp); H = E*transpose(E)/(20*pp); else disp('compare_kalman_routines:: Unknown option!') end % Set the selection vector (mf) MF = transpose(randperm(mm)); mf = MF(1:pp); P = lyapunov_symm(T,R*Q*R',1.000001); %% BUILD DATA SET (zero mean): if measurement_error_flag == 0 Y = simul_state_space_model(T,R,Q,mf,gend); elseif measurement_error_flag == 1 H = rand(pp,1); Y = simul_state_space_model(T,R,Q,mf,gend,diag(H)); elseif measurement_error_flag == 2 E = randn(pp,20*pp); H = E*transpose(E)/(20*pp); Y = simul_state_space_model(T,R,Q,mf,gend,H); else disp('compare_kalman_routines:: Unknown option!') end if PeriodsWithMissingObservations data_1 = Y(:,1:PeriodsWithMissingObservations)'; if PeriodsWithMissingObservations