Moments calc by different methods do not match?


I am running Dynare 4.4.3 stoch_simul with option periods.
Then I compare correlation between two variables calculated with data in oo_.var
and compare the corr coef with that calculated with oo_.endo_simul.

For example:


Since I am using periods option, both oo_.var & oo_.endo_simul contain simulated data but I obtain significantly different results (for some series the difference is about 0.2).

Am I missing anything?

Please provide the full codes.

I think I figured out what went wrong.

I used stoch_simul with option periods AND option hp_filter.
oo_.var saves filtered statistics, while
oo_.endo_simul saves simulated series before the HP filter.

Can you confirm, please?

A corollary question, after I run stoch_simul(hp_filter = 100, order = 1, irf = 1000, periods=10000)
the moments I obtain via oo_.var are the same regardless of the number of periods, whereas the moments obtained via corrcoef(oo_.endo_simul(2,:),oo_.endo_simul(1,:)) vary with the number of periods. I tried from the range from 100 to 10^4. The difference can be as high as 0.04

Does it mean that oo_.var gives theoretical moments? I thought the manual says to the contrary:

[quote] oo_.var Contains theoretical variance if the periods option is not present (or an approximation thereof for
order=2), and empirical variance otherwise.[/quote]

  1. Yes, if you specify a filter, the moments will be filtered, while the simulated series will be unfiltered
  2. No, this should not be the case. Please provide the file to replicate the issue.

I attached the files with minimal working examples

stoch_simul(order=1, periods=1000);


stoch_simul(order=1, periods=1000, hp_filter=100);

In this version, the difference between the correlations of C & Y are around 0.006 but it decreases with the length of the simulated series.

Also, for the HP-filtered version, I was wondering how Dynare filters the simulated series (with hp_filter option) so fast. If I conduct HP filtering of endo_simul by hand with periods=10000, it takes my computer to filter the series and to calculate the moments significantly longer than if I use Dynare’s hp_filter option.
With periods = 100000, my PC runs into the curse of dimensionality.
I attached the HP filter code I use as well.

hpfilter.m (914 Bytes)
StochSimul_HP_empir.mod (1.51 KB)
StochSimul_empir.mod (1.05 KB)

When switching from 10000 to 1000 periods,

goes from

[code]ans =

0.000326615664192 0.000035416548315 0.000224502764851 0.000139894628857 0.000075319264576 0.000071830808337
0.000035416548315 0.000021236903551 0.000049779041118 0.000027336117315 0.000001851174164 -0.000020538216304
0.000224502764851 0.000049779041118 0.001170764900180 0.000081945259818 0.000042536905984 0.000075228986918
0.000139894628857 0.000027336117315 0.000081945259818 0.000069473878539 0.000027843140250 0.000008756607555
0.000075319264576 0.000001851174164 0.000042536905984 0.000027843140250 0.000019662155193 0.000026849167137
0.000071830808337 -0.000020538216304 0.000075228986918 0.000008756607555 0.000026849167137 0.000066544587358

[code]ans =

0.000334544718752 0.000039518537012 0.000239060495493 0.000145415558713 0.000075970615395 0.000068595256611
0.000039518537012 0.000021475606432 0.000061794114533 0.000028638576743 0.000002871940263 -0.000018648095685
0.000239060495493 0.000061794114533 0.001217896764845 0.000094765000760 0.000042104863384 0.000062938707817
0.000145415558713 0.000028638576743 0.000094765000760 0.000072069499163 0.000028860770924 0.000009374071833
0.000075970615395 0.000002871940263 0.000042104863384 0.000028860770924 0.000019467398574 0.000025289415214
0.000068595256611 -0.000018648095685 0.000062938707817 0.000009374071833 0.000025289415214 0.000061267383943
showing that the simulation correctly works.

Regarding your second question: you are using the most inefficient version of the HP-filter you can program. It does not make use of the sparsity of HP-filter matrix and uses an explicit inverse. You might want to use Dynare’s

sample_hp_filter.m instead

Thank your for pointing my attention to sample_hp_filter.m, Johannes.

Per oo_.var. Please correct me if I am wrong but I think the comparison of oo_.var from simulations with different # of periods shows that empirical moments vary with the length of the series. Which is fine.

However, I am trying to understand why, given a certain number of periods, the values correlations calculated from oo_.var and oo_.endo_simul do not coincide.
for example, after

I obtain the following correlations between the first two variables:

OOVar = 0.8910 CorrCoef = 1.0000 0.8847 0.8847 1.0000 difference between oo_.var & oo_.endo_simul: ans = 0.0063

That’s because Dynare drops

periods of burnin when computing the moments

Great, thanks.