From b38d6f8139b68230cf37ff4bf54b17dc5b91ead6 Mon Sep 17 00:00:00 2001
From: Johannes Pfeifer <jpfeifer@gmx.de>
Date: Sun, 17 Jan 2021 18:21:29 +0100
Subject: [PATCH] compute_moments_varendo: use pruned state space at higher
 order

---
 matlab/dsge_simulated_theoretical_correlation.m | 16 +++++++++++++++-
 matlab/dsge_simulated_theoretical_covariance.m  | 13 ++++++++++++-
 2 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/matlab/dsge_simulated_theoretical_correlation.m b/matlab/dsge_simulated_theoretical_correlation.m
index c32aa9db42..73a7db56df 100644
--- a/matlab/dsge_simulated_theoretical_correlation.m
+++ b/matlab/dsge_simulated_theoretical_correlation.m
@@ -71,6 +71,13 @@ if ~posterior
 end
 nvar = length(ivar);
 
+if options_.pruning
+    obs_var=NaN(nvar,1);
+    for i=1:nvar
+        obs_var(i,1) = find(strcmp(M_.endo_names(ivar(i),:), M_.endo_names(oo_.dr.order_var)));
+    end
+end
+
 % Set the size of the auto-correlation function to nar.
 oldnar = options_.ar;
 options_.ar = nar;
@@ -109,7 +116,14 @@ for file = 1:NumberOfDrawsFiles
             M_=set_parameters_locally(M_,temp.pdraws{linee,1});
             [dr,info,M_,options_,oo_] = resol(0,M_,options_,oo_);
         end
-        tmp = th_autocovariances(dr,ivar,M_,options_,nodecomposition);
+        if ~options_.pruning
+            tmp = th_autocovariances(dr,ivar,M_,options_,nodecomposition);
+        else
+            pruned_state_space = pruned_state_space_system(M_, options_, dr, obs_var, options_.ar, 1, 0);
+            for i=1:nar
+                tmp{i+1} = pruned_state_space.Corr_yi(:,:,i);                
+            end
+        end
         for i=1:nar
             Correlation_array(linea,:,:,i) = tmp{i+1};
         end
diff --git a/matlab/dsge_simulated_theoretical_covariance.m b/matlab/dsge_simulated_theoretical_covariance.m
index bbd4702751..20511c1596 100644
--- a/matlab/dsge_simulated_theoretical_covariance.m
+++ b/matlab/dsge_simulated_theoretical_covariance.m
@@ -70,6 +70,12 @@ if ~posterior
 end
 nvar = length(ivar);
 
+if options_.pruning
+    obs_var=NaN(nvar,1);
+    for i=1:nvar
+        obs_var(i,1) = find(strcmp(M_.endo_names(ivar(i),:), M_.endo_names(oo_.dr.order_var)));
+    end
+end
 % Set the size of the auto-correlation function to zero.
 nar = options_.ar;
 options_.ar = 0;
@@ -108,7 +114,12 @@ for file = 1:NumberOfDrawsFiles
             M_=set_parameters_locally(M_,temp.pdraws{linee,1});
             [dr,info,M_,options_,oo_] = resol(0,M_,options_,oo_);
         end
-        tmp = th_autocovariances(dr,ivar,M_,options_,nodecomposition);
+        if ~options_.pruning
+            tmp = th_autocovariances(dr,ivar,M_,options_,nodecomposition);
+        else
+            pruned_state_space = pruned_state_space_system(M_, options_, dr, obs_var, options_.ar, 1, 0);
+            tmp{1} = pruned_state_space.Var_y;            
+        end
         for i=1:nvar
             for j=i:nvar
                 Covariance_matrix(linea,symmetric_matrix_index(i,j,nvar)) = tmp{1}(i,j);
-- 
GitLab