Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Dóra Kocsis
dynare
Commits
8a6e2384
Commit
8a6e2384
authored
Nov 05, 2013
by
Sébastien Villemot
Browse files
Merge remote-tracking branch 'jpfeifer/mode_compute'
parents
27f525e1
0d669a73
Changes
5
Show whitespace changes
Inline
Side-by-side
doc/dynare.texi
View file @
8a6e2384
...
...
@@ -4389,6 +4389,7 @@ the total number of Metropolis draws available. Default:
The
fraction
of
initially
generated
parameter
vectors
to
be
dropped
as
a
burnin
before
using
posterior
simulations
.
Default
:
@
code
{
0.5
}
@
item
mh_jscale
=
@
var
{
DOUBLE
}
@
anchor
{
mh_jscale
}
The
scale
to
be
used
for
the
jumping
distribution
in
Metropolis
-
Hastings
algorithm
.
The
default
value
is
rarely
satisfactory
.
This
option
must
be
tuned
to
obtain
,
ideally
,
an
...
...
@@ -4485,6 +4486,26 @@ value of that function as the posterior mode.
@
noindent
Default
value
is
@
code
{
4
}.
@
item
MCMC_jumping_covariance
=
hessian
|
prior_variance
|
identity_matrix
|@
var
{
filename
}
Tells
Dynare
which
covariance
to
use
for
the
proposal
density
of
the
MCMC
sampler
.
@
code
{
MCMC_jumping_covariance
}
can
be
one
of
the
following
:
@
table
@
code
@
item
hessian
Uses
the
Hessian
matrix
computed
at
the
mode
.
@
item
prior_variance
Uses
the
prior
variances
.
No
infinite
prior
variances
are
allowed
in
this
case
.
@
item
identity_matrix
Uses
an
identity
matrix
.
@
item
filename
Loads
an
arbitrary
user
-
specified
covariance
matrix
from
@
code
{
filename
.
mat
}.
The
covariance
matrix
must
be
saved
in
a
variable
named
@
code
{
jumping_covariance
},
must
be
square
,
positive
definite
,
and
have
the
same
dimension
as
the
number
of
estimated
parameters
.
@
end
table
@
noindent
Note
that
the
covariance
matrices
are
stil
scaled
with
@
ref
{
mh_jscale
}.
Default
value
is
@
code
{
hessian
}.
@
item
mode_check
Tells
Dynare
to
plot
the
posterior
density
for
values
around
the
computed
mode
for
each
estimated
parameter
in
turn
.
This
is
helpful
to
...
...
matlab/dynare_estimation_1.m
View file @
8a6e2384
...
...
@@ -609,8 +609,8 @@ if ~isequal(options_.mode_compute,0) && ~options_.mh_posterior_mode_estimation
error
([
'dynare_estimation:: mode_compute = '
int2str
(
options_
.
mode_compute
)
' option is unknown!'
])
end
end
if
~
isequal
(
options_
.
mode_compute
,
6
)
if
options_
.
cova_compute
==
1
if
~
isequal
(
options_
.
mode_compute
,
6
)
%always already computes covariance matrix
if
options_
.
cova_compute
==
1
%user did not request covariance not to be computed
if
options_
.
analytic_derivation
&&
strcmp
(
func2str
(
objective_function
),
'dsge_likelihood'
),
ana_deriv
=
options_
.
analytic_derivation
;
options_
.
analytic_derivation
=
2
;
...
...
@@ -636,6 +636,35 @@ if options_.cova_compute == 0
hh
=
[];
%NaN(length(xparam1),length(xparam1));
end
switch
options_
.
MCMC_jumping_covariance
case
'hessian'
%Baseline
%do nothing and use hessian from mode_compute
case
'prior_variance'
%Use prior variance
if
any
(
isinf
(
bayestopt_
.
p2
))
error
(
'Infinite prior variances detected. You cannot use the prior variances as the proposal density, if some variances are Inf.'
)
else
hh
=
diag
(
1.
/(
bayestopt_
.
p2
.^
2
));
end
case
'identity_matrix'
%Use identity
hh
=
eye
(
nx
);
otherwise
%user specified matrix in file
try
load
(
options_
.
MCMC_jumping_covariance
,
'jumping_covariance'
)
hh
=
jumping_covariance
;
catch
error
([
'No matrix named
''
jumping_covariance
''
could be found in '
,
options_
.
MCMC_jumping_covariance
,
'.mat'
])
end
[
nrow
,
ncol
]
=
size
(
hh
);
if
~
isequal
(
nrow
,
ncol
)
&&
~
isequal
(
nrow
,
nx
)
%check if square and right size
error
([
'jumping_covariance matrix must be square and have '
,
num2str
(
nx
),
' rows and columns'
])
end
try
%check for positive definiteness
chol
(
hh
);
catch
error
([
'Specified jumping_covariance is not positive definite'
])
end
end
if
~
options_
.
mh_posterior_mode_estimation
&&
options_
.
cova_compute
try
chol
(
hh
);
...
...
matlab/global_initialization.m
View file @
8a6e2384
...
...
@@ -381,6 +381,7 @@ options_.mh_nblck = 2;
options_
.
mh_recover
=
0
;
options_
.
mh_replic
=
20000
;
options_
.
recursive_estimation_restart
=
0
;
options_
.
MCMC_jumping_covariance
=
'hessian'
;
options_
.
mode_compute
=
4
;
options_
.
mode_file
=
''
;
...
...
tests/estimation/fs2000_MCMC_jumping_covariance.mod
0 → 100644
View file @
8a6e2384
// See fs2000.mod in the examples/ directory for details on the model
var m P c e W R k d n l gy_obs gp_obs y dA;
varexo e_a e_m;
parameters alp bet gam mst rho psi del;
alp = 0.33;
bet = 0.99;
gam = 0.003;
mst = 1.011;
rho = 0.7;
psi = 0.787;
del = 0.02;
model;
dA = exp(gam+e_a);
log(m) = (1-rho)*log(mst) + rho*log(m(-1))+e_m;
-P/(c(+1)*P(+1)*m)+bet*P(+1)*(alp*exp(-alp*(gam+log(e(+1))))*k^(alp-1)*n(+1)^(1-alp)+(1-del)*exp(-(gam+log(e(+1)))))/(c(+2)*P(+2)*m(+1))=0;
W = l/n;
-(psi/(1-psi))*(c*P/(1-n))+l/n = 0;
R = P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(-alp)/W;
1/(c*P)-bet*P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)/(m*l*c(+1)*P(+1)) = 0;
c+k = exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)+(1-del)*exp(-(gam+e_a))*k(-1);
P*c = m;
m-1+d = l;
e = exp(e_a);
y = k(-1)^alp*n^(1-alp)*exp(-alp*(gam+e_a));
gy_obs = dA*y/y(-1);
gp_obs = (P/P(-1))*m(-1)/dA;
end;
initval;
k = 6;
m = mst;
P = 2.25;
c = 0.45;
e = 1;
W = 4;
R = 1.02;
d = 0.85;
n = 0.19;
l = 0.86;
y = 0.6;
gy_obs = exp(gam);
gp_obs = exp(-gam);
dA = exp(gam);
end;
shocks;
var e_a; stderr 0.014;
var e_m; stderr 0.005;
end;
steady;
check;
estimated_params;
alp, beta_pdf, 0.356, 0.02;
bet, beta_pdf, 0.993, 0.002;
gam, normal_pdf, 0.0085, 0.003;
mst, normal_pdf, 1.0002, 0.007;
rho, beta_pdf, 0.129, 0.223;
psi, beta_pdf, 0.65, 0.05;
del, beta_pdf, 0.01, 0.005;
stderr e_a, inv_gamma_pdf, 0.035449, .1;
stderr e_m, inv_gamma_pdf, 0.008862, .1;
end;
varobs gp_obs gy_obs;
options_.solve_tolf = 1e-12;
options_.mode_compute=4;
options_.plot_priors=0;
options_.MCMC_jumping_covariance='hessian';
estimation(order=1,datafile=fsdat_simul,nobs=192,loglinear,mh_replic=1000,mh_nblocks=1,mh_jscale=0.8);
load fs2000_MCMC_jumping_covariance_mode hh;
jumping_covariance=diag(diag(hh));
save test_matrix jumping_covariance;
options_.MCMC_jumping_covariance='prior_variance';
estimation(order=1,datafile=fsdat_simul,nobs=192,loglinear,mh_replic=1000,mh_nblocks=1,mh_jscale=0.01);
options_.MCMC_jumping_covariance='identity_matrix';
estimation(order=1,datafile=fsdat_simul,nobs=192,loglinear,mh_replic=1000,mh_nblocks=1,mh_jscale=0.0001);
options_.MCMC_jumping_covariance='test_matrix';
estimation(order=1,datafile=fsdat_simul,nobs=192,loglinear,mh_replic=1000,mh_nblocks=1,mh_jscale=0.8);
tests/estimation/fs2000_MCMC_jumping_covariance_steadystate.m
0 → 100644
View file @
8a6e2384
% computes the steady state of fs2000 analyticaly
% largely inspired by the program of F. Schorfheide
% Copyright (C) 2004-2010 Dynare Team
%
% This file is part of Dynare.
%
% Dynare is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
%
% Dynare is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
function
[
ys
,
check
]
=
fs2000_steadystate
(
ys
,
exe
)
global
M_
alp
=
M_
.
params
(
1
);
bet
=
M_
.
params
(
2
);
gam
=
M_
.
params
(
3
);
mst
=
M_
.
params
(
4
);
rho
=
M_
.
params
(
5
);
psi
=
M_
.
params
(
6
);
del
=
M_
.
params
(
7
);
check
=
0
;
dA
=
exp
(
gam
);
gst
=
1
/
dA
;
m
=
mst
;
khst
=
(
(
1
-
gst
*
bet
*
(
1
-
del
))
/
(
alp
*
gst
^
alp
*
bet
)
)
^
(
1
/(
alp
-
1
));
xist
=
(
((
khst
*
gst
)
^
alp
-
(
1
-
gst
*
(
1
-
del
))
*
khst
)/
mst
)
^
(
-
1
);
nust
=
psi
*
mst
^
2
/(
(
1
-
alp
)
*
(
1
-
psi
)
*
bet
*
gst
^
alp
*
khst
^
alp
);
n
=
xist
/(
nust
+
xist
);
P
=
xist
+
nust
;
k
=
khst
*
n
;
l
=
psi
*
mst
*
n
/(
(
1
-
psi
)
*
(
1
-
n
)
);
c
=
mst
/
P
;
d
=
l
-
mst
+
1
;
y
=
k
^
alp
*
n
^
(
1
-
alp
)
*
gst
^
alp
;
R
=
mst
/
bet
;
W
=
l
/
n
;
ist
=
y
-
c
;
q
=
1
-
d
;
e
=
1
;
gp_obs
=
m
/
dA
;
gy_obs
=
dA
;
ys
=
[
m
P
c
e
W
R
k
d
n
l
gy_obs
gp_obs
y
dA
];
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment