Commit Graph

8105 Commits (4733d97cebde01370afaf617f790a70f051d4abc)

Author SHA1 Message Date
Sébastien Villemot 154fced8b7
Remove old SMM code
Ref. #1724
2020-05-18 17:30:40 +02:00
Stéphane Adjemian (Charybdis) a6ea878627
Fixed bug introduced in 179d57f13.
initvalf was failing if the datafile was in the current folder.
2020-05-18 13:42:53 +02:00
Stéphane Adjemian (Charybdis) 9a66f3ebd9
Allow shocks with initval_file. 2020-05-18 12:21:43 +02:00
Stéphane Adjemian (Charybdis) 179d57f138
Fixed path issue. 2020-05-18 12:21:27 +02:00
Michel Juillard b70d99d1b4
Refactoring of initval_file and histval_file
initval_file and hisvfal_file are now more flexible and have functionalities
similar to option datafile in estimation.

Closes: #1671
2020-05-14 16:45:54 +02:00
Stéphane Adjemian (Charybdis) f72160aa60
Fixed bug introduced in e41080fed (dseries with initval_file). 2020-05-07 11:17:59 +02:00
Stéphane Adjemian (Charybdis) c9efef0782
Updated dseries submodule (bug fix in rename method).
[skip ci]
2020-05-07 11:04:06 +02:00
Stéphane Adjemian (Charybdis) e41080fede
Pass dseries (saved in .mat or .m) to initval_file.
Allows to pass a dseries object saved on disk in a .mat file or .m to
initialize the paths for the endogenous variables and set the paths
for the exogenous variables. It is not required to pass the auxiliary
variables (automatically computed by initvalf routine), which is useful
if the baseline comes from another model. In this case, the
initval_file command or the datafile option of the
perfect_foresight_setup command sets the value of periods (deduced
from the number of observation in the dseries object and the number of
lags/leads in the model).
2020-05-06 22:36:06 +02:00
Stéphane Adjemian (Charybdis) 2566320834
Updated dseries submodule (new method). 2020-05-06 11:39:11 +02:00
Sébastien Villemot 09617453ea
Ensure that “extended_path” obeys the “bytecode” option
Closes: #1717
2020-05-04 22:42:08 +02:00
Houtan Bastani 25a977f4be
jacob_element & hess_element: remove unnecessary loops 2020-05-04 12:15:15 -04:00
Stéphane Adjemian (Charybdis) 79c09743d8
Updated dseries submodule (bug fix). 2020-04-30 11:47:30 +02:00
Stéphane Adjemian (Charybdis) 84ec142463
Return paths for the exogenous variables. 2020-04-09 10:40:46 +02:00
Stéphane Adjemian (Charybdis) f8bb514632
Return paths for all the endogenous variables if fourth argument is empty. 2020-04-08 17:59:23 +02:00
Sébastien Villemot 6e0f104d7e
Bump minimal MATLAB version to R2014a
Ref. #1713
2020-04-07 16:32:32 +02:00
Sébastien Villemot e95b93f783
dseries submodule update
— Efficiency change. OCTAVE_VERSION is a builtin function in Octave
— Fix bug dseries#43
— Cosmetic changes
— Fixed subsasgn method (when calling merge)
2020-04-07 12:48:00 +02:00
Stéphane Adjemian (Charybdis) 0cf1913e9c
Fixe displayed percentage in waitbar. 2020-04-06 09:13:36 +02:00
Stéphane Adjemian (Charybdis) 046960c4a8
Merge remote-tracking branch community/master into enterprise 2020-04-03 11:33:46 +02:00
Johannes Pfeifer b8b05300c1 missing_DiffuseKalmanSmootherH1_Z.m: fix bug with variable dimension 2020-04-02 19:22:55 +02:00
Stéphane Adjemian (Charybdis) 7f2cf925c8
Fixed YhatObs and Yobs returned by dyn_ols.
Adding back the calibrated part of the RHS.

(cherry picked from commit 545eb47abea080c4b1cf411f89b9f56226aeb724)
2020-04-02 10:50:10 +02:00
Willi Mutschler 64a2a4388a
🐛 📖 Fixes TaRB with student t proposal distribution 2020-04-01 14:46:22 +02:00
Sébastien Villemot 8df9813a0e Merge branch 'perfect_foresight' into 'master'
fix bug when no convergence and backward model

See merge request Dynare/dynare!1726
2020-03-31 15:18:05 +00:00
Michel Juillard fd09b98150 fix bug when no convergence and backward model 2020-03-31 15:40:49 +02:00
Sébastien Villemot 43ed7b2b69
Merge remote-tracking branch 'community/master' into enterprise 2020-03-27 16:28:41 +01:00
Stéphane Adjemian (Charybdis) 23c927b708
Updated build for matlab R2020a.
(cherry picked from commit 166865149e)
2020-03-26 15:38:41 +01:00
Stéphane Adjemian (Charybdis) e90549d2df
Bug fix. Dynare configuration hook was not evaluated.
(cherry picked from commit e2b20f3e3e)
2020-03-26 15:37:55 +01:00
Stéphane Adjemian (Charybdis) 166865149e
Updated build for matlab R2020a. 2020-03-26 11:20:24 +01:00
Stéphane Adjemian (Charybdis) 109bc5883c
Check the existence of the user configuration file. 2020-03-26 10:15:35 +01:00
Stéphane Adjemian (Charybdis) e2b20f3e3e
Bug fix. Dynare configuration hook was not evaluated. 2020-03-26 10:15:35 +01:00
Johannes Pfeifer 071ab1e14f imcforecast.m: fix faulty logic of warning
Steady state and time shift were missing
2020-03-21 12:06:24 +01:00
Johannes Pfeifer ef8671bb99 Correctly pass prior_trunc option in identification 2020-03-17 13:28:40 +01:00
Stéphane Adjemian (Charybdis) 6ffbda470e
Use merge instead of horcat. 2020-03-13 17:44:35 +01:00
Stéphane Adjemian (Charybdis) 4bd775948e
Allow empty argument. 2020-03-13 17:44:09 +01:00
Sébastien Villemot e93c7b6b25
Reorder files generated by “moments_varendo” option of “estimation”
If there were more than 10 files of Metropolis parameter draws, the ordering
the files containing the posterior moments could be different from that of the
parameter draws. This is because the “dir()” command was used to order the
files containing the parameter draws, and because the command uses alphabetic
ordering, file #10 would come before #2.

This commit enforces the numerical ordering of files.
2020-03-12 15:56:55 +01:00
Stéphane Adjemian (Charybdis) 2bc7944286
Removed warning. 2020-03-11 12:47:23 +01:00
Stéphane Adjemian (Charybdis) b4db697e0f
Cosmetic change. 2020-03-11 12:47:02 +01:00
Stéphane Adjemian (Charybdis) a4519f6b86
Bug fix (solve_algo={12,14}).
Removed threshold for detecting the non zero elements in the rows of
the Jacobian matrix. Using tolf as a threshold parameter for identifying
the non zero elements leaded (not systematically) the algorithm to not
reevaluate the residuals of the dynamic model while necessary.
2020-03-11 12:38:59 +01:00
Stéphane Adjemian (Charybdis) 492b0fffea
Cosmetic change. 2020-03-11 12:34:21 +01:00
Sébastien Villemot d01846e5be
Fix incorrect test for options_.posterior_sampler_options.posterior_sampling_method
Thanks to checkcode().
2020-03-10 14:13:49 +01:00
Johannes Pfeifer 99f4fcadcc model_diagnostics.m
Update parameter vector from steady state file and provide correct nocheck flag
2020-03-10 11:06:35 +01:00
Johannes Pfeifer 16f65a2f33 prior.m: fix missing function input
Prevents crashes in "prior moments"
2020-03-08 09:00:33 +01:00
Johannes Pfeifer b7ef2181f9 print_info.m: Fix bug in error handling
get_error_message.m needs to always provide the error string, only throwing out the error message needs to depend on noprint

Closes https://git.dynare.org/Dynare/dynare/issues/1714
2020-03-08 09:00:01 +01:00
Johannes Pfeifer 2004641a10 dyn_ramsey_static.m: abort of steady state file signals error code 2020-03-06 18:55:01 +01:00
Johannes Pfeifer 0a52dedfda Ramsey with multiple instruments: return properly sized vector if residuals are complex 2020-03-06 18:50:40 +01:00
Stéphane Adjemian (Charybdis) 0f96df82e9
Updated dseries submodule. 2020-03-06 11:27:25 +01:00
Houtan Bastani eb6ab0696a
gui: added fields to `oo_` to indicate which commands have been run 2020-03-03 11:45:46 +01:00
Houtan Bastani 2d468b5c1d
replace unused variables with `~` 2020-03-03 11:43:38 +01:00
Johannes Pfeifer 9e5cb1422d
Save jscale to record structure before running MCMC
Useful in conjunction with mh_tune_jscale in cases where the posterior sampler crashes
2020-02-29 10:28:50 +01:00
Stéphane Adjemian (Charybdis) 864d4c25c7
Updated simulation routine for nonlinear backward models.
Changes necessary for the latest patches on dynare_solve (solve_algo={12,14}).
2020-02-27 22:58:19 +01:00
Stéphane Adjemian (Charybdis) 67b18710e8
Bug fix and efficiency change.
- Even in models where there is only one endogenous variable in the
   LHS and where all the LHS are unique, it may be that because of the
   preprocessor transformations an auxiliary variable appears in more
   than one LHS. If diff(X) is on the LHS of an equation in the original
   model, the preprocessor will create an auxiliary variable AUX_DIFF
   which will appear in the the original equation, replacing diff(X),
   and in a new equation defining the auxiliary variable. In this case
   the, the Dulmage-Mendelsohn decomposition will associate AUX_DIFF
   with the original equation and X with the equation. This was
   problematic in the previous version of the algorithm, since it was
   assumed that each equation determines the LHS variable (here AUX_DIFF
   = X - X(-1) determines a RHS variable (X).

 - Changed the expression for evaluating an LHS variable under a log.

 - Improved efficiency by not evaluating the residuals of the model if
   not required for solving the current univariate block.
2020-02-27 22:08:21 +01:00
Sébastien Villemot 3c30d9f658
Merge branch 'M_output' of git.dynare.org:JohannesPfeifer/dynare 2020-02-25 16:37:02 +01:00
Sébastien Villemot 3aaac2b811
Merge branch 'discretionary_bug' of git.dynare.org:JohannesPfeifer/dynare 2020-02-25 16:23:30 +01:00
Houtan Bastani 7a02b3bfd2
various fixes to dynareParallelDelete.m
- did not account for cases when username not set (namely when remote is localhost)
- did not account for cases when remote directory was not set (namely when remote is localhost)
- added unnecessary `filesep` to `pname` when `pname` was empty
- ignore unused output arguments (it is necessary to explicitly ignore them to prevent unwanted output from the `system` call)
- globbing did not work as it was expanded on the calling machine not the remote; pass call to `bash -c` to handle this
2020-02-25 16:18:55 +01:00
Houtan Bastani 3d9fe36ec5
ignore unused return value
[skip ci]
2020-02-25 14:50:56 +01:00
Houtan Bastani 54fe1c754c
fix typo in variable name 2020-02-25 14:50:55 +01:00
Johannes Pfeifer b3849322d4 discretionary_policy_1.m: move setting of dr before return statement
Prevents aborting with a cryptic crash
2020-02-25 14:10:45 +01:00
Johannes Pfeifer 97f7b773e5 stoch_simul.m: Make sure graphs folder exists before creating eps-loader 2020-02-24 16:13:44 +01:00
Johannes Pfeifer 3cf622cdc1 Output M_ in stoch_simul.m and discretionary_policy.m
Fixes https://git.dynare.org/Dynare/dynare/issues/1711 together with https://git.dynare.org/Dynare/preprocessor/-/merge_requests/15
2020-02-24 14:14:41 +01:00
Stéphane Adjemian (Charybdis) 84e7d4bd3d
Adapted code to use solve_algo={12,14}. 2020-02-20 13:12:16 +01:00
Stéphane Adjemian (Charybdis) fa95a6347d
Added new nonlinear solvers (solve_algo 12 and 14).
These algorithms are alternative versions of 2 and 4 specialized for
models where each equation has only one endogenous variable on the
left hand side (only allowed expression on LHS is the log of an
endogenous variable). Univariate recursive blocks are then not solved
with a non linear but by evaluating the RHS expression.
2020-02-20 13:07:54 +01:00
Stéphane Adjemian (Charybdis) 012e261944
Do not display the mapping between residuals and equations. 2020-02-20 11:39:03 +01:00
Stéphane Adjemian (Charybdis) 776f50b124
Changed rescaling strategy in trust region algorithm.
Reverts to the original MINPACK's behaviour.
2020-02-20 09:34:13 +01:00
Stéphane Adjemian (Charybdis) 0f23f88700
Exit gracefully if Newton solver fails (added try/catch block). 2020-02-19 14:39:02 +01:00
Stéphane Adjemian (Charybdis) bcfa574462
Display equation name. 2020-02-17 21:48:25 +01:00
Willi Mutschler 6223016683
🐛 Fix displaying of wrong order in disp_identification 2020-02-16 22:55:16 +01:00
Willi Mutschler f4dc2ee743
🐛 Fix wrong third-order computation in pruned state space system
Related to #1706

 Add unit test for pruned state space up to order 3


//


Changed tolerance in new test
2020-02-16 22:55:16 +01:00
Johannes Pfeifer 14ef010b9e geweke_moments.m: correctly use parameter instead of hard-coded value 2020-02-16 12:14:04 +01:00
Stéphane Adjemian (Charybdis) 00eb074630
Updated particles submodule. 2020-02-15 17:02:56 +01:00
Stéphane Adjemian (Charybdis) fb19cce284
Fixed online filter (wrong number of arguments).
[skip ci]
2020-02-15 13:58:48 +01:00
Sébastien Villemot 133b77c061
Conditional forecasting: compatibility fix with MATLAB < R2016b
Implicit expansion (a.k.a. automatic broadcasting) was introduced in MATLAB
R2016b (and it has been present in Octave for quite some time).

Hence use bsxfun() instead.

The problem had been introduced in 228b2a532.
2020-02-13 18:21:29 +01:00
Stéphane Adjemian (Charybdis) f3d45542fa
Fixed call to exactstrrep (adding missing parenthesis around expression). 2020-02-12 17:21:00 +01:00
Sébastien Villemot 57d1966644 Merge branch 'discretionary_policy' into 'master'
Factorization of discretionary policy

Closes #1705

See merge request Dynare/dynare!1709
2020-02-12 13:45:53 +00:00
Johannes Pfeifer 9800041433 discretionary_policy_1: return if steady state file signals error 2020-02-12 13:37:36 +01:00
Johannes Pfeifer 8b4fa7c2d6 Factorize call to solver routines under optimal policy and without
Related to https://git.dynare.org/Dynare/dynare/issues/1173
2020-02-12 13:19:46 +01:00
Johannes Pfeifer b07adee2d9 Add missing path to dynare_config.m 2020-02-12 13:13:31 +01:00
Johannes Pfeifer dd0e9fe719 Initialize instr_id field of discretionary_policy 2020-02-12 12:59:34 +01:00
Johannes Pfeifer d78ef0d6df Move discretionary_policy routines to own folder 2020-02-12 12:55:12 +01:00
Johannes Pfeifer a1ebc94e4f Refactor discretionary_policy codes
Closes https://git.dynare.org/Dynare/dynare/issues/1705
2020-02-12 12:52:54 +01:00
Johannes Pfeifer 228b2a532f conditional forecasts: add check whether simulation was successful 2020-02-12 11:04:46 +01:00
Stéphane Adjemian (Charybdis) e56a681ce2
Removed debugging code. 2020-02-12 09:44:42 +01:00
Stéphane Adjemian (Charybdis) 87e688011e
Fixed bug in setting blockname equation tag.
The blockname tag was overwritten (with the name of the LHS endogenous variable).
2020-02-11 19:09:33 +01:00
Stéphane Adjemian (Charybdis) 6406bf97d4
Fixed Windows vs Linux path separator issue. 2020-02-11 19:08:37 +01:00
Sébastien Villemot 181725c778
Discretionary policy: remove useless call to steady state file
The steady state is always zero for discretionary policy. And, in the case of a
steady state file, this call would not be able to update parameters (since it
does not modify M_), nor would it need to do so (since this has already be done
earlier in the function).

Ref. #1705
2020-02-11 18:14:05 +01:00
Sébastien Villemot ae59f4dcb2
Further improvements to parsing of arguments on the MATLAB command-line
Under GNU/Linux and macOS, double-quote arguments before passing them to the
shell. In particular, this allows passing single-quotes within those arguments.

We therefore have to escape the four characters that are interpreted within
double-quoted strings in POSIX shells: \, ", $ and `

On Windows, also systematically escape the backslashes.

Also move display of arguments before escaping, so that it remains readable.

Ref. #1696
2020-02-10 18:24:51 +01:00
Stéphane Adjemian (Charybdis) 004d0fa30b
Updated dseries submodule (added projection method). 2020-02-10 17:15:31 +01:00
Houtan Bastani 72dfbbdce2
fix bug in creation of latex tables
[skip ci]
2020-02-07 15:58:15 +01:00
Sébastien Villemot 4c256c2cc8 Merge branch 'discretion' into 'master'
Fixes related to estimation under discretion

See merge request Dynare/dynare!1707
2020-02-06 13:37:52 +00:00
Johannes Pfeifer 30bfa16211 Fixes related to estimation under discretion 2020-02-06 13:30:00 +01:00
Johannes Pfeifer 1d1c0ab829 imcforecast.m: make sure that draw index for CIs stays within feasible bounds 2020-02-05 21:18:25 +01:00
Sébastien Villemot d8cd55109c
Testsuite: increase tolerance in unitary tests for prior_draw.m 2020-02-04 21:25:16 +01:00
Houtan Bastani 2ae1bc7770
gui: update call to stoch_simul 2020-02-04 15:57:56 +01:00
Sébastien Villemot 177c5c359f
Implement estimation under discretionary optimal policy
Also add a test case.

For the time being, estimating parameters that appear in the discount factor is
not supported.

Ref. #1173
2020-02-03 18:29:45 +01:00
Stéphane Adjemian (Charybdis) 48b5005ed3
More factorizatiion when calling loadjson_ routine. 2020-02-03 18:12:14 +01:00
Sébastien Villemot 59e11615a0
Discretionary policy: preparatory work for estimation
This removes global variables from discretionary_policy_1.m, and also adapts
the behaviour and interface of the function so that it is similar to
resol.m (in particular, it no longer returns an empty “dr” in case of failure,
and it sets “oo_.dr”).

Ref. #1173
2020-02-03 18:05:29 +01:00
Stéphane Adjemian (Charybdis) 3521e83b26
Factorize calls to loadjson_ routine. 2020-02-02 21:52:44 +01:00
Stéphane Adjemian (Charybdis) 1e0da3a6a7
Removed global. 2020-02-02 21:14:23 +01:00
Johannes Pfeifer 8aad715183 det_cond_forecast.m: always set options_.qz_criterium
Closes https://git.dynare.org/Dynare/dynare/issues/1701
2020-02-02 14:15:01 +01:00
Stéphane Adjemian (Charybdis) 0aa78c6914
Added the possibility to change more than one variable name in an equation. 2020-01-31 18:57:22 +01:00
Stéphane Adjemian (Odysseus) 5289636f69 Do not include the original names of the transformed endogenous variables. 2020-01-30 20:31:21 +01:00
Stéphane Adjemian (Odysseus) 3dbc7640d9 Fixed list of exogenous variables in cherry-picking. 2020-01-30 19:21:50 +01:00
Stéphane Adjemian (Odysseus) 95acf31a69 Fixed optional renaming of the variables. 2020-01-30 11:46:17 +01:00
Sébastien Villemot 6542ce4a16
datatomfile: fix the name of the .mod file at the top of the generated file
With the new layout of the files generated by the preprocessor, it would always
print “driver.m”, which is not very informative.
2020-01-29 21:04:45 +01:00
Stéphane Adjemian (Odysseus) 1c5f6a97c0 Fixed bug in cherry-picking (LHS expressions were wrong).
For instance LHS expression as `diff(log(X))` was replaced by `X` in
the generated model.inc file.
2020-01-29 18:34:26 +01:00
Stéphane Adjemian (Odysseus) b00db0e035 Fixed bug (cannot use a reserved keyword as a tag name). 2020-01-29 18:27:29 +01:00
Stéphane Adjemian (Odysseus) 9590175a9a Fixed loadjson_ routine (when relying on jsondecode).
Fixed issues with escape characters and updated the preprocessor.
2020-01-29 15:54:54 +01:00
Houtan Bastani d527096e61
simplify parsing of MATLAB command line arguments
closes #1696

includes preprocessor changes
- Removed prefixing of doubles between -1 and 1 with 0.
- Fixed bug introduced in 985d742.
- macro processor: simplify handling of `@#define`
2020-01-29 14:56:52 +01:00
Stéphane Adjemian (Odysseus) e39c3bad5b Fixed aggregate if the equation tag name is not available...
... Or has special characters. In this cases we use the LHS variable
as a name for the equation.
2020-01-29 11:38:20 +01:00
Stéphane Adjemian (Odysseus) bb302279ea Do not add tag for block name if rootfolder is empty. 2020-01-29 09:25:23 +01:00
Stéphane Adjemian (Charybdis) d4e16b7ffe
Ensure that the equation tag name matches the LHS variable. 2020-01-28 16:40:31 +01:00
Stéphane Adjemian (Charybdis) dc1b2442db
Added block name to the tags in aggregated models. 2020-01-28 16:40:03 +01:00
Stéphane Adjemian (Charybdis) 32557ce686
Ensure that equations and endogenous variables are unique. 2020-01-28 16:38:15 +01:00
Stéphane Adjemian (Charybdis) 6924e07b20
Use jsondecode to read JSON files if available. 2020-01-28 16:36:40 +01:00
Stéphane Adjemian (Charybdis) 7aeb506143
Updated particles submodule.
[skip ci]
2020-01-27 22:57:41 +01:00
Sébastien Villemot d0dc40c29e Merge branch 'sub_draws' into 'master'
trap error when sub_draws is set to zero

See merge request Dynare/dynare!1699
2020-01-27 17:45:50 +00:00
Sébastien Villemot f9e7ede810 Merge branch 'rescale_prediction_error_covariance' into 'master'
rescale_prediction_error_covariance

See merge request Dynare/dynare!1698
2020-01-27 17:45:38 +00:00
Stéphane Adjemian (Charybdis) 455c806e11
Updated dseries submodule. 2020-01-27 14:03:28 +01:00
Stéphane Adjemian (Charybdis) 3fcca321a2
Bug fixes.
- cherrypick routine was not returning the correct lists of endogenous
   and exogenous variables. The number of endogenous variables was even
   not matching the number of equations.
 - In some cases LHS expressions were not preprocessed to extract the
   name of an endogenous variable.
 - Return a non cryptic error message if more than one endogenous
   variable appears in the LHS.
2020-01-27 14:02:03 +01:00
Stéphane Adjemian (Charybdis) 7e849f01ad
Code factorization. 2020-01-27 14:02:03 +01:00
Willi Mutschler 3ecc44b542 Fix minimal state space test files for old matlab 2020-01-26 16:00:02 +00:00
Marco Ratto 73291b0b19 before issuing F singularity, check with rescaled F matrix: this spares lots of computing time when singularity only happens in the first KF step. 2020-01-24 14:17:26 +01:00
Willi Mutschler e843ccbd0d
📃 Update license 2020-01-24 12:45:20 +01:00
Willi Mutschler aa0f278edc
📃 Update license 2020-01-24 12:45:15 +01:00
Willi Mutschler 5525a7c515
🏇 Better minimal state space handling and unit tests 2020-01-24 12:45:08 +01:00
Willi Mutschler 1aa3dda449
🚿 construct list of fields needed from M_, options_, oo_
Get fields
2020-01-24 12:45:01 +01:00
Willi Mutschler 46c4dea559
📄 Updated code comments 2020-01-24 12:44:54 +01:00
Willi Mutschler a62e69cf39
🐛 fix identification strength barplots for one parameter 2020-01-24 12:44:34 +01:00
Willi Mutschler c4f7c416fa
🐛 Fix #1694 by robust rank tolerance and histc 2020-01-24 12:44:26 +01:00
Marco Ratto 79cca46dd6 trap error when sub_draws is set to zero 2020-01-24 10:22:24 +01:00
Sébastien Villemot d3e90a8dbf
Fix the handling of options nopreprocessoroutput, onlyjson and onlymacro when they appear at the top of the .mod file
The nopathchange is still not supported in this context, so document it.

Also recommend the whitespace-separated syntax instead of the comma-separated
syntax, since the latter is inconsistent with the way options are passed on the
command-line.

Closes: #1667
2020-01-23 18:58:08 +01:00
Sébastien Villemot 09be021dcd
Add license header for allVL1.m
Ref. #1689
2020-01-22 18:03:47 +01:00
Sébastien Villemot 808119b1ad
Various fixes to the license.txt file
In particular, merge back preprocessor information.
2020-01-22 18:03:33 +01:00
Sébastien Villemot fd115c22e7
Restore the BSD-2-clause license header of two files
Those had been incorrectly converted to GPL-3+ in commit
1bf81c9f5a.
2020-01-22 16:53:22 +01:00
Sébastien Villemot 9f51b2508a
Disable spurious warnings as early as possible
This is necessary for Octave under Windows, to avoid a warning about isdir()
triggered by user_has_octave_forge_package.m.
2020-01-21 18:39:33 +01:00
Sébastien Villemot e371b1a94b
New option “filtered_theoretical_moments_grid”, that supersedes “hp_ngrid”
The old option is left for backward-compatibility purposes, but it has the same
effect as the new one.

Closes: #1093
2020-01-20 16:23:10 +01:00
Stéphane Adjemian (Charybdis) e92fa493a2
Updated dseries submodule. 2020-01-17 18:43:11 +01:00
Stéphane Adjemian (Charybdis) 4ff0b66a8c
Updated dseries submodule (bug fix in merge method).
[skip ci]
2020-01-17 18:27:49 +01:00
Sébastien Villemot 048564c97b
MATLAB compatibility fix: R2014a is 8.3, not 8.4 2020-01-16 16:54:47 +01:00
Sébastien Villemot 1912f67778
MATLAB compatibility fix: automatic broadcasting was introduced in R2016b
For earlier versions, either use bsxfun or handle special cases differently.
2020-01-13 18:30:28 +01:00
Sébastien Villemot 8fff99115a
MATLAB compatibility fix: double-quoted strings only accepted since R2017a 2020-01-13 18:30:28 +01:00
Sébastien Villemot d9b9f78392 Merge branch 'particle_check' into 'master'
Particle filters: provide error if trends or prefiltering is used

Closes #1690

See merge request Dynare/dynare!1695
2020-01-13 11:02:29 +00:00
Johannes Pfeifer 03a8759560 Particle filters: provide error if trends or prefiltering is used
Closes https://git.dynare.org/Dynare/dynare/issues/1690
2020-01-10 19:08:51 +01:00
Sébastien Villemot 7e770f69e7
Remove workaround for errors in MEX files
Because at some point throwing exceptions from MEX files (with mexErrMsgTxt())
was not working under Windows 64-bit, we had designed a workaround to avoid
using exceptions.

Most MEX files were returning an error code as their first (or sometimes last)
argument, and that code would have to be checked from the MATLAB code.

Since this workaround is no longer needed, this commit removes it. As a
consequence, the interface of many MEX files is modified.

For some background, see https://www.dynare.org/pipermail/dev/2010-September/000895.html
2020-01-10 18:33:11 +01:00
Stéphane Adjemian (Charybdis) 3e408ffd6b
Updated dseries submodule (flip method and geometric nanmean).
[skip ci]
2020-01-09 19:16:15 +01:00
Stéphane Adjemian (Charybdis) 274b9371f3
Updated dseries submodule. 2020-01-09 17:54:38 +01:00
Stéphane Adjemian (Charybdis) b33c2c3ce2
Updated dseries submodule (bug fixes in backcast method). 2020-01-06 18:38:20 +01:00
Sébastien Villemot 4e314a529b
Bump minimal required Octave version to 4.4 2020-01-06 18:29:47 +01:00
Sébastien Villemot a95358accc Merge branch 'sim1' into 'master'
sim1.m: provide missing function input to nested function

See merge request Dynare/dynare!1691
2020-01-06 13:22:29 +00:00
Houtan Bastani bf102030cb
support saving exogenous variables in `dynasave`, `dynasave`; fix bugs in `dynasave`; add test
- `dynasave`: if a variable being saved was named `n` or `s`, the `eval` statements would break the code
- `dynasave`: use the `-struct` option to `save` to avoid `eval` statements
- `dynasave` and `dynatype`: do everything in 1 loop instead of 2
- `dynasave` and `dynatype`: use `strcmp` instead of `strfind`

- preprocessor update contains:
  - Partial reversion of global indentation of macro processor header files introduced in e2d5a83592634f0604d8c86409748cd2ec5906d2
  - Symbol List check pass: allow caller to specify the valid types of variables in a Symbol List
  - Allow `dynasave` and `dynatype` to support exogenous variables in their var_list

issue #1691
2020-01-06 12:45:44 +01:00
Stéphane Adjemian (Charybdis) a40a940d51
Same as 8aa86a22 in Iterative OLS. 2020-01-06 11:03:58 +01:00
Stéphane Adjemian (Charybdis) 8aa86a2244
Save the list of parameter names in pac estimation results (NLS). 2020-01-06 11:03:26 +01:00
Johannes Pfeifer 632c0a3943 sim1.m: provide missing function input to nested function 2020-01-06 09:06:18 +01:00
Marco Ratto 2134f2616d
for parallel execution we need to initialize also prior_draw (used in slice sampler). 2020-01-02 17:48:29 +01:00
Sébastien Villemot 49dc997073
Global reindentation of MATLAB code (excluding submodules)
Also convert to Unix end-of-lines, and remove trailing whitespaces.
2019-12-20 16:30:27 +01:00
Willi Mutschler 45e9771eb8
Fixed bug regarding non-stationary variables in pruned moments 2019-12-20 12:30:53 +01:00
Willi Mutschler 8b9b49f8d7
Finished identification order=1|2|3
Note that I still need to do a code clean up (provide some licenses for functions from other people) and to double check order=3. There is also much room for speed and memory improvement, but the code works fine for now. I will also provide more information to the merge request soon about the detailed changes for future reference.
2019-12-20 12:28:55 +01:00
Sébastien Villemot c04c111d97
Merge branch 'rattoma/dynare-epilogue'
Ref. !1688
2019-12-20 11:51:41 +01:00
Stéphane Adjemian (Charybdis) b5d4b4059b Return an error if pruning is used with order>3 in estimation. 2019-12-20 11:31:56 +01:00
Stéphane Adjemian (Charybdis) 031569fa96 Allow higher order approximations in nonlinear filters. 2019-12-20 11:31:56 +01:00
Stéphane Adjemian (Charybdis) 227b2661cb Do not trap order>2 in estimation. 2019-12-20 11:31:56 +01:00
Stéphane Adjemian (Charybdis) 4e0deb7987 Removed persistent variables. 2019-12-20 11:31:56 +01:00
Stéphane Adjemian (Charybdis) 76e3c6ca68 Removed unnecessary parts of the code.
- Call resol instead of dynare_resolve.
 - Removed definition of constant and trend which are not used in nonlinear filters.
 - Cosmetic changes.
2019-12-20 11:31:56 +01:00
Stéphane Adjemian (Charybdis) 6418e225bf Rewrote doc header. 2019-12-20 11:31:56 +01:00
Sébastien Villemot 996bdd6c64 New local_state_space_iteration_k MEX, for nonlinear filters at k-order
It applies the approximated policy function to a set of particles, using
Dynare++ routines.

There is support for parallelization, using Dynare++ multithreading
model (itself based on C++11 threads; we don’t use OpenMP because it is
incompatible with MKL). For the time being, default to a single thread. This
should be later refined through empirical testing.
2019-12-20 11:31:56 +01:00
Houtan Bastani f8fb8c0450
add missing comments/copyright to function 2019-12-20 10:37:06 +01:00
Marco Ratto 31c29d08c9 provisions for making shock decompositions for epilogue variables.
In case the epilogue formula is non-linear, the non additive non-linear term is distributed proportionally to the size of the individual shock contribution.
It is triggered by new option with_epilogue, applicable to commands:
1) shock_decomposition, realtime_shock_decomposition,
where preprocessor should trigger
options_.shock_decomp.with_epilogue=true;
2) initial_condition_decomposition
where preprocessor should trigger
options_.initial_condition_decomp.with_epilogue=true;
2019-12-19 22:19:39 +01:00
Marco Ratto aa50724379 Changed cumfix==0: splits non-additive components proportionally to size of shock contribution 2019-12-19 22:15:04 +01:00
Sébastien Villemot 1ac7344e42
Rollback introduction of +get and +set folders
Under Octave, having namespaces called “get” and “set” overshadows the builtin
functions with the same names, which are needed for graphics manipulation.

Therefore we go back to the initial function naming scheme, but moving all
those functions under an “accessors” subdirectory.

Among other things, this is a revert of
e4134ab59b and
c5e86fcb59.

Ref. !1655, !1686
2019-12-19 17:20:38 +01:00
Sébastien Villemot efa6c6c682
“datafile” option of “perfect_foresight_setup” (and “simul”) now equivalent to “initval_file”
Ref. #1663
2019-12-19 14:58:54 +01:00
Sébastien Villemot 0ba453dd0a
Fix file permissions 2019-12-19 10:47:55 +01:00
Sébastien Villemot 2c9ea629bd Merge branch 'utilsx' into 'master'
Moved get and set utilities to +get and +set

See merge request Dynare/dynare!1686
2019-12-19 09:42:19 +00:00
Sébastien Villemot 6ba10b88f2
Preprocessor: various provisions for improvements to shock decomposition
Accordingly update the MATLAB routines, the testsuite, and the manual.

In particular, “squeeze_shock_decomp” has been renamed to
“squeeze_shock_decomposition” for consistency with other commands.

Ref. #1687, !1655
2019-12-18 11:56:57 +01:00
Marco Ratto a6e3e7256a trap possible issues in slice iterations and save info file on progress 2019-12-17 23:24:48 +01:00
Sébastien Villemot e2f91abcaf Merge branch 'master' into 'master'
utilities + plot shock decompositions + init condition decompositions

See merge request Dynare/dynare!1655
2019-12-17 18:21:31 +00:00
Willi Mutschler 5a8c206760 Added parameter derivatives of perturbation solution up to 3 order
# Preliminary comments
I finished the identification toolbox at orders two and three using the pruned state space system, but before I merge request this, I decided to first merge the new functionality to compute parameter derivatives of perturbation solution matrices at higher orders. So after this is approved, I merge the identification toolbox.
I guess @rattoma, @sebastien, and @michel are best choices to review this.
I outline the main idea first and then provide some more detailed changes I made to the functions.

***

# Main idea
This merge request is concerned with the *analytical*computation of the parameter derivatives of first, second and third order perturbation solution matrices, i.e. using _closed-form_ expressions to efficiently compute the derivative of  $g_x$ , $g_u$, $g_{xx}$, $g_{xu}$, $g_{uu}$, $g_{\sigma\sigma}$, $g_{xxx}$, $g_{xxu}$, $g_{xuu}$, $g_{uuu}$, $g_{x\sigma\sigma}$, $g_{u\sigma\sigma}$ *with respect to model parameters*  $\theta$.  Note that $\theta$ contains model parameters, stderr and corr parameters of shocks. stderr and corr parameters of measurement errors are not yet supported, (they can easily be included as exogenous shocks). The availability of such derivatives is beneficial in terms of more reliable analysis of model sensitivity and parameter identifiability as well as more efficient estimation methods, in particular for models solved up to third order, as it is well-known that numerical derivatives are a tricky business, especially for large models.

References for my approach are:
* Iskrev (2008, 2010) and Schmitt-Grohé and Uribe (2012, Appendix)  who were the first to compute the parameter derivatives analytically at first order, however, using inefficient (sparse) Kronecker products.
* Mutschler (2015) who provides the expressions for a second-order, but again using inefficient (sparse) Kronecker products.
* Ratto and Iskrev (2012) who show how the first-order system can be solved accurately, fast and efficiently using existing numerical algorithms for generalized Sylvester equations by taking the parameter derivative with respect to each parameter separately.
* Julliard and Kamenik (2004) who provide the perturbation solution equation system in tensor notation at any order k.
* Levintal (2017) who introduces permutation matrices to express the perturbation solution equation system in matrix notation up to fifth order.
Note that @rattoma already implemented the parameter derivatives of $g_x$ and $g_u$ analytically (and numerically), and I rely heavily on his work in `get_first_order_solution_params_derivs.m` (previously `getH.m`). My additions are mainly to this function and thus it is renamed to `get_perturbation_params_derivs.m`.

The basic idea of this merge request is to take the second- and third-order perturbation solution systems in Julliard and Kamenik (2004), unfold these into an equivalent matrix representation using permutation matrices as in Levintal (2017). Then extending Ratto and Iskrev (2012) one takes the derivative with respect to each parameter separately and gets a computational problem that is linear, albeit large, as it involves either solving generalized Sylvester equations or taking inverses of highly sparse matrices. I will now briefly summarize the perturbation solution system at third order and the system that results when taking the derivative with respect to parameters.

## Perturbation Solution
The following systems arise at first, second, and third order:
$(ghx): f_{x} z_{x} = f_{y_{-}^*} + f_{y_0} g_{x} + f_{y_{+}^{**}} g^{**}_{x} g^{*}_{x}= A g_{x} + f_{y_{-}^*}=0$

$(ghu): f_{z} z_{u} = f_{y_0} g_{u} + f_{y_{+}^{**}} g^{**}_{x} g^{*}_{u} + f_{u}= A g_u + f_u = 0$

$(ghxx) : A g_{xx} + B g_{xx} \left(g^{*}_{x} \otimes g^{*}_{x}\right) + f_{zz} \left( z_{x} \otimes z_{x} \right) = 0$

$(ghxu) : A g_{xu} + B g_{xx} \left(g^{*}_{x} \otimes g^{*}_{u}\right) + f_{zz} \left( z_{x} \otimes z_{u} \right) = 0$

$(ghuu) : A g_{uu} + B g_{xx} \left(g^{*}_{u} \otimes g^{*}_{u}\right) + f_{zz} \left( z_{u} \otimes z_{u} \right) = 0$

$(ghs2) : (A+B) g_{\sigma\sigma} +  \left( f_{y^{**}_{+}y^{**}_{+}} \left(g^{**}_{u} \otimes g^{**}_{u}\right) + f_{y^{**}_{+}} g^{**}_{uu}\right)vec(\Sigma) = 0$

$(ghxxx) : A g_{xxx} + B g_{xxx} \left(g^{*}_{x} \otimes g^{*}_{x} \otimes g^{*}_{x}\right) + f_{y_{+}}g^{**}_{xx} \left(g^{*}_x \otimes g^{*}_{xx}\right)P_{x\_xx} + f_{zz} \left( z_{x} \otimes z_{xx} \right)P_{x\_xx} + f_{zzz} \left( z_{x} \otimes z_{x} \otimes z_{x} \right) = 0$

$(ghxxu) : A g_{xxu} + B g_{xxx} \left(g^{*}_{x} \otimes g^{*}_{x} \otimes g^{*}_{u}\right) + f_{zzz} \left( z_{x} \otimes z_{x} \otimes z_{u} \right) + f_{zz} \left( \left( z_{x} \otimes z_{xu} \right)P_{x\_xu} + \left(z_{xx} \otimes z_{u}\right) \right) + f_{y_{+}}g^{**}_{xx} \left( \left(g^{*}_{x} \otimes g^{*}_{xu}\right)P_{x\_xu} + \left(g^{*}_{xx} \otimes g^{*}_{u}\right) \right) = 0$

$(ghxuu) : A g_{xuu} + B g_{xxx} \left(g^{*}_{x} \otimes g^{*}_{u} \otimes g^{*}_{u}\right) + f_{zzz} \left( z_{x} \otimes z_{u} \otimes z_{u} \right)+ f_{zz} \left( \left( z_{xu} \otimes z_{u} \right)P_{xu\_u} + \left(z_{x} \otimes z_{uu}\right) \right) + f_{y_{+}}g^{**}_{xx} \left( \left(g^{*}_{xu} \otimes g^{*}_{u}\right)P_{xu\_u} + \left(g^{*}_{x} \otimes g^{*}_{uu}\right) \right) = 0$

$(ghuuu) : A g_{uuu} + B g_{xxx} \left(g^{*}_{u} \otimes g^{*}_{u} \otimes g^{*}_{u}\right) + f_{zzz} \left( z_{u} \otimes z_{u} \otimes z_{u} \right)+ f_{zz} \left( z_{u} \otimes z_{uu} \right)P_{u\_uu} + f_{y_{+}}g^{**}_{xx} \left(g^{*}_{u} \otimes g^{*}_{uu}\right)P_{u\_uu}  = 0$

$(ghx\sigma\sigma) : A g_{x\sigma\sigma} + B g_{x\sigma\sigma} g^{*}_x + f_{y_{+}} g^{**}_{xx}\left(g^{*}_{x} \otimes g^{*}_{\sigma\sigma}\right) + f_{zz} \left(z_{x} \otimes z_{\sigma\sigma}\right) + F_{xu_{+}u_{+}}\left(I_{n_x} \otimes vec(\Sigma)\right) = 0$
$F_{xu_{+}u_{+}} = f_{y_{+}^{\ast\ast}} g_{xuu}^{\ast\ast} (g_x^{\ast} \otimes I_{n_u^2}) + f_{zz} \left( \left( z_{xu_{+}} \otimes z_{u_{+}} \right)P_{xu\_u} + \left(z_{x} \otimes z_{u_{+}u_{+}}\right) \right) + f_{zzz}\left(z_{x} \otimes z_{u_{+}} \otimes z_{u_{+}}\right)$

$(ghu\sigma\sigma) : A g_{u\sigma\sigma} + B g_{x\sigma\sigma} g^{*}_{u} + f_{y_{+}} g^{**}_{xx}\left(g^{*}_{u} \otimes g^{*}_{\sigma\sigma}\right) + f_{zz} \left(z_{u} \otimes z_{\sigma\sigma}\right) + F_{uu_{+}u_{+}}\left(I_{n_u} \otimes vec(\Sigma_u)\right) = 0$
$F_{uu_{+}u_{+}} = f_{y_{+}^{\ast\ast}} g_{xuu}^{\ast\ast} (g_u^{\ast} \otimes I_{n_u^2})  + f_{zz} \left( \left( z_{uu_{+}} \otimes z_{u_{+}} \right)P_{uu\_u} + \left(z_{u} \otimes z_{u_{+}u_{+}}\right) \right) + f_{zzz}\left(z_{u} \otimes z_{u_{+}} \otimes z_{u_{+}}\right)$

A and B are the common perturbation matrices:

$A = f_{y_0} + \begin{pmatrix} \underbrace{0}_{n\times n_{static}} &\vdots& \underbrace{f_{y^{**}_{+}} \cdot g^{**}_{x}}_{n \times n_{spred}} &\vdots& \underbrace{0}_{n\times n_{frwd}}  \end{pmatrix}$and $B = \begin{pmatrix} \underbrace{0}_{n \times n_{static}}&\vdots & \underbrace{0}_{n \times n_{pred}} & \vdots & \underbrace{f_{y^{**}_{+}}}_{n \times n_{sfwrd}} \end{pmatrix}$

and $z=(y_{-}^{\ast}; y; y_{+}^{\ast\ast}; u)$ denotes the dynamic model variables as in `M_.lead_lag_incidence`, $y^\ast$ denote state variables, $y^{\ast\ast}$ denote forward looking variables, $y_+$ denote the variables with a lead, $y_{-}$ denote variables with a lag, $y_0$ denote variables at period t, $f$ the model equations, and $f_z$ the first-order dynamic model derivatives, $f_{zz}$ the second-order dynamic derivatives, and $f_{zzz}$ the third-order dynamic model derivatives. Then:
$z_{x} = \begin{pmatrix}I\\g_{x}\\g^{**}_{x} g^{*}_{x}\\0\end{pmatrix}$, $z_{u} =\begin{pmatrix}0\\g_{u}\\g^{**}_{x} \cdot g^{*}_{u}\\I\end{pmatrix}$, $z_{u_{+}} =\begin{pmatrix}0\\0\\g^{**}_{u}\\0\end{pmatrix}$
$z_{xx} = \begin{pmatrix} 0\\g_{xx}\\g^{**}_{x} \left( g^{*}_x \otimes g^{*}_{x} \right) + g^{**}_{x} g^{*}_{x}\\0\end{pmatrix}$, $z_{xu} =\begin{pmatrix}0\\g_{xu}\\g^{**}_{xx} \left( g^{*}_x \otimes g^{*}_{u} \right) + g^{**}_{x} g^{*}_{xu}\\0\end{pmatrix}$, $z_{uu} =\begin{pmatrix}0\\g_{uu}\\g^{**}_{xx} \left( g^{*}_u \otimes g^{*}_{u} \right) + g^{**}_{x} g^{*}_{uu}\\0\end{pmatrix}$,
$z_{xu_{+}} =\begin{pmatrix}0\\0\\g^{**}_{xu} \left( g^{*}_x \otimes I \right)\\0\end{pmatrix}$, $z_{uu_{+}} =\begin{pmatrix}0\\0\\g^{**}_{xu} \left( g^{*}_{u} \otimes I \right)\\0\end{pmatrix}$, $z_{u_{+}u_{+}} =\begin{pmatrix}0\\0\\g^{\ast\ast}_{uu}\\0\end{pmatrix}$, $z_{\sigma\sigma} = \begin{pmatrix}0\\ g_{\sigma\sigma}\\ g^{\ast\ast}_{x}g^{\ast}_{\sigma\sigma} + g^{\ast\ast}_{\sigma\sigma}\\0 \end{pmatrix}$

$P$ are permutation matrices that can be computed using Matlab's `ipermute` function.

## Parameter derivatives of perturbation solutions
First, we need the parameter derivatives of first, second, third, and fourth derivatives of the dynamic model (i.e. g1,g2,g3,g4 in dynamic files), I make use of the implicit function theorem: Let $f_{z^k}$ denote the kth derivative (wrt all dynamic variables) of the dynamic model, then let $df_{z^k}$ denote the first-derivative (wrt all model parameters) of $f_{z^k}$ evaluated at the steady state. Note that $f_{z^k}$  is a function of both the model parameters $\theta$  and of the steady state of all dynamic variables $\bar{z}$, which also depend on the parameters. Hence, implicitly $f_{z^k}=f_{z^k}(\theta,\bar{z}(\theta))$  and $df_{z^k}$ consists of two parts:
1. direct derivative wrt to all model parameters given by the preprocessor in the `_params_derivs.m` files
2. contribution of derivative of steady state of dynamic variables (wrt all model parameters): $f_{z^{k+1}} \cdot d\bar{z}$
Note that we already have functionality to compute $d\bar{z}$ analytically.

Having this, the above perturbation systems are basically equations of the following types
$AX +BXC = RHS$ or $AX = RHS$
Now when taking the derivative (wrt to one single parameter $\theta_j$), we get
$A\mathrm{d}\{X\} + B\mathrm{d}\{X\}C = \mathrm{d}\{RHS\} - \mathrm{d}\{A\}X -  \mathrm{d}\{B\}XC - BX\mathrm{d}\{C\}$
or
$A\mathrm{d}\{X\}  = \mathrm{d}\{RHS\} - \mathrm{d}\{A\}X$
The first one is a Sylvester type equation, the second one can be solved by taking the inverse of $A$. The only diffculty and tedious work arrises in computing (the highly sparse) derivatives of $RHS$.

***

# New functions: `
## get_perturbation_params_derivs.m`and `get_perturbation_params_derivs_numerical_objective.m`
* The parameter derivatives up to third order are computed in the new function`get_perturbation_params_derivs.m` both analytically and numerically. For numerical derivatives `get_perturbation_params_derivs_numerical_objective.m` is the objective for `fjaco.m` or `hessian_sparse.m` or `hessian.m`.
* `get_perturbation_params_derivs.m` is basically an extended version of the previous `get_first_order_solution_params_derivs.m` function.
* * `get_perturbation_params_derivs_numerical_objective.m`builds upon `identification_numerical_objective.m`. It is used for numerical derivatives, whenever `analytic_derivation_mode=-1|-2`. It takes from `identification_numerical_objective.m` the parts that compute numerical parameter Jacobians of steady state, dynamic model equations, and perturbation solution matrices. Hence, these parts are removed in `identification_numerical_objective.m` and it only computes numerical parameter Jacobian of moments and spectrum which are needed for identification analysis in `get_identification_jacobians.m`, when `analytic_derivation_mode=-1` only.
* Detailed changes:
      * Most important: notation of this function is now in accordance to the k_order_solver, i.e. we do not compute derivatives of Kalman transition matrices A and B, but rather the solution matrices ghx,ghu,ghxx,ghxu,ghuu,ghs2,ghxxx,ghxxu,ghxuu,ghuuu,ghxss,ghuss in accordance with notation used in `oo_.dr`. As a byproduct at first-order, focusing on ghx and ghu instead of Kalman transition matrices A and B makes the computations slightly faster for large models (e.g. for Quest the computations were faster by a couple of seconds, not much, but okay).
      * Removed use of `kstate`, see also Dynare/dynare#1653 and Dynare/dynare!1656
      * Output arguments are stored in a structure `DERIVS`, there is also a flag `d2flag` that computes parameter hessians needed only in `dsge_likelihood.m`.
      * Removed `kronflag` as input. `options_.analytic_derivation_mode` is now used instead of `kronflag`.
      * Removed `indvar`, an index that was used to selected specific variables in the derivatives. This is not needed, as we always compute the parameter derivatives for all variables first and then select a subset of variables. The selection now takes place in other functions, like `dsge_likelihood.m`.
      * Introduced some checks: (i) deterministic exogenous variables are not supported, (ii) Kronecker method only compatible with first-order approximation so reset to sylvester method, (iii) for purely backward or forward models we need to be careful with the rows in `M_.lead_la	g_incidence`, (iv) if `_params_derivs.m` files are missing an error is thrown.
      * For numerical derivatives, if mod file does not contain an `estimated_params_block`, a temporary one with the most important parameter information is created.
## `unfold_g4.m`
* When evaluating g3 and g4 one needs to take into account that these do not contain symmetric elements, so one needs to use `unfold_g3.m` and the new function `unfold_g4.m`. This returns an unfolded version of the same matrix (i.e. with symmetric elements).

***

# New test models
`.gitignore` and `Makefile.am` are changed accordingly. Also now it is possible to run test suite on analytic_derivatives, i.e. run `make check m/analytic_derivatives`

## `analytic_derivatives/BrockMirman_PertParamsDerivs.mod`
* This is the Brock Mirman model, where we know the exact policy function $g$ for capital and consumption. As this does not imply a nonzero $g_{\sigma\sigma}$, $g_{x\sigma\sigma}$, $g_{u\sigma\sigma}$ I added some artificial equations to get nonzero solution matrices with respect to $\sigma$. The true perturbation solution matrices  $g_x$ , $g_u$, $g_{xx}$, $g_{xu}$, $g_{uu}$, $g_{\sigma\sigma}$, $g_{xxx}$, $g_{xxu}$, $g_{xuu}$, $g_{uuu}$, $g_{x\sigma\sigma}$, $g_{u\sigma\sigma}$ are then computed analytically with Matlab's symbolic toolbox and saved in `nBrockMirmanSYM.mat`. There is a preprocessor flag that recreates these analytical computations if changes are needed (and to check whether I made some errors here ;-) )
* Then solution matrices up to third order and their parameter Jacobians are then compared to the ones computed by Dynare's `k_order_solver` and by `get_perturbation_params_derivs` for all `analytic_derivation_mode`'s. There will be an error if the maximum absolute deviation is too large, i.e. for numerical derivatives (`analytic_derivation_mode=-1|-2`) the tolerance is choosen lower (around 1e-5); for analytical methods we are stricter: around 1e-13 for first-order,  1e-12 for second order, and 1e-11 for third-order.
* As a side note, this mod file also checks Dynare's `k_order_solver` algorithm and throws an error if something is wrong.
* This test model shows that the new functionality works well. And analytical derivatives perform way better and accurate than numerical ones, even for this small model.
## `analytic_derivatives/burnside_3_order_PertParamsDerivs.mod`
* This builds upon `tests/k_order_perturbation/burnside_k_order.mod` and computes the true parameter derivatives analytically by hand.
      * This test model also shows that the new functionality works well.

## `analytic_derivatives/LindeTrabandt2019.mod`
* Shows that the new functionality also works for medium-sized models, i.e. a SW type model solved at third order with 35 variables (11 states). 2 shocks and 20 parameters.
* This mod file can be used to tweak the speed of the computations in the future.
* Compares numerical versus analytical parameter derivatives (for first, second and third order). Note that this model clearly shows that numerical ones are quite different than analytical ones even at first order!
## `identification/LindeTrabandt2019_xfail.mod`
* This model is a check for issue Dynare/dynare#1595, see fjaco.m below, and will fail.
* Removed `analytic_derivatives/ls2003.mod` as this mod file is neither in the testsuite nor does it work.

***

# Detailed changes in other functions
## `get_first_order_solution_params_derivs.m`
* Deleted, or actually, renamed to `get_perturbation_params_derivs.m`, as this function now is able to compute the derivatives up to third order

## `identification_numerical_objective.m`
* `get_perturbation_params_derivs_numerical_objective.m`builds upon `identification_numerical_objective.m`. It takes from `identification_numerical_objective.m` the parts that compute numerical parameter Jacobians of steady state, dynamic model equations, and perturbation solution matrices. Hence, these parts are removed in `identification_numerical_objective.m` and it only computes numerical parameter Jacobian of moments and spectrum which are needed for identification analysis in `get_identification_jacobians.m`, when `analytic_derivation_mode=-1` only.

## `dsge_likelihood.m`
* As `get_first_order_solution_params_derivs.m`is renamed to `get_perturbation_params_derivs.m`, the call is adapted. That is,`get_perturbation_params_derivs` does not compute the derivatives of the Kalman transition `T`matrix anymore, but instead of the dynare solution matrix `ghx`. So we recreate `T` here as this amounts to adding some zeros and focusing on selected variables only.
* Added some checks to make sure the first-order approximation is selected.
* Removed `kron_flag` as input, as `get_perturbation_params_derivs` looks into `options_.analytic_derivation_mode` for `kron_flag`.

## `dynare_identification.m`
* make sure that setting `analytic_derivation_mode` is set both in `options_ident` and `options_`. Note that at the end of the function we restore the `options_` structure, so all changes are local. In a next merge request, I will remove the global variables to make all variables local.

## `get_identification_jacobians.m`
* As `get_first_order_solution_params_derivs.m`is renamed to `get_perturbation_params_derivs.m`, the call is adapted. That is,`get_perturbation_params_derivs` does not compute the derivatives of the Kalman transition `A` and `B` matrix anymore, but instead of the dynare solution matrix `ghx` and `ghu`. So we recreate these matrices here instead of in `get_perturbation_params_derivs.m`.
* Added `str2func` for better function handles in `fjaco.m`.

## `fjaco.m`
* make `tol`an option, which can be adjusted by changing `options_.dynatol.x`for identification and parameter derivatives purposes.
* include a check and an informative error message, if numerical derivatives (two-sided finite difference method) yield errors in `resol.m` for identification and parameter derivatives purposes. This closes issue  Dynare/dynare#1595.
* Changed year of copyright to 2010-2017,2019

***

# Further suggestions and questions
* Ones this is merged, I will merge request an improvement of the identification toolbox, which will work up to third order using the pruned state space. This will also remove some issues and bugs, and also I will remove global variables in this request.
* The third-order derivatives can be further improved by taking sparsity into account and use mex versions for kronecker products etc. I leave this for further testing (and if anybody actually uses this ;-) )
2019-12-17 18:17:09 +00:00
Marco Ratto c5e86fcb59 Moved
get_param_by_name --> get.param_by_name
set_param_value --> set.param_value
plus the additional set utility:
set.shock_stderr_value
\
2019-12-17 17:42:25 +01:00
Marco Ratto 9f721c5763 renamed utilities to +get format 2019-12-17 09:44:15 +01:00
Sébastien Villemot 279bb7bc16 Merge branch 'mh_recover' into 'master'
make mh_recover robust to crashed parallel jobs

See merge request Dynare/dynare!1684
2019-12-16 09:30:48 +00:00
Marco Ratto 9a07171a7c trap case where there is no list of variables to squeeze 2019-12-15 17:05:47 +01:00
Marco Ratto 65d72866c3 provisions for squeeze when oo_ is output argument of plot_shock_decomposition.
Also trap with error situation when new computations are triggered after having squeezed results in oo_.
2019-12-15 16:53:43 +01:00
Marco Ratto 17e87e2a4c added steady state info on xls file shock decomposition 2019-12-15 15:40:10 +01:00
Marco Ratto 4c6b803945 use optional variable list as fourth input argument, to complement automatic list based on options_.plot_shock_decomp.i_var. 2019-12-15 15:40:10 +01:00
Marco Ratto 44eae1300d trap plot_end_date larger than actual length of smoother 2019-12-15 15:40:10 +01:00
Marco Ratto eb73cf4273 implement provisions for options_.no_graph.plot_shock_decomposition 2019-12-15 15:40:10 +01:00
Marco Ratto 83f38c9533 check also whether shock_decomposition field exists (happens when skipinsample=0 and realtime=1) 2019-12-15 15:40:10 +01:00
Marco Ratto 71fa8cac9f fixed bug with steady state of annualized variables requiring auxiliary while doing expand 2019-12-15 15:40:10 +01:00
Marco Ratto ac511ca756 bug fix for computing shock decomp for auxiliary variable with groups 2019-12-15 15:40:10 +01:00
Marco Ratto c8c473cc60 provisions for changing the preprocessor call to plot_shock_decoposition with one output argument 2019-12-15 15:40:10 +01:00
Marco Ratto 6932ac4993 fixed name of new option to a more meaningful one: max_nrows. 2019-12-15 15:40:10 +01:00
Marco Ratto 019545e2b3 fixed bugs in interactive mode of plot shock decomp that led to crashed with aoa 2019-12-15 15:40:10 +01:00
Marco Ratto 2d1402b899 to reduce memory in oo_, only store results for periods specified in save_realtime 2019-12-15 15:40:10 +01:00
Marco Ratto cc11a054c4 when varlist=0, we only compute decomposition and return restuls in oo_ without plotting. useful when squeezed oo_ misses initval decomp for requested variables. 2019-12-15 15:40:10 +01:00
Marco Ratto 7d70a1917b fixed bug of aoa with aux variable. completed computation of annualized_realtime_forecast_shock_decomposition.pool which so far triggered an error (vintage=0 in realtime shock decomp) 2019-12-15 15:40:10 +01:00
Marco Ratto 8b9d7490e3 plot_shock_decomposition stores info of plotted variables. This can be optionally used by squeeze_shock_decomp to store in oo_ only variables plotted so far. Users can optionally define the list of vars to sotre in squeezed oo_ for shock decomps. Also allow aoa plots for lists of input variables. fixed error in wrong field name var_type of q2a. fixed aoa call, storing the wrong decomp data for interactive mode. 2019-12-15 15:40:10 +01:00
Marco Ratto f167c01eee trap case when option is cell 2019-12-15 15:40:10 +01:00
Marco Ratto 3cbb039fbf utilities to get steadystate smoothed updated of endogenous by name, irfs by shock and endo name, shock std err by shock name 2019-12-15 15:40:10 +01:00
Sébastien Villemot 416532b6c3
dseries: new “nanmean” and “backcast” methods 2019-12-14 11:11:31 +01:00
Stéphane Adjemian (Charybdis) 4b7f8f21d8 Updated dseries submodule (Fixes for Octave and old Matlab versions). 2019-12-14 10:43:54 +01:00
Sébastien Villemot 7170ac0423 Merge branch 'ramsey' into 'master'
New Ramsey syntax

See merge request Dynare/dynare!1685
2019-12-13 17:32:42 +00:00
Sébastien Villemot ce4aa9a8e1
Preprocessor update
— deprecation warning for “simul” (#1683)
— Ramsey: use information from transformed model for filling
  M_.nonzero_hessian_eqs. (Closes: #1681)
  Also, M_.hessian_eq_zero is not generated if order = 1
— New field M_.endo_trends (#1648)
2019-12-13 18:22:12 +01:00
Stéphane Adjemian (Charybdis) 4fb7ec7f4c Updated dseries submodule (added backcast method). 2019-12-13 14:59:14 +01:00
Johannes Pfeifer c0c3a4c05c evaluate_planner_objective.m: add warning if order>1 is used
Also modernizes output format
2019-12-13 14:37:00 +01:00
Marco Ratto da4baa5d50 make mh_recover robust to crashed parallel jobs 2019-12-12 22:24:30 +01:00
Sébastien Villemot 6b308ccbd8 Merge branch 'dynare_solve' into 'master'
dynare_solve.m: return with valid solution even if Jacobian is ill-behaved

See merge request Dynare/dynare!1682
2019-12-12 20:06:38 +00:00
Johannes Pfeifer 1b56a56e78 dynare_solve.m: return with valid solution even if Jacobian is ill-behaved
In pathological cases, the Jacobian at the initial but true steady state value is ill-behaved. In this case we should return with the valid steady state instead of trying random starting values
2019-12-12 19:08:43 +01:00
Stéphane Adjemian (Charybdis) 30cfe6bfc5 Updated dseries submodule (added nanmean method). 2019-12-12 18:17:07 +01:00
Marco Ratto 35b63e87d6 properly handle labelling, grouping and expand under init2shocks option 2019-12-12 16:45:57 +01:00
Marco Ratto 06c2b49897 provisions for init2shocks: initial conditions are added to its correspondiong shock for shock decompositions, while they are removed in initial condition decompositions. 2019-12-12 15:21:47 +01:00
Johannes Pfeifer 9208bcf049 Modified harmonic mean: Transform hard-coded tolerance to parameter
Closes https://git.dynare.org/Dynare/dynare/issues/1666
2019-12-12 11:49:57 +01:00
Stéphane Adjemian (Charybdis) 98de4e4427 Less cryptic error message when variable is missing in the database. 2019-12-10 22:40:23 +01:00
Dóra Kocsis ce16bbfb8c Implement waitbar in olsgibbs, surgibbs. 2019-12-10 17:03:46 +01:00
Dóra Kocsis 665cd764b8 Return YhatOrig and Yobs in dyn_ols, olsgibbs, sur, surgibbs. 2019-12-10 15:44:14 +01:00
Dóra Kocsis 716b18989d Factorize interpret_resol_info into print_info. Closes: Dynare/dynare#1308 2019-12-09 17:02:15 +01:00
Sébastien Villemot 3f3f49c465 Merge branch 'flip_diff' into 'master'
Flip diff

See merge request Dynare/dynare!1677
2019-12-06 15:29:07 +00:00
Sébastien Villemot 6f91bde894
Merge remote-tracking branch 'community/master' into enterprise 2019-12-06 16:10:09 +01:00
Houtan Bastani dec7d4fdb4
dynare.m: simplify code 2019-12-06 12:01:58 +01:00
Houtan Bastani 3a223e9c08
fix uncommon bug in parsing dynare command line options
previously, `nopathchange` and `nopreprocessoroutput` were set even if they were values instead of option names.

`nopathchange` would further remove all options that contained `'nopathchange'`

e.g. `dynare example1.mod savemacro=nopathchange` would erroneously set `nopathchange` to true and would delete the `savemacro` option altogether

In the fix, just check that the match starts in position 1 as, if the argument passed is longer than the matching pattern (e.g. nopathchangee), the preprocessor will stop processing with a usage error
2019-12-06 12:01:57 +01:00
Houtan Bastani 5c9476fb57
return YhatOrig in dyn_ols and olsgibbs as the non-transformed Yhat 2019-12-06 10:01:28 +01:00
Marco Ratto 5fe495852e Intregrate full list of options to initial_condition_decompositions, including defaults.
Adapt figure names when initial conditions are ploteed instead of shocks
2019-12-05 16:50:18 +01:00
Marco Ratto a14b174f93 provide info about flip diff options in the name of files and figures 2019-12-05 14:41:06 +01:00
Marco Ratto 79bdde79e0 implement new options flip and diff for plotting decompositions 2019-12-05 13:20:12 +01:00
Stéphane Adjemian (Charybdis) 34a1605a02 Updated git submodule.
[ci skip]
2019-12-05 12:15:36 +01:00
Stéphane Adjemian (Charybdis) 2184195826 Updated dseries submodule.
[ci skip]
2019-12-05 12:10:36 +01:00
Dóra Kocsis da201b29c1 Fix print_equations 2019-12-03 16:01:42 +01:00
Sébastien Villemot 6a89783b65
Merge remote-tracking branch 'community/master' into enterprise 2019-12-03 15:39:59 +01:00
Dóra Kocsis 58feb6496b Fix olsgibbs residual output. 2019-12-03 10:50:11 +01:00
Dóra Kocsis 93d254ef9d Add residuals to olsgibbs function output. 2019-12-02 16:22:11 +01:00
Houtan Bastani 0087eaab93
`precision` was not an accurate variable name; `field_width` is better 2019-12-02 15:34:06 +01:00
Houtan Bastani 196266cbe4
give more space to columns printed by dyn_table 2019-12-02 15:32:38 +01:00
Dóra Kocsis b9af92eb8a Save conditional forecast output in oo_. Closes: Dynare/dynare#1672 2019-11-29 15:25:05 +01:00
Houtan Bastani f2205ed4a1
add nograph option to plot_shock_decomposition
In updating the preprocessor, also update call to plot_icforecast
2019-11-29 15:17:41 +01:00
Houtan Bastani 14384c233f
reporting: correctly handle `showDate` option of report 2019-11-29 12:02:00 +01:00
Houtan Bastani 3ef8564279
reporting: add ability to make title page 2019-11-29 11:36:00 +01:00
Houtan Bastani b126d79918
introduce dynare options `exclude_eqs` and `include_eqs` 2019-11-27 15:53:14 +01:00
Sébastien Villemot c5537e23ae Merge branch 'tolerance' into 'master'
Nonlinear solver: tolerance for first Newton iteration is now smaller than for subsequent ones

See merge request Dynare/dynare!1674
2019-11-27 13:21:51 +00:00
Michel Juillard f70f7761db Nonlinear solver: tolerance for first Newton iteration is now
smaller than for subsequent ones. Closes: #1668
2019-11-27 14:19:01 +01:00
Sébastien Villemot 4a8dd1e8fa Merge branch 'steadystate_file' into 'master'
Remove globals from user-defined steadystate file

See merge request Dynare/dynare!1673
2019-11-26 17:26:19 +00:00
Johannes Pfeifer 0c01c31491 Remove global variables from user-defined steady state files
M_ and options_ are now passed as an input; params is an output as in the _steadystate2.m files
2019-11-26 17:05:14 +01:00
Sébastien Villemot 55d7397d40
Remove utilites for converting oo_ between Dynare versions
It’s not clear that such utilities are useful (people should rather update
their MATLAB). It’s also a lot of work, and it’s probably better to focus on
documenting the incompatibilities.

Closes: #915
2019-11-26 16:26:50 +01:00
Michel Juillard d0247277f9 after check, oo_.dr isn't empty but oo_.dr.ghx + friends don't exist 2019-11-25 21:54:53 +01:00
Stéphane Adjemian (Charybdis) d740af10f3 PAC/nls save lhs and fitted variables. 2019-11-25 17:29:45 +01:00
Stéphane Adjemian (Charybdis) 031456655c Cosmetic changes. 2019-11-25 17:28:56 +01:00
Stéphane Adjemian (Charybdis) 7e7f57d7d1 Encoding fixes. 2019-11-25 11:48:09 +01:00
Michel Juillard f6daa359b7 fix tolf and tolx options for sim1_purely_forward 2019-11-23 22:47:17 +01:00
Michel Juillard 2652cb0dd7 fix tolf and tolx options for sim1_purely_backward 2019-11-23 22:44:10 +01:00
Dóra Kocsis 75a929051f Update sur and surgibbs function outputs. 2019-11-22 10:59:01 +01:00
Sébastien Villemot 900fbe86e7 Merge branch 'plot_identification' into 'master'
plot_identification.m: fix placing of white dots for infinite values

See merge request Dynare/dynare!1668
2019-11-22 09:29:26 +00:00
Houtan Bastani 7b1c61f63c
allow `sur` to be run from the Matlab prompt 2019-11-21 20:12:13 +01:00
Johannes Pfeifer 8a171b82a8 plot_identification.m: fix placing of white dots for infinite values 2019-11-21 16:25:19 +01:00
Sébastien Villemot a327e2c9b8 Merge branch 'tex_subfolder' into 'master'
Move remaining LaTeX-file to subfolder

Closes #1655

See merge request Dynare/dynare!1667
2019-11-21 14:15:54 +00:00
Johannes Pfeifer 8e5fd8dc4e Move creation of subfolder outside of TeX-check
Required if we only want the figure
2019-11-21 11:58:16 +01:00
Johannes Pfeifer 0075776716 Laplace approximation: filter out non-positive definite Hessians
Closes https://git.dynare.org/Dynare/dynare/issues/1659
2019-11-21 11:32:13 +01:00
Johannes Pfeifer a59534a284 Move remaining figures and related TeX output from main folder to graphs 2019-11-21 10:14:48 +01:00
Johannes Pfeifer c6b757646e Move remaining LaTeX-files to subfolder
Closes https://git.dynare.org/Dynare/dynare/issues/1655
2019-11-21 10:14:48 +01:00
Stéphane Adjemian (Charybdis) 13cadd8e02 Do not use concatenation for populating database with fitted values. 2019-11-19 12:08:09 +01:00
Stéphane Adjemian (Charybdis) 9f5f4b6981 Cosmetic changes. 2019-11-18 21:48:52 +01:00
Sébastien Villemot 98bdf76581
MATLAB R2009b compatibility fixes
— use XLS instead of XLSX in testsuite datafiles
— use optimset instead of optimoptions
— use quadv/quadl/quadgk instead of integral
— fix race condition in load_m_file_data_legacy.m tests
— use fallback implementation for intersect(…, 'stable')
2019-11-15 18:27:37 +01:00
Sébastien Villemot caf0c8e1f8
Trust region solver: recompute Jacobian only when necessary
Previously, the solver would recompute the Jacobian at every iteration. But, if
an iteration fails, the current point is not moved (only the radius of the
trust region changes), hence it is not necessary to recompute the Jacobian in
that case. This commit implements this optimization.
2019-11-14 16:03:50 +01:00
Dóra Kocsis 4c49eddb97 Add fallback implementation for contains and splitlines functions. 2019-11-13 13:05:28 +01:00
Sébastien Villemot 849aff9ea7 Merge branch 'enterprise' into 'enterprise'
Add routine printing equations where a searched variable appears in.

See merge request Enterprise/dynare!4
2019-11-08 17:45:49 +00:00
Dóra Kocsis b4cd1c0f57 Add routine printing equations where a searched variable appears in. 2019-11-08 17:33:27 +01:00
Houtan Bastani 5c84f99d5f
Merge remote-tracking branch 'community/master' into enterprise 2019-11-06 15:25:37 -05:00
Houtan Bastani 0f61c5de7d
add new features to reporting
* split up report output, creating new files for the preamble, the body of the report, and each individual page of the report.
* allow the user to set the page number
* allow for the removal of headers and footers from a given page
2019-11-06 13:50:21 -05:00
Stéphane Adjemian (Charybdis) 3746d6254a Cosmetic change. Removed warning backtrace. 2019-11-02 17:48:06 +01:00
Stéphane Adjemian (Charybdis) 2eb793a1f9 Added routine returning the equation tag of a PAC equation.
This routine is to be used to programatically search results under
oo_.pac.

For instance, if one wants to display the R² associated to the
estimation of the PAC equation named `zpac`, where the PAC model name
is `pacman`:

oo_.pac.pacman.equations.(geteqtag('zpac', 'pacman', M_)).R2
2019-10-28 17:58:12 +01:00
Stéphane Adjemian (Charybdis) fce51c6cc4 Added R² to PAC NLS estimator. 2019-10-28 16:35:45 +01:00
Stéphane Adjemian (Charybdis) 6a959c4629 Put estimated residuals in a dseries object. 2019-10-28 16:34:56 +01:00
Houtan Bastani 294379265d
Merge remote-tracking branch 'community/master' into enterprise 2019-10-25 17:35:20 +02:00
Houtan Bastani c978b86a72
reporting: make horizontal line extend the width of the page 2019-10-25 17:31:46 +02:00
Houtan Bastani 36b83ad079
Merge remote-tracking branch 'community/master' into enterprise 2019-10-24 12:07:07 +02:00
Houtan Bastani 5f2d60f945
fix reporting bugs with addData 2019-10-24 12:03:33 +02:00
Houtan Bastani be3c48604b
change name of mex folder in macOS to conform with Dynare minimum 2019-10-23 18:59:36 +02:00
Houtan Bastani 908523dbb8
fix bug that caused reporting not to work in MATLAB < R2012a 2019-10-23 17:37:31 +02:00
Sébastien Villemot 645ebda638
Merge remote-tracking branch 'community/master' into enterprise 2019-10-23 16:48:01 +02:00
Sébastien Villemot 56e7144b91
Merge remote-tracking branch 'community/master' into enterprise 2019-10-23 16:30:29 +02:00
Stéphane Adjemian (Charybdis) 7c112f939a Updated dseries submodule (bug fix). 2019-10-23 15:49:11 +02:00
Houtan Bastani ac689b83ee
fix bug in reporting on Windows where `filesep`t results in a tab character 2019-10-23 15:11:43 +02:00
Stéphane Adjemian (Charybdis) 682b08a98f Updated dseries submodule. 2019-10-16 21:35:33 +02:00
Stéphane Adjemian (Charybdis) 1211d4c01e Updated dseries submodule (changed merge behaviour). 2019-10-16 20:58:49 +02:00
Dóra Kocsis 3648ccb8ff Adjust result output for NLS and Iterative OLS. 2019-10-10 10:10:23 +02:00
Houtan Bastani 8b86f8a25b
ignore unused output variable 2019-10-09 14:53:33 +02:00
Sébastien Villemot 3434ec2f9b
NLS estimation of PAC: fmincon now available under Octave 2019-10-09 12:32:26 +02:00
Sébastien Villemot 8875ac14d8
Merge remote-tracking branch 'community/master' into enterprise 2019-10-09 12:32:12 +02:00
Sébastien Villemot 71996fd077
Error out if mode_compute=12 and under Octave, or MATLAB w/o global optim tbox
[skip ci]
2019-10-09 12:30:41 +02:00
DoraK 41c66583ac Add linear combination support for growth neutrality in Iiterative OLS. 2019-10-08 23:18:40 +02:00
DoraK 8f6647b557 fix typo 2019-10-08 23:15:10 +02:00
Sébastien Villemot b3d1e8412b
Add support for mode_compute=1 under Octave
Since version 1.6, the optim Forge package has an implementation of fmincon.
Hence we can now use mode_compute=1 under Octave.

This commit also adds tests/optimizers/fs2000_1.mod to the testsuite. It will
be skipped under MATLAB if the optimization toolbox is not there, or under
Octave if optim ≥ 1.6 is not there.
2019-10-08 18:38:15 +02:00
Sébastien Villemot 100f4d5130
Simplify octave_ver_less_than using builtin compare_versions() 2019-10-08 18:38:15 +02:00
Houtan Bastani 5592078269
uncapitalize DYNARE in error messages
[skip ci]
2019-10-04 10:20:11 +02:00
Houtan Bastani 5ca9e44503
dseries: submodule update
this update includes the name change for x13 on mac from osx->macOS
2019-10-03 18:07:03 +02:00
Sébastien Villemot f44bb38c72
More capitalization fixes and cosmetics
[skip ci]
2019-10-03 16:21:15 +02:00
Stéphane Adjemian (Charybdis) 3a33165e8d Fixed regexpr. Allow parenthesis in expression. 2019-10-02 19:39:27 +02:00
Houtan Bastani afcdf46e80
capitalize Cepremap and Matlab, uncapitalize DYNARE 2019-10-02 14:09:21 +02:00
Stéphane Adjemian (Charybdis) 55a63d3da7 Fixed substitution for lagged variables unavailable in the database. 2019-10-02 10:41:32 +02:00
Stéphane Adjemian (Charybdis) 1668d50aaf Pass preprocessor options to aggregate routine. 2019-10-02 10:41:32 +02:00
Stéphane Adjemian (Charybdis) 2201c4e745 Fixed import of tags on exogenous variables. 2019-10-02 10:41:32 +02:00
Stéphane Adjemian (Charybdis) 4f479bfbe8 Allow diff(-diff(X)) or diff(-log(X)) in the LHS. 2019-10-02 10:41:32 +02:00
Stéphane Adjemian (Charybdis) fd2cb24911 Allow log(-X) or diff(-X) on the LHS. 2019-10-02 10:41:32 +02:00
Stéphane Adjemian (Charybdis) 6a87779d9e
Cosmetic change. 2019-10-01 14:48:43 +02:00
Stéphane Adjemian (Charybdis) 8eb3023069
Changed isint function.
To make it consistent with the routine available in the dates toolbox.
2019-10-01 14:48:12 +02:00
Stéphane Adjemian(Charybdis) 634b11de70
Cosmetic change. 2019-10-01 14:43:16 +02:00
Stéphane Adjemia (Scylla) ab911e98c4
Cosmetic changes. 2019-10-01 14:42:47 +02:00
Stéphane Adjemian (Scylla) f3600b0de9
Added trap for complex residuals and jacobian in nonlinear solver. 2019-10-01 14:40:17 +02:00
Sébastien Villemot 8e1528c1cb
Temporary fix for growth parameter in PAC models
The preprocessor has been modified to allow linear combinations in the growth
parameter (see Dynare/preprocessor@a0f74f5c16 and
Dynare/preprocessor@d873414728).

This commit restores the previous functionality (i.e. it fixes the simple case
where only one parameter/variable is provided for the growth parameter).

The code still needs to be adapted to really handle linear combinations.
2019-09-26 17:35:31 +02:00
Sébastien Villemot cbb59fe6f8
Merge remote-tracking branch 'community/master' into enterprise 2019-09-26 16:54:27 +02:00
Stéphane Adjemian (Charybdis) 07937f5b9f Updated dseries submodule (is{row,column,matrix} are builtin functions, not M-files).
[skip-ci]
2019-09-26 15:37:21 +02:00
Sébastien Villemot aa6456b156
Drop redundant rfvar3.m
This function is already present as a private function of bvar_toolbox.m. It is
not needed anywhere else.
2019-09-26 15:18:37 +02:00
Sébastien Villemot 71a68919bf
Fix mistakes done during previous merge commits 2019-09-26 15:18:18 +02:00
Sébastien Villemot f665117879
Remove spurious indentation changes
This commits reverts various spurious indentation changes that were on the
ecb-master but not on the master branch.
2019-09-26 15:17:54 +02:00
Sébastien Villemot 7b053c7e92
Option graph_format=pdf now works under Octave
Also copy the same Octave-specific code as for EPS printing (added in
84f0d6c7da to fix problems with hybrid
Unix/Windows parallel clusters).
2019-09-25 16:06:38 +02:00
Sébastien Villemot 3237cd4684 Merge branch 'xlwrite' into 'master'
WriteShockDecomp2Excel.m: only use xlwrite if xlswrite fails

Closes #1575

See merge request Dynare/dynare!1662
2019-09-24 11:16:37 +00:00
Sébastien Villemot d30ccf07f7
Update dseries submodule 2019-09-18 19:10:53 +02:00
Houtan Bastani 502b0c5038
change name of folder in 8d2e3def95 2019-09-16 17:57:13 +02:00
Houtan Bastani 8d2e3def95
macOS: use different mex files depending on Matlab version 2019-09-16 17:33:10 +02:00
Houtan Bastani 6ddf87aa92
stoch_simul: save var_list in oo_. closes #1646 2019-09-12 15:02:18 +02:00
Houtan Bastani 7712a02f02
add print and noprint option to perfect_foresight_solver. closes #1647 2019-09-12 14:50:14 +02:00
Houtan Bastani 3d6091b3a1
remove unused return arguments 2019-09-12 14:01:52 +02:00
Sébastien Villemot c9798a96e0
Fix MATLAB R2019b support
Some changes were missing in a1a4168c3
2019-09-12 12:48:32 +02:00
Houtan Bastani cb02ca5f1c
discretionary_policy: make incompatible with options_.loglinear 2019-09-12 11:57:09 +02:00
Houtan Bastani e043c60903
pass M_, options_, oo_ as arguments to stoch_simul, simult_, discretionary_policy. closes dynare#1197 2019-09-12 11:57:01 +02:00
Houtan Bastani 42842a5afc
clean up file (remove unused variables, fprintf instead of disp(sprintf())) 2019-09-12 11:55:05 +02:00
Houtan Bastani f118970736
remove unnecessary eval statements 2019-09-12 11:55:05 +02:00
Stéphane Adjemian (Charybdis) fdf6821d0b Generalized isconst routine. 2019-09-11 11:11:15 +02:00
Sébastien Villemot a5578e6bfa Merge branch 'sensitivity_error' into 'master'
dynare_sensitivity.m: provide informative error message if no var_exo are...

Closes #1651

See merge request Dynare/dynare!1660
2019-09-10 09:27:18 +00:00
Houtan Bastani 418070ec54
remove unused variable 2019-09-10 11:08:20 +02:00
Johannes Pfeifer c529f78ce3 WriteShockDecomp2Excel.m: only use xlwrite if xlswrite fails
Fixes https://git.dynare.org/Dynare/dynare/issues/1575
2019-09-10 10:47:13 +02:00
Johannes Pfeifer 8752cf0002 dynare_sensitivity.m: provide informative error message if no varexo are defined. Closes https://git.dynare.org/Dynare/dynare/issues/1651 2019-09-10 09:25:04 +02:00
Johannes Pfeifer 031632edd3 stoch_simul.m: provide informative error message if no varexo have been defined 2019-09-10 09:23:49 +02:00
Johannes Pfeifer d4ed77c67e posterior_sampler_initialization.m: provide missing function input
Fixes #1622
2019-09-06 23:03:07 +02:00
Johannes Pfeifer da0ad67367 initial_estimation_checks.m: Allow for calibrated measurement error 2019-09-06 22:53:37 +02:00
Houtan Bastani 53ce6222c2
remove unused variable in dynare_config 2019-09-05 11:48:19 +02:00
Houtan Bastani d51208f298
submodule update: reporting 2019-09-05 11:08:34 +02:00
Sébastien Villemot bae1fa255a
Add scripts and CI job for building Windows package
The scripts are based the former “dynare-build” project. They have been
overhauled and simplified.

Building a Windows package (both installer and zip archive) is as easy as
running “make -C windows” (provided the right Debian packages are installed,
use the “windows/install-packages.sh” script for that purpose).

The layout of MEX files for Octave in the package has been
changed (mex/octave/win32/ and mex/octave/win64/ instead of mex/octave32/ and
mex/octave/), for consistency with MATLAB MEX.
2019-09-03 21:36:47 +02:00
Johannes Pfeifer fc9197a9a1 imcforecast.m: Make code robust to 1 period
When using 1 period, the second dimension was a singleton that was removed as well by squeeze, resulting in a column vector when a row vector/matrix was expected. Fixes https://forum.dynare.org/t/problem-with-the-conditional-forecast-in-dynare-4-5-7/14385/2
2019-09-02 18:47:46 +02:00
Sébastien Villemot cf1e88c4a1
Update reporting submodule 2019-08-30 14:27:40 +02:00
Sébastien Villemot 5d2a077a56 Merge branch 'remove_kstate' into 'master'
Remove kstate in dyn_second_order_solver

See merge request Dynare/dynare!1656
2019-08-13 10:55:48 +00:00
Houtan Bastani 83f809e048
small fixes 2019-08-12 11:40:40 -04:00
Houtan Bastani 53ae549350
histval_file: small changes 2019-07-29 10:48:49 -04:00
Stéphane Adjemian (Charybdis) ca3b241317 Updated dseries submodule (bug fix: path to dseries class). 2019-07-26 11:05:24 +02:00
Houtan Bastani 908950f121
replace getfield/setfield with dynamic fields 2019-07-25 14:28:35 -04:00
Stéphane Adjemian (Charybdis) e3f1ea7e3c Added upper bound to error correction parameter.
Available only for lsqnonlin, fmincon, annealing, and particleswarm algorithms.
2019-07-24 11:21:52 +02:00
Houtan Bastani 7be2f966c3
dyn_ols: bug fix: sign was not taken into account from AST when endogenous to be subtracted from LHS 2019-07-22 10:16:22 -06:00
Stéphane Adjemian (Charybdis) d11815cba0 Cosmetic change. 2019-07-19 21:33:13 +02:00
Stéphane Adjemian (Charybdis) 84d4f48ada Fixed typo. 2019-07-19 16:51:50 +02:00
Stéphane Adjemian (Charybdis) 499481e889 Fixed bug.
aggregate was crashing in the absence of tags on the endogenous or exogenous variables.
2019-07-19 16:51:16 +02:00
Stéphane Adjemian (Charybdis) 2cfff70a64 Fixed bug (wrong index in loop i -> j). 2019-07-17 17:59:21 +02:00
Stéphane Adjemian (Charybdis) 426cce8199 Remove endogenous variables potentially remaining in the list of exogenous variables. 2019-07-17 17:52:16 +02:00
Willi Mutschler 052d304789
Remove kstate in dyn_second_order_solver
kstate is not needed anymore as all information is found in M_.lead_lag_incidence
See Dynare/dynare#1653
2019-07-16 10:33:02 +02:00
Sébastien Villemot fe165c2430
LaTeX files generated by the preprocessor are now under <basename>/latex/ 2019-07-11 17:35:30 +02:00
Sébastien Villemot 4030169db9
k_order_perturbation MEX: number of threads is now configurable 2019-07-09 17:33:14 +02:00
Sébastien Villemot f8af21819e
Simplify the interface to perfect_foresight_problem MEX 2019-07-09 14:33:17 +02:00
Sébastien Villemot 2ad6b31d76
Option endogenous_terminal_period is only available for stack_solve_algo=0 2019-07-04 18:37:27 +02:00
Sébastien Villemot 29396b0cda
Improve comment about oo_.dr.kstate 2019-07-04 18:37:23 +02:00
Sébastien Villemot 682eecf06e
Add “diff” and “flip” options to plot_shock_decomposition and initial_condition_decomposition
This is only the interface. The actual implementation and the documentation are
still missing.

Ref #1649

[skip ci]
2019-07-03 16:33:10 +02:00
Sébastien Villemot 7d9b2a557b
perfect_foresight_problem MEX: number of threads is now configurable 2019-06-27 17:00:12 +02:00
Sébastien Villemot 0eab36e823
sparse_hessian_times_B_kronecker_C MEX: by default, use maximum parallelization 2019-06-27 14:34:09 +02:00
Sébastien Villemot 7c39b12b7b
Always compile MEX files with OpenMP (when they can take advantage of it)
As a consequence, remove the --enable-openmp option of the configure script.
2019-06-25 17:26:17 +02:00
Sébastien Villemot 82cef48eb4
A_times_B_kronecker_C MEX: remove the OpenMP codepath
Testing shows that it is slower than the BLAS path.
2019-06-25 17:26:14 +02:00
Sébastien Villemot 5b591fac42
New perfect_foresight_problem MEX file
It constructs the stacked residuals and jacobian of the perfect foresight
problem.

It is an almost perfect replacement for the perfect_foresight_problem.m
routine, while being much more efficient.

Note however that the DLL never return complex numbers (it instead puts NaNs at
the place where there would have been complex). This may create problems for
some MOD files; the algorithms will need to be adapted to use a more
line-search method.
2019-06-24 17:53:59 +02:00
Stéphane Adjemian (Charybdis) 6ddd58d0b0 Added the possibility to invert (nonlinear) static models.
(cherry picked from commit 52b8c56da2)
2019-06-21 11:33:24 +02:00
Stéphane Adjemian (Charybdis) 766f752e7e Explicitly list input arguments.
Do not use varargin.

(cherry picked from commit 3fa584737d)
2019-06-21 11:33:00 +02:00
Stéphane Adjemian (Charybdis) 33873da95d Fixed bug.
Database was not updated with auxiliary variables.

(cherry picked from commit a64be8ff96)
2019-06-21 11:32:16 +02:00
Stéphane Adjemian (Charybdis) 84c24fc9e9 Use dprintf routine (in matlab/backward subfolder). 2019-06-21 11:27:44 +02:00
Stéphane Adjemian (Charybdis) 590fe96946 Added routine for simulating static models.
(cherry picked from commit b3af8c4a48)
2019-06-21 11:27:13 +02:00
Stéphane Adjemian (Charybdis) 0b363b0c71 Added new routine for disp(sprintf(...)).
(cherry picked from commit b32eee740d)
2019-06-21 11:26:50 +02:00
Stéphane Adjemian (Charybdis) c415508b63 Test if leaded variables exists when calling simul_backward_model routine.
(cherry picked from commit fec807ea17)
2019-06-21 11:26:29 +02:00
Stéphane Adjemian (Charybdis) 52b8c56da2 Added the possibility to invert (nonlinear) static models. 2019-06-21 11:21:34 +02:00
Stéphane Adjemian (Charybdis) 3fa584737d Explicitly list input arguments.
Do not use varargin.
2019-06-21 11:21:34 +02:00
Stéphane Adjemian (Charybdis) a64be8ff96 Fixed bug.
Database was not updated with auxiliary variables.
2019-06-21 11:21:34 +02:00
Stéphane Adjemian (Charybdis) dc251f53f4 Use dprintf routine (in matlab/backward subfolder). 2019-06-21 11:21:34 +02:00
Stéphane Adjemian (Charybdis) b3af8c4a48 Added routine for simulating static models. 2019-06-21 11:21:34 +02:00
Stéphane Adjemian (Charybdis) b32eee740d Added new routine for disp(sprintf(...)). 2019-06-21 11:21:34 +02:00
Stéphane Adjemian (Charybdis) fec807ea17 Test if leaded variables exists when calling simul_backward_model routine. 2019-06-21 11:21:34 +02:00
Sébastien Villemot aedc9fb2e4
Bugfix: perfect_foresight_setup safety check does not correctly index M_.lead_lag_incidence 2019-06-18 17:01:06 +02:00
Sébastien Villemot ec05451d1a
Remove symmetric elements in 3rd model derivatives 2019-06-17 16:18:07 +02:00
Sébastien Villemot a5c8ab3dbf
Fix path to Windows MEX files with recent MATLAB 2019-05-21 17:28:18 +02:00
Sébastien Villemot e79c618f38
No longer automatically add M-file substitutes for missing MEX files
However, keep the substitutes under matlab/missing/mex/, so that they can be
manually added should the need arise.
2019-05-21 12:37:35 +02:00
Sébastien Villemot e872f08cc5
Improve display of preprocessor arguments under Octave 2019-05-20 18:53:51 +02:00
Stéphane Adjemian (Charybdis) d4ca60ad28 Renames PAC/VAR expectation aux. variable.
Use _PE or _VE postfix instead of PE_ or VE_ prefix.
2019-05-20 14:44:28 +02:00
Sébastien Villemot c8e8f04a56
Add a replacement for strjoin (missing in MATLAB < R2013a)
As a consequence, revert commits 2e1f189724 and
5d05adeab6.
2019-05-20 12:47:41 +02:00
MichelJuillard 2977c9336e fix finding CPU's number when larger than 9 2019-05-20 09:57:10 +00:00
Stéphane Adjemian (Charybdis) 9be7568c94 Bug fix in growth neutrality correction.
An index was used instead of a parameter value when modifying the
correction (for handling models with non optimizing agents and/or models with
exogenous variables).
2019-05-17 12:27:15 +02:00
Stéphane Adjemian (Charybdis) 75945a62ac Fixed plot_contribution routine. 2019-05-14 22:12:33 +02:00
Sébastien Villemot 5a36d57b90
Perfect foresight: remove unused nnzJ argument in several stacked problem functions 2019-05-13 18:33:26 +02:00
Sébastien Villemot 088826a332
Perfect foresight: remove useless model evaluation 2019-05-13 18:33:26 +02:00
Houtan Bastani 0d85e08292
olsgibbs: save pnames in output 2019-05-10 14:50:44 +02:00
Houtan Bastani 5d05adeab6
remove another instance of strjoin 2019-05-08 15:58:10 +02:00
Houtan Bastani 2e1f189724
compatibility problem introduced in 9deab17d7424b25395110cefa7c4531b8fcde638: strjoin was introduced in R2013a 2019-05-08 15:36:32 +02:00
Houtan Bastani 9deab17d74
clean up rplot 2019-05-08 12:48:28 +02:00
Stéphane Adjemian (Charybdis) 317e713b26 Do not print parameters or varexo statements if plist or xlist are empty. 2019-05-04 08:52:51 +02:00
Stéphane Adjemian (Charybdis) 6ac751bf26 Updated preprocessor submodule. 2019-05-04 08:51:34 +02:00
Stéphane Adjemian (Charybdis) ede5b5e4c0 Ensure that the variable names are unique. 2019-05-03 16:15:54 +02:00
Stéphane Adjemian (Charybdis) ea68f849d5 Renamed routine. 2019-04-29 23:49:04 +02:00
Stéphane Adjemian (Charybdis) 0352ba1ff2 Handle equation with diff(diff(log())). 2019-04-29 23:45:15 +02:00
Stéphane Adjemian (Charybdis) d7042b8e80 Fixes for models without parameters or exogenous variables. 2019-04-27 18:08:19 +02:00
Stéphane Adjemian (Charybdis) 1a55cd7945 Write files only if necessary.
DO not print files for parameters declaration, exogenous variables declarations
or parameter values if the selected equations do not have parameters and/or
exogenous variables (typically accounting identities).
2019-04-26 18:46:34 +02:00
Stéphane Adjemian (Charybdis) 64dc44740b Efficiency change. 2019-04-26 16:20:45 +02:00
Stéphane Adjemian (Charybdis) 99edfc52ed Removed unused routine. 2019-04-26 15:55:48 +02:00
Stéphane Adjemian (Charybdis) 24cc67e585 Ensure that all perfect foresight solvers work with periods=1.
See #1205 and #1176.
2019-04-26 15:55:48 +02:00
Houtan Bastani fd61c049f9
remove unused return variable 2019-04-25 17:37:38 +02:00
Stéphane Adjemian ee891948e0 Moved IntegrationAgorithm under options_.ep.stochastic 2019-04-18 18:03:57 +02:00
Stéphane Adjemian 0ae1471afc Temporary workaround for missing option.
The implementation of scaled unscented transform has to be reworked.
2019-04-18 18:03:57 +02:00
Stéphane Adjemian c30bdf7bbe Fixed bug in stochastic extended path if model has lags or no leads. 2019-04-18 18:03:57 +02:00
Stéphane Adjemian 099bdc5450 Activited unit tests. 2019-04-18 18:03:57 +02:00
Stéphane Adjemian (Charybdis) 42140ff8fb Updated header. 2019-04-18 18:03:57 +02:00
Michel Juillard fa8ffbf3c3 fixed IntegrationAlgorithm ep option 2019-04-18 18:03:57 +02:00
Sébastien Villemot 1e92e308b9
Pruning is not available for order > 3
Ref #217
2019-04-15 18:50:16 +02:00
Sébastien Villemot e281f35213
Lift upper restriction on approximation order
Ref #217
2019-04-15 17:34:01 +02:00
Sébastien Villemot b1ba53ce05
dynare_simul_ DLL: adapt for an arbitrary approximation order
The last input argument is now a struct containing matrices g_0, g_1,…
Typically one can pass oo_.dr for this argument.

Ref #217
2019-04-15 17:34:01 +02:00
Sébastien Villemot 03ac8c8182
simult_: fix bug in error message 2019-04-12 18:26:30 +02:00
Sumudu Kankanamge aa66949a13 read JSON for stochastic simulations from GUI 2019-04-12 15:24:03 +02:00
Stéphane Adjemia (Scylla) 2d9e7a704b
Always write list of variables on more than one line.
(one line per variable)
2019-04-11 10:42:50 +02:00
Stéphane Adjemia (Scylla) fe4a15e417
Fixed bug if LHS no present in datablase.
Removed range on the left hand side.
2019-04-11 10:13:34 +02:00
Stéphane Adjemia (Scylla) ba46992e18
Bug fix (filter out lhs variable). 2019-04-10 10:40:41 +02:00
Sébastien Villemot b556290d60
k-order DLL: simplify and better document correspondence between Dynare and Dynare++ variable orderings 2019-04-10 09:23:32 +02:00
Sébastien Villemot efa1f39e71
k-order DLL: finally adapt for M_.{endo,exo}_names as cell arrays 2019-04-08 18:47:49 +02:00
Sébastien Villemot 86a607a4fc
k-order DLL: make the output arguments ready for arbitrary order 2019-04-08 18:47:49 +02:00
Stéphane Adjemia (Scylla) 8740355407
Rewrote evaluate routine.
- Can handle more than one equation.
 - Can handle identities.
 - Forbids dynamic equations.
 - Can handle following LHS y, diff(y), diff(diff(y)), log(y), diff(log(y)) and
   diff(diff(log(y))), other transformations will result in an error.
 - Added integration tests.

Remark 1. In the integration tests I compare the values returned by the
          evaluate routine with the values computed with the simulation
          routines. Normally the discrepancies should be small, but this is not
          the case when the endogenous variable appear under a log on the
          LHS. My current conclusion is that this has more to do with the
          cumulation of the accuracy errors in the simulation routine (a
          sequence of Newton algorithms) rather than with the evaluate routine.

Remark 2. Currently the only allowed nonlinear transformation on the LHS
          endogenous variable is the log. It is not difficult to generalise, at
          some point I had all the matlab functions allowed by Dynare,
          but this would complicate the code for not much gain.
2019-04-08 11:01:34 +02:00
Stéphane Adjemia (Scylla) de458022e5
Removed non existing subfolder from path. 2019-04-08 10:55:23 +02:00
Stéphane Adjemia (Scylla) 33c9b5f435
Cosmetic change.
Renamed the auxiliary variables for PAC/VAR expectations unrolled
expressions. Using shorter prefixes, PE_ and VE_ instead of pac_expectation and
var_expectations.
2019-04-02 22:57:45 +02:00
Stéphane Adjemia (Scylla) 8415ac48a0
Fixed bug (missing initialisation). 2019-04-02 21:31:45 +02:00
Sébastien Villemot 774e60f04c
options_.risky_steadystate is an (undocumented) boolean value
By the way, enable the option in example1_korder.mod (it does not work, but no
harm since it’s not in the testsuite).
2019-04-02 19:16:13 +02:00
Sébastien Villemot dd09264b03
k-order DLL: return unfolded matrices in 5th output argument
Thus we can remove unfolding code from k_order_pert.m.
2019-04-02 19:16:13 +02:00
Stéphane Adjemia (Scylla) aa499671ce
Added the possibility to rename an endogenous variable in equation. 2019-04-02 18:06:47 +02:00
Stéphane Adjemia (Scylla) 599ebc2614
Ensure that residuals are removed even if the variable is not preceeded by a + symbol. 2019-04-02 15:40:43 +02:00
Stéphane Adjemia (Scylla) a72ee7e919
Updated dseries submodule. 2019-04-02 14:30:42 +02:00
Stéphane Adjemia (Scylla) f39f57b9b5
Added parameter values in cherrypick/agregate routines. 2019-04-02 07:11:32 +02:00
Stéphane Adjemian (Charybdis) 5a519b812f
Updated comments. 2019-03-29 17:52:46 +01:00
Stéphane Adjemian (Charybdis) 7b7bca8bda
Generalised trend component model.
Added the possibility to associate more than one trend to an endogenous
variable. The number of error correction equations is longer required to be
equal to the number of trends.
2019-03-29 17:52:46 +01:00
Houtan Bastani d84d8af8a8
dyn_ols: fix typo 2019-03-29 15:23:19 +01:00
Houtan Bastani 256949a243
fix spacing 2019-03-29 15:23:03 +01:00
Stéphane Adjemian (Charybdis) 39041009ef
Added tag on auxiliary variable for PAC/VAR expectations. 2019-03-28 11:19:38 +01:00
Stéphane Adjemian (Charybdis) cb97ed8081
Added tag on equation defining PAC/VAR expectation unrolled expression. 2019-03-28 11:18:42 +01:00
Stéphane Adjemian (Charybdis) 6c58598568
Fixed bug if lhs is an expression instead of an endogenous variable. 2019-03-27 15:24:05 +01:00
Houtan Bastani 825a010a90
sur, pooled_fgls, pooled_ols: add date range option 2019-03-27 14:57:57 +01:00
Houtan Bastani 4dbbf4f02e
olsgibbs: add date range option 2019-03-27 11:04:00 +01:00
Sébastien Villemot e48177543b
intersect(…, 'stable') was introduced in MATLAB R2013a
Re-use the existing Octave replacement by making it MATLAB-compatible.
2019-03-26 18:53:51 +01:00
Sébastien Villemot d6c449ea70
narginchk was introduced in MATLAB R2011b 2019-03-26 18:53:51 +01:00
Sébastien Villemot 043058bd93
Compatibility fix for MATLAB ≤ R2012b
In those releases, the intersect function was behaving differently when given
arguments with different orientations.

Put the two arguments in the same orientation, to avoid the problem (recalling
that options_.varobs is column-oriented).
2019-03-26 18:53:43 +01:00
Sébastien Villemot 04323301a5
isdiag was introduced in MATLAB R2014a
Provide a replacement by reusing a similar function that was under
matlab/general/utilities/.
2019-03-26 16:50:06 +01:00
Houtan Bastani d242ed88a2
dyn_ols: add date range option 2019-03-26 15:04:16 +01:00
Houtan Bastani ae6c118e9e
fix bug when looking for parameter in unary op node 2019-03-26 11:06:31 +01:00
Houtan Bastani 9ab4c6f80d
ols-style equations: handle additive elements separated by + and -
use same algorithm as in preprocessor to facilitate future changes
2019-03-26 11:06:30 +01:00
Stéphane Adjemian (Charybdis) b98e0a2bbf
Added routine to agregate cherry-picked submodels. 2019-03-25 17:59:22 +01:00
Stéphane Adjemian (Charybdis) d4a1d4b46a
Added missing aux. variable (PAC/VAR expectation). 2019-03-25 17:42:01 +01:00
Stéphane Adjemian (Charybdis) e20a3ffa45
Export tags on endogenous and exogenous variables. 2019-03-22 14:39:40 +01:00
Stéphane Adjemian (Charybdis) ecfafc048b
Export equation tags if defined in original mod file. 2019-03-22 11:29:59 +01:00
Stéphane Adjemian (Charybdis) 07a40d2df4
Do not unroll expectations in the equation where they are used...
... But create an auxiliary variable with corresponding equation (where the
expectation are unrolled). Also separate the growth neutrality correction.
2019-03-21 17:33:07 +01:00
Sébastien Villemot 300b29dd95
License file: add files copyrighted by Tom Minka 2019-03-20 16:56:00 +01:00
Sébastien Villemot 44b50d41ae
Fix EOL convention of some files add in 666c9b8003 2019-03-20 16:49:52 +01:00
Willi Mutschler 666c9b8003 Improvement of Identification Toolbox
# Improvements
  * heavily commented (also auxiliary functions) and changed notation to make all the functions (hopefully) more readable and understandable, and hence, easier to debug
  * added identification criteria of Komunjer and Ng (2011, Econometrica) and Qu and Tkachenko (2012, Quantitative Economics)
  * tests can be turned of, i.e. nostrength disables identification strenght, noreducedform disables reduced form criteria, nomoments disables moment criteria, nospectrum disables spectrum criteria, nominimal disables minimal system criteria
  * all kronflags (analytic_derivation_mode) actually work in all functions
  * added functionality when there is correlation in Sigma_e and when one wants to consider corr parameters of exogenous shocks. Previously, (1) corr parameters were not allowed when calling identification and (2) when Sigma_e was not diagonal then the toolbox relied on numerical derviatives only (kronflag=-1). Now it is possible to handle both identification of corr parameters as well as correct analytical derivatives when Sigma_e is not diagonal with all possible kronflag values (-1|-2|0|1)
  * all plots and results are stored in the same folder named identification (previously there was another one with a capital I (Identification))

# Needed changes to preprocessor
  * add as field to options_ident:

    - tex (same as in options_)
    - nostrength (to turn off identification strength)
    - noreducedform (to turn off reduced form criteria)
    - nomoments (to turn off Iskrev's moment criteria)
    - nominimal (to turn off Komunjer and Ng's minimal system criteria)
    - nospectrum (to turn off Qu and Tkachenko's spectrum criteria)

  * add to options_ident:
    - normalize_jacobians (whether to normalize Jacobians or not)
    - grid_nbr (integer used to discretize the interval [-pi;pi]
    - tol_rank (tolerance level to compute ranks)
    - tol_deriv (tolerance level to select nonzero columns in derivatives)
    - tol_sv (tolerance level to select nonzero singular values)
    - ChecksViaSubsets (for debugging purposes, uses different function to find problematic parameter sets)
    - max_dim_subsets_groups (for debugging purposes, used for ChecksViaSubsets)

# Further Suggestions
  * Rename getH.m into getParamsDerivReducedForm.m to make the purpose of this function evident
  * Rename getJJ.m into getIdentificationJacobians.m to make the purpose of this function evident
  * Rename thet2tau.m into IdentificationNumericalObjectiveFunction.m to make the purpose of this function evident
  * dYss, d2Yss, dg1 should also include derivatives wrt to stderr and corr parameters (even though these are just 0), as in other functions (getJJ, dynare_estimation) we always add these manually
  * I am pretty sure the current handling in getH.m of dYss and d2Yss is not correct in the case of nonstationary variables (if g2static is nonempty), I added a warning message, as I am not sure whether this is ever used
  * It would be straigthforward to also include stderr and corr parameters of measurement errors (these is not possible right now). Should I do this?
  * Computations of d2A and d2Om need to be checked, as the differences between computing these with analytically (kronflag=0|1) or numerically kronflag=-1|-2 is really large for the example model of AnSchorfheide.
  * I am not sure how to best normalize Qu and Tkachenko's G matrix. It looks (and in the Gaussian case actually is) very similar to the Ahess matrix. So I used the same normalization rule as for the Ahess matrix. See comments in identification_checks.m. Anyone has a better idea? Please also check the models in test/identification/cgg for differences.
  * parts that are unclear to me are marked by a [@wmutschl] tag
  * the run time of tests/identification/as2007.mod increases from 0h01m27s to 0h03m46s (as Qu and Tkachenko's G matrix takes a little while to compute). One could decrease prior_mc=250 to prior_mc=150.

# New functions
  * commutation: Returns Magnus and Neudecker's commutation matrix that solves k*vec(X)=vec(X')
  * DerivABCD: Derivative of X(p)=A(p)*B(p)*C(p)*D(p) w.r.t to p as in Magnus and Neudecker (1999), p. 175
  * DeriveMinimalState: Derives minimal state space system by checking observability and controllability of all possible combinations of variables
  * duplication: Duplication Matrix (and its Moore Penrose Inverse) as defined by Magnus and Neudecker (2002), p.49, Dp*vec(X) = X
  * identification_checks_via_subsets: finds problematic parameters in a bruteforce fashion: It computes the rank of the Jacobians for all possible parameter combinations, if the rank condition is not fullfilled, these parameter sets are flagged as non-identifiable. For debugging purposes only, as the current identification_checks.m (based on nullspace and multicorrelation coefficients) is much faster

# Detailed changes in getH.m
  * functionality improvements

    - heavily commented (also auxiliary functions) and changed notation of several variables to make this function (hopefully) more readable and understandable, and hence, easier to debug
    - added functionality when Sigma_e is not diagonal and/or when one wants to consider corr parameters of exogenous shocks independent of the value of kronflag
    - fixed function for all values of kronflag, i.e. kronflag=-2|-1|0|1. Previosuly, only kronflag=-2|0 were working, all other kronflags ran into errors (-1 was actually never called , but was dealt with in getJJ.m). I assume kronflag=-1|1 was used only for debugging issues, but still was not working. I fixed this now, the function now works out-of-the-box for all kronflag values.
    - I also outlined and documented what each kronflag does and point to the corresponding equations in Ratto and Iskrev (2012) or Iskrev (2010,Appendix A)
    - the function additionally outputs the Jacobians of B and Sig, which are needed for Qu and Tkachenko (2012) and Komunjer and Ng (2011)'s criteria
    - Moved computation of Jacobian of tau=[ys;vec(A);vech(B * M_.Sigma_e * B')] into getJJ.m to have all Jacobians which are needed for identification in one place. That is, getH.m computes first and second parameter derivatives of (1) reduced-form solution, (2) steady state and (3) Jacobian of dynamic model, whereas getJJ computes and sets up all Jacobians which are used for identification purposes. Therefore, getH might be useful more generally for other purposes than identification. For instance, when doing a GMM estimation, we could use this function to compute analytically the gradient of the moments and provide this to the optimizer used in a GMM context.

  * output arguments

    - renamed `H` (Jacobian wrt parameters of tau=[ys;vec(A);vech(B * M_.Sigma_e * B')] into dTAU, (as H is very confusing, e.g. in other functions it is a Hessian, or Hss and H2ss is also just the steady state. Morevoer, tau is used in Iskrev(2010) for the steady state and reduced-form solution)
    - renamed `Hss` (Jacobian of steady state wrt model parameters only) into `dYss` (as H is very confusing here, see above)
    - renamed `H2ss` (Hessian wrt model parameters only of ys) into d2Yss (as H is very confusing, see above)
    - renamed `gp` into `dg1`, where g1 corresponds to the same variable as in dynamic model files. Note that in params_deriv files gp lacks the contribution of Jacobian wrt steady state and dg1 includes this using the implicit function theorem as outlined in Ratto and Iskrev (2012). Hence, dg1 denotes Jacobian wrt to parameters. It is useful and important to distinguish gp and dg1.
    - added `dB` (Jacobian wrt parameters of solution matrix B) needed for Qu and Tkachenko (2012) as well as Komunjer and Ng (2011)
    - added `dSig` (Jacobian wrt parameters of M_.Sigma_e) needed for Qu and Tkachenko (2012) as well as Komunjer and Ng (2011)

  * input arguments

    - renamed `indx` (index of model parameters to be checked) into `indpmodel`, the p makes it more clear that this is a parameter index
    - renamed `indexo` (index of stderr parameters) into `indpstderr`, the p makes it more clear that this is a parameter index
    - renamed `iv` (index of variables to consider) into `indvar`
    - Renamed `M_` to `M`, `estim_params_` to `estim_params`, `options_` to `options` , `oo_` to `oo` to visualize that these are local and not global variables
    - included `indpcorr` a matrix of indices for corr parameters to be checked

  * misc

    - distinguished clearly between variables in DR or in declaration order without overwriting this in between
    - added which functions call getH.m
    - updated copyright to 2010-2019

# Detailed changes in getJJ.m

  * functionality improvements

    - heavily commented and changed notation of several variables to make this function (hopefully) more readable and understandable, and hence, easier to debug
    - added functionality when Sigma_e is not diagonal and/or when one wants to consider corr parameters of exogenous shocks independent of the value of kronflag
    - tidied the function up, such that it sets up all Jacobians which are needed for identification, i.e. Iskrev's J matrix, Qu and Tkachenko (2012)'s G matrix, Komunjer and Ng (2011)'s D matrix, reduced-form solution (dTAU), linear rational expectation (i.e. Jacobian of steady state and dynamic model equations dLRE).
    - dTAU is now constructed in getJJ instead of in getH (see comment above in getH.m)
    - works for all kronflags, i.e. for numerical derivatives (-1 and -2) as well as for analytical derivatives based on kronecker products (1) or Sylvester Equations (0)
    - added functionality for stderr and corr parameters independent of the value of kronflag (previously this was only possible with numerical derivatives, now it works for all kronflags)
    - finds minimal state vector needed for Komunjer and Ng (2011)'s criteria (function `DeriveMinimalState.m`)
    - moved computations from kronflag=-1 (which were used in case of corr in shock block) into getH.m, so that getJJ now only sets up the Jacobians for LRE, Iskrev's J, Qu and Tkachenko's G and Komunjer and Ng's D, whereas getH computes the Jacobians (wrt parameters) of A, B, Sigma_e, Om, Yss and g1. This should simplify debugging as everything is now in one place and not in two

  * output arguments

    - renamed `JJ` into `J`
    - renamed `H` into `dTAU` (as H is very confusing, e.g. in other functions it is a Hessian, or Hss and H2ss is also just the steady state. Morevoer, tau is used in Iskrev(2010) for the steady state and reduced-form solution)
    - renamed `gp` into `dLRE`, as this corresponds to Jacobian of LRE=[Yss;vec(g1)] where g1 is the Jacobian of the dynamic model equations.
    - renamed `gam` into `MOMENTS`
    - added `G` for Qu and Tkachenko's Jacobian matrix G
    - added `D` for Komunjer and Ng's Jacobian matrix D
    - reordered output arguments

  * input arguments

    - added `options_ident` as input argument; hence, `kronflag`, `nlags` and `useautocorr` are removed from input arguments as these are available in options_ident
    - Renamed `M_` to `M`, `estim_params_` to `estim_params`, `options_` to `options` , `oo_` to `oo` to visualize that these are local and not global variables
    - renamed `indx` (index of model parameters to be checked) into `indpmodel`, the p makes it more clear that this is a parameter index
    - renamed `indexo` (index of stderr parameters) into `indpstderr`, the p makes it more clear that this is a parameter index
    - added `indpcorr` (index of corr parameters)
    - renamed `mf` (index of VAROBS variables) into `indvobs`

  * misc

    - updated copyright to 2010-2019
    - provided some comments on several ways to compute the spectral density matrix
    - added which functions call getJJ.m

# Detailed changes in thet2tau.m

  * functionality improvements

    - heavily commented and changed notation of several variables to make this function (hopefully) more readable and understandable, and hence, easier to debug
    - Added output option to compute spectral density matrix
    - Reorded and added some output option.
    - Instead of Om, `outputflag=0` computes B and Sigma_e, which are needed for Qu and Tkachenko as well as Komunjer and Ng. The Jacobian of Om is then computed in getJJ or getH from Jacobian of B and Sigma_e. Due to some testing with An and Schorfheide model this seems to be more accurate when I compare these with the analytical derivatives. The old behavior (computing Om directly) can be restored by setting `outputflag=-2`.
    - In total this function can now be used to compute numerically Jacobians of Yss, A, B, Sigma_e, Om, g1, autocovariogram and spectral density
    - Clearly distinguished (and commented) on the different outputs of this function.
    - Works for all types of parameters, ie. model, stderr and corr.
    - This function can now also be used when there is no estimated_params block. Previously, there was an error when there was no estimated_params block when calling `set_all_parameters` as this requires some information in `estim_params`. I fixed this by providing a temporary local estim_parms structure with the necessary information on model, stderr and corr parameters. In this way, this can be easily extended to also include stderr and corr parameters of measurement errors.

  * output arguments

    - renamed `tau` into `out`, as this function computes *very* different things (and not only tau) depending on an input flag

  * input arguments

    - renamed `flagmoments` into `outputflag` as this function does not only compute moments but many other things (see above)
    - renamed `indx` (index of model parameters to be checked) into `indpmodel`, the p makes it more clear that this is a parameter index
    - renamed `indexo` (index of stderr parameters) into `indpstderr`, the p makes it more clear that this is a parameter index
    - added `indpcorr` (index of corr parameters)
    - merged `mf` (index of observable variables) and `iv` (index of variables to consider) into a single index `indvar` as there is no need to distinguish between these two indices (they were never used in combination)
    - added `grid_nbr` (number of grid points to compute spectral density)
    - reordered input arguments

  * misc

    - added which functions call thet2tau
    - updated copyright to 2010-2019

# Detailed changes in identification_analysis.m

  * functionality improvements

    - heavily commented and changed notation of several variables to make this function (hopefully) more readable and understandable, and hence, easier to debug
    - renamed `dg1` to `dLRE`, renamed `vecg1` to `lre`, renamed `H` to `dTAU` (see comments above)
    - added option `numzerotolderiv` with default `1.e-8` used for non-zero derivatives
    - added option `numzerotolrank` with default `1.e-10` used for rank computations
    - added theoretical identification analysis based on Komunjer and Ng (2011)'s method, i.e. steady state and observational equivalent spectral densities within a minimal system
    - added theoretical identification analysis based on Qu and Tkachenko (2012)'s method, i.e. steady state and spectral density
    - restructured the code slightly to combined chunks of code that belong together on the one hand, and on the other hand to differentiate between the different criteria
    - added call to new function `identification_checks_via_subsets.m` (see above for the definition of the functionality) to perform identification checks differently as find it more intuitive and (most likely) more precise.

  * input arguments

    - removed `bounds` and `dataset_` as input argument, because these are not needed
    - moved `name_tex` and `tittxt` into `options_ident` as these two inputs are only used in `ident_bruteforce.m` and already set in `dynare_identification.m`

  * output arguments

    - added `ide_spectrum` structure for Qu and Tkachenko's criteria based on the spectral density
    - added `ide_minimal` structure for Komunjer and Ng's criteria based on the minimal state space system
    - reordered output arguments

  * misc

    - added which functions call identification_analysis
    - updated copyright to 2010-2019

# Detailed changes in dynare_identification.m

  * functionality improvements

    - heavily commented and changed notation of several variables to make this function (hopefully) more readable and understandable, and hence, easier to debug
    - included more options (and default values) which can be set by the user, i.e. nostrength, nomoments, nominimal, nospectrum, tex, tol_rank, tol_deriv, tol_sv, grid_nbr, ChecksViaSubsets, max_dim_subsets_group
    - instead of turning warnings globally off, I specified the relevant warnings for matlab and octave, respectively, off
    - improved the warning messages slightly
    - restructured chunks of code with respect to different criteria

  * output arguments

    - renamed arguments: TAU to STO_TAU, GAM to STO_MOMENTS, LRE to STO_LRE, gp to STO_si_dLRE, H to STO_si_dTAU, JJ to STO_si_J
    - added arguments: STO_G and STO_D for the two new criteria

  * misc

    - added which functions call dynare_identification
    - updated copyright to 2010-2019

# Detailed changes in identification_checks.m

  * functionality improvements

    - added checks for Komunjer and Ng's D matrix. Note that the Jacobian D=[D_par D_rest], where D_par depends on the parameters and D_rest does not. So this is taken into account.
    - added checks for Qu and Tkachenko's G matrix. Note that the Jacobian G is a Gram matrix with dimension nparam x nparam, similar to Ahess. So this is taken into account. I am, however, not sure whether this is correct regarding the multicorrelation and pairwise correlation coefficients. Please double check.
    - the rank is now actually computed at the prespecified tolerance level (and not Matlab's default level), so this is in accordance to the further analysis of problematic parameter sets

  * output arguments

    - added the rank to output arguments which is later also displayed
    - replaced the J or JJ part in the variable names with X as this function is used for all sorts of Jacobians, not only Iskrev's J

  * input arguments

    - renamed hess_flag to output_flag (and clearly outlined what each value does)
    - added tol_rank and tol_sv as input arguments, such that the tolerance levels can be changed by the user and not preimplemented in this function
    - added param_nbr which is needed for Komunjer and Ng's D matrix

  * misc

    - updated copyright to 2010-2019

# Detailed changes in ident_bruteforce.m

  * functionality improvements

    - the output directory was set with a capital I, i.e. Identification, whereas in all other functions we rely on lower case i, i.e. identification. I changed this to lower-cases, so everything is now saved in the same folder.
    - changed displayed strings to be more precise with the corresponding papers and notation

  * input arguments

    - renamed `n` to `max_dim_cova_group` to name options the same across functions
    - renamed `pnames_TeX` to `name_tex` to name options the same across functions
    - added `tol_deriv` as tolerance level which can be changed by the user

  * misc

    - Added some comments
    - updated copyright to 2010-2019

# Detailed changes in disp_identification.m

  * functionality improvements

    - this function displays the same output for different Jacobians, hence I put the common code into a for loop. This should simplify changing the output that is printed to the console. Previously the code was simply repeated for the different criteria and only the strings changed.
    - some settings relevant for the computation are now printed as a summary to the console
    - the tolerance level, rank and required rank are always displayed on the command line to see how many problematic sets there are and which tolerance level was used
    - the function is also able to display problematic parameters computed by the new function `identification_checks_via_subsets.m` which is only used for debugging.

  * input arguments

    - added `idespectrum` structure for analysis based on Qu and Tkachenko
    - added `ideminimal` structure for analysis based on Komunjer and Ng
    - added `options_ident` to have all necessary settings in a structure

  * misc

    - Added some comments
    - Removed uncommented code that was not used as this was redundant and probably an artifact of the original programming?!
    - updated copyright to 2010-2019

# Detailed changes in dsge_likelihood.m

  * misc

    - adjusted call of getH due to changes of input and output arguments
    - updated copyright to 2010-2019

# Detailed changes in cosn.m

  * misc

    - commented functionality, input and output arguments of this function
    - updated copyright to 2010-2019
2019-03-20 15:44:54 +00:00