Dear all,
there seems to be a bug in dsge_simulated_theoretical_variance_decomposition
(present at least since Dynare 4.2.5) that apparently sometimes leads to
wrong output results. The critical part is 116-134:
if linea == NumberOfDecompLines
if posterior
save([M_.dname '/metropolis/' M_.fname
'_PosteriorVarianceDecomposition' int2str(DecompFileNumber) '.mat'
],'Decomposition_array');
else
save([M_.dname '/prior/moments/' M_.fname
'_PriorVarianceDecomposition' int2str(DecompFileNumber) '.mat'
],'Decomposition_array');
end
DecompFileNumber = DecompFileNumber + 1;
linea = 0;
test = DecompFileNumber-NumberOfDecompFiles;
if ~test% Prepare the last round...
Decomposition_array =
zeros(NumberOfLinesInTheLastDecompFile,nvar*nexo);
NumberOfDecompLines = NumberOfLinesInTheLastDecompFile;
DecompFileNumber = DecompFileNumber - 1;
elseif test<0;
Decomposition_array =
zeros(MaXNumberOfDecompLines,nvar*nexo);
else
clear('Decomposition_array');
end
end
I dont understand the purpose of line 128 which is
DecompFileNumber = DecompFileNumber - 1;
We decrease the file number by one, but after line 122 increased it by one.
As a result, if the model is large and the decomposition_array is split up
in several files, the last file name in the save command gets the wrong
number. For example, assume NumberOfDecompFiles=2. Now in the second step of
the loop, we have DecompFileNumber=2 before entering the if-part. In the
if-part DecompFileNumber will be set to 1 again and will be 1 when the save
command is reached in the next iteration.
As a consequence, the second Decomposition_array is written in file number 1
(and overwrites the previous ones) instead of number 2. I havent traced the
consequences through the rest of compute_moments_varendo, but it seems as if
the erased results are filled up with zeros, biasing the mean of the
variance decomposition to 0 (and also affecting other statistics in a subtle
way). At least that was how I noticed the mistake when working with Dynare
4.2.5.
I think line 128 simply needs to be deleted.
Best,
Johannes
--
Johannes Pfeifer
Haußerstr. 29
72076 Tübingen
Tel.: +49-(0)7071-6396184
Mobil.: +49-(0)170-6936820
Germany