MacroModelling.Beta
— MethodBeta(μ, σ, lower_bound, upper_bound; μσ)
Convenience wrapper for the truncated Beta distribution.
If μσ = true
then μ
and σ
are translated to the parameters of the distribution. Otherwise μ
and σ
represent the parameters of the distribution.
Arguments
μ
[Type:Real
]: mean or first parameter of the distributionσ
[Type:Real
]: standard deviation or first parameter of the distributionlower_bound
[Type:Real
]: truncation lower bound of the distributionupper_bound
[Type:Real
]: truncation upper bound of the distribution
Keyword Arguments
μσ
[Type:Bool
]: switch whether μ and σ represent the moments of the distribution or their parameters
MacroModelling.Beta
— MethodBeta(μ, σ; μσ)
Convenience wrapper for the Beta distribution.
If μσ = true
then μ
and σ
are translated to the parameters of the distribution. Otherwise μ
and σ
represent the parameters of the distribution.
Arguments
μ
[Type:Real
]: mean or first parameter of the distributionσ
[Type:Real
]: standard deviation or first parameter of the distribution
Keyword Arguments
μσ
[Type:Bool
]: switch whether μ and σ represent the moments of the distribution or their parameters
MacroModelling.Cauchy
— MethodCauchy(μ, σ, lower_bound, upper_bound)
Convenience wrapper for the truncated Cauchy distribution.
Arguments
μ
[Type:Real
]: location,σ
[Type:Real
]: scalelower_bound
[Type:Real
]: truncation lower bound of the distributionupper_bound
[Type:Real
]: truncation upper bound of the distribution
MacroModelling.Gamma
— MethodGamma(μ, σ, lower_bound, upper_bound; μσ)
Convenience wrapper for the truncated Inverse Gamma distribution.
If μσ = true
then μ
and σ
are translated to the parameters of the distribution. Otherwise μ
and σ
represent the parameters of the distribution.
Arguments
μ
[Type:Real
]: mean or first parameter of the distributionσ
[Type:Real
]: standard deviation or first parameter of the distributionlower_bound
[Type:Real
]: truncation lower bound of the distributionupper_bound
[Type:Real
]: truncation upper bound of the distribution
Keyword Arguments
μσ
[Type:Bool
]: switch whether μ and σ represent the moments of the distribution or their parameters
MacroModelling.Gamma
— MethodGamma(μ, σ; μσ)
Convenience wrapper for the Gamma distribution.
If μσ = true
then μ
and σ
are translated to the parameters of the distribution. Otherwise μ
and σ
represent the parameters of the distribution.
Arguments
μ
[Type:Real
]: mean or first parameter of the distribution,σ
[Type:Real
]: standard deviation or first parameter of the distribution
Keyword Arguments
μσ
[Type:Bool
]: switch whether μ and σ represent the moments of the distribution or their parameters
MacroModelling.InverseGamma
— MethodInverseGamma(μ, σ, lower_bound, upper_bound; μσ)
Convenience wrapper for the truncated Inverse Gamma distribution.
If μσ = true
then μ
and σ
are translated to the parameters of the distribution. Otherwise μ
and σ
represent the parameters of the distribution.
Arguments
μ
[Type:Real
]: mean or first parameter of the distributionσ
[Type:Real
]: standard deviation or first parameter of the distributionlower_bound
[Type:Real
]: truncation lower bound of the distributionupper_bound
[Type:Real
]: truncation upper bound of the distribution
Keyword Arguments
μσ
[Type:Bool
]: switch whether μ and σ represent the moments of the distribution or their parameters
MacroModelling.InverseGamma
— MethodInverseGamma(μ, σ; μσ)
Convenience wrapper for the Inverse Gamma distribution.
If μσ = true
then μ
and σ
are translated to the parameters of the distribution. Otherwise μ
and σ
represent the parameters of the distribution.
Arguments
μ
[Type:Real
]: mean or first parameter of the distributionσ
[Type:Real
]: standard deviation or first parameter of the distribution
Keyword Arguments
μσ
[Type:Bool
]: switch whether μ and σ represent the moments of the distribution or their parameters
MacroModelling.Normal
— MethodNormal(μ, σ, lower_bound, upper_bound)
Convenience wrapper for the truncated Normal distribution.
Arguments
μ
[Type:Real
]: mean of the distributionσ
[Type:Real
]: standard deviation of the distributionlower_bound
[Type:Real
]: truncation lower bound of the distributionupper_bound
[Type:Real
]: truncation upper bound of the distribution
MacroModelling.SS
— FunctionSee get_steady_state
MacroModelling.SSS
— MethodWrapper for get_steady_state
with stochastic = true
.
MacroModelling.autocorr
— FunctionMacroModelling.check_residuals
— FunctionMacroModelling.corr
— FunctionSee get_correlation
MacroModelling.cov
— FunctionWrapper for get_moments
with covariance = true
and non_stochastic_steady_state = false, variance = false, standard_deviation = false
.
MacroModelling.export_dynare
— FunctionSee write_mod_file
MacroModelling.export_mod_file
— FunctionSee write_mod_file
MacroModelling.export_model
— FunctionSee write_mod_file
MacroModelling.export_to_dynare
— FunctionSee write_mod_file
MacroModelling.fevd
— FunctionMacroModelling.get_IRF
— FunctionSee get_irf
MacroModelling.get_SS
— FunctionSee get_steady_state
MacroModelling.get_SSS
— MethodWrapper for get_steady_state
with stochastic = true
.
MacroModelling.get_autocorr
— FunctionMacroModelling.get_autocorrelation
— Methodget_autocorrelation(
𝓂;
autocorrelation_periods,
parameters,
algorithm,
quadratic_matrix_equation_algorithm,
sylvester_algorithm,
lyapunov_algorithm,
verbose,
tol
)
Return the autocorrelations of endogenous variables using the first, pruned second, or pruned third order perturbation solution.
If occasionally binding constraints are present in the model, they are not taken into account here.
Arguments
𝓂
: object created by@model
and@parameters
.
Keyword Arguments
autocorrelation_periods
[Default:1:5
, Type:UnitRange{Int}
]: periods for which to return the autocorrelationparameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.algorithm
[Default::first_order
, Type:Symbol
]: algorithm to solve for the dynamics of the model. Available algorithms::first_order
,:second_order
,:pruned_second_order
,:third_order
,:pruned_third_order
quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
lyapunov_algorithm
[Default::doubling
, Type:Symbol
]: algorithm to solve Lyapunov equation (A * X * A' + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:gmres
sylvester_algorithm
[Default: function of size of problem, with smaller problems::doubling
, and larger problems::bicgstab
, Type:Union{Symbol,Vector{Symbol},Tuple{Symbol,Vararg{Symbol}}}
]: algorithm to solve Sylvester equation (A * X * B + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:dqgmres
,:gmres
. Input argument can be up to two elements in aVector
orTuple
. The first (second) element corresponds to the second (third) order perturbation solutions' Sylvester equation. If only one element is provided it corresponds to the second order perturbation solutions' Sylvester equation.tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
KeyedArray
with variables in rows and autocorrelation periods in columns.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z[1]) * k[0]^(α - 1) + (1 - δ))
c[0] + k[0] = (1 - δ) * k[-1] + q[0]
q[0] = exp(z[0]) * k[-1]^α
z[0] = ρ * z[-1] + std_z * eps_z[x]
end
@parameters RBC begin
std_z = 0.01
ρ = 0.2
δ = 0.02
α = 0.5
β = 0.95
end
get_autocorrelation(RBC)
# output
2-dimensional KeyedArray(NamedDimsArray(...)) with keys:
↓ Variables ∈ 4-element Vector{Symbol}
→ Autocorrelation_periods ∈ 5-element UnitRange{Int64}
And data, 4×5 Matrix{Float64}:
(1) (2) (3) (4) (5)
(:c) 0.966974 0.927263 0.887643 0.849409 0.812761
(:k) 0.971015 0.931937 0.892277 0.853876 0.817041
(:q) 0.32237 0.181562 0.148347 0.136867 0.129944
(:z) 0.2 0.04 0.008 0.0016 0.00032
MacroModelling.get_calibrated_parameters
— Methodget_calibrated_parameters(𝓂; values)
Returns the parameters (and optionally the values) which are determined by a calibration equation.
Arguments
𝓂
: object created by@model
and@parameters
.
Keyword Arguments
values
[Default:false
, Type:Bool
]: return the values together with the parameter names.
Returns
Vector{String}
of the calibrated parameters orVector{Pair{String, Float64}}
of the calibrated parameters and values ifvalues
is set totrue
.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z{TFP}[1]) * k[0]^(α - 1) + (1 - exp(z{δ}[1]) * δ))
c[0] + k[0] = (1 - exp(z{δ}[0])δ) * k[-1] + q[0]
q[0] = exp(z{TFP}[0]) * k[-1]^α
for shock in [TFP, δ]
z{shock}[0] = ρ{shock} * z{shock}[-1] + σ{shock} * (eps{shock}[x] + eps_news{shock}[x-1])
end
Δc_share[0] = log(c[0]/q[0]) - log(c[-1]/q[-1])
Δk_4q[0] = log(k[0]) - log(k[-4])
end
@parameters RBC begin
σ = 0.01
ρ = 0.2
capital_to_output = 1.5
k[ss] / (4 * q[ss]) = capital_to_output | δ
alpha = .5
α = alpha
β = 0.95
end
get_calibrated_parameters(RBC)
# output
1-element Vector{String}:
"δ"
MacroModelling.get_calibration_equation_parameters
— Methodget_calibration_equation_parameters(𝓂)
Returns the parameters used in calibration equations which are not used in the equations of the model (see capital_to_output
in Examples
).
Arguments
𝓂
: object created by@model
and@parameters
.
Returns
Vector{String}
of the parameters.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z{TFP}[1]) * k[0]^(α - 1) + (1 - exp(z{δ}[1]) * δ))
c[0] + k[0] = (1 - exp(z{δ}[0])δ) * k[-1] + q[0]
q[0] = exp(z{TFP}[0]) * k[-1]^α
for shock in [TFP, δ]
z{shock}[0] = ρ{shock} * z{shock}[-1] + σ{shock} * (eps{shock}[x] + eps_news{shock}[x-1])
end
Δc_share[0] = log(c[0]/q[0]) - log(c[-1]/q[-1])
Δk_4q[0] = log(k[0]) - log(k[-4])
end
@parameters RBC begin
σ = 0.01
ρ = 0.2
capital_to_output = 1.5
k[ss] / (4 * q[ss]) = capital_to_output | δ
alpha = .5
α = alpha
β = 0.95
end
get_calibration_equation_parameters(RBC)
# output
1-element Vector{String}:
"capital_to_output"
MacroModelling.get_calibration_equations
— Methodget_calibration_equations(𝓂)
Return the calibration equations declared in the @parameters
block. Calibration equations are additional equations which are part of the non-stochastic steady state problem. The additional equation is matched with a calibated parameter which is part of the equations declared in the @model
block and can be retrieved with: get_calibrated_parameters
In case programmatic model writing was used this function returns the parsed equations (see loop over shocks in example).
Note that the ouput assumes the equations are equal to 0. As in, k / (q * 4) - capital_to_output
implies k / (q * 4) - capital_to_output = 0
and therefore: k / (q * 4) = capital_to_output
.
Arguments
𝓂
: object created by@model
and@parameters
.
Returns
Vector{String}
of the calibration equations.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z{TFP}[1]) * k[0]^(α - 1) + (1 - exp(z{δ}[1]) * δ))
c[0] + k[0] = (1 - exp(z{δ}[0])δ) * k[-1] + q[0]
q[0] = exp(z{TFP}[0]) * k[-1]^α
for shock in [TFP, δ]
z{shock}[0] = ρ{shock} * z{shock}[-1] + σ{shock} * (eps{shock}[x] + eps_news{shock}[x-1])
end
Δc_share[0] = log(c[0]/q[0]) - log(c[-1]/q[-1])
Δk_4q[0] = log(k[0]) - log(k[-4])
end
@parameters RBC begin
σ = 0.01
ρ = 0.2
capital_to_output = 1.5
k[ss] / (4 * q[ss]) = capital_to_output | δ
alpha = .5
α = alpha
β = 0.95
end
get_calibration_equations(RBC)
# output
1-element Vector{String}:
"k / (q * 4) - capital_to_output"
MacroModelling.get_conditional_forecast
— Methodget_conditional_forecast(
𝓂,
conditions;
shocks,
initial_state,
periods,
parameters,
variables,
conditions_in_levels,
algorithm,
levels,
verbose,
tol,
quadratic_matrix_equation_algorithm,
sylvester_algorithm,
lyapunov_algorithm
)
Return the conditional forecast given restrictions on endogenous variables and shocks (optional). By default, the values represent absolute deviations from the relevant steady state (see levels
for details). The non-stochastic steady state (NSSS) is relevant for first order solutions and the stochastic steady state for higher order solutions. A constrained minimisation problem is solved to find the combination of shocks with the smallest squared magnitude fulfilling the conditions.
If occasionally binding constraints are present in the model, they are not taken into account here.
Arguments
𝓂
: object created by@model
and@parameters
.conditions
[Type:Union{Matrix{Union{Nothing,Float64}}, SparseMatrixCSC{Float64}, KeyedArray{Union{Nothing,Float64}}, KeyedArray{Float64}}
]: conditions for which to find the corresponding shocks. The input can have multiple formats, but for all types of entries the first dimension corresponds to variables and the second dimension to the number of periods. The conditions can be specified using a matrix of typeMatrix{Union{Nothing,Float64}}
. In this case the conditions are matrix elements of typeFloat64
and all remaining (free) entries arenothing
. You can also use aSparseMatrixCSC{Float64}
as input. In this case only non-zero elements are taken as conditions. Note that you cannot condition variables to be zero using aSparseMatrixCSC{Float64}
as input (use other input formats to do so). Another possibility to input conditions is by using aKeyedArray
. You can use aKeyedArray{Union{Nothing,Float64}}
where, similar toMatrix{Union{Nothing,Float64}}
, all entries of typeFloat64
are recognised as conditions and all other entries have to benothing
. Furthermore, you can specify in the primary axis a subset of variables (of typeSymbol
orString
) for which you specify conditions and all other variables are considered free. The same goes for the case when you useKeyedArray{Float64}}
as input, whereas in this case the conditions for the specified variables bind for all periods specified in theKeyedArray
, because there are nonothing
entries permitted with this type.
Keyword Arguments
shocks
[Default:nothing
, Type:Union{Matrix{Union{Nothing,Float64}}, SparseMatrixCSC{Float64}, KeyedArray{Union{Nothing,Float64}}, KeyedArray{Float64}, Nothing}
]: known values of shocks. This argument allows the user to include certain shock values. By entering restrictions on the shocks in this way the problem to match the conditions on endogenous variables is restricted to the remaining free shocks in the repective period. The input can have multiple formats, but for all types of entries the first dimension corresponds to shocks and the second dimension to the number of periods.shocks
can be specified using a matrix of typeMatrix{Union{Nothing,Float64}}
. In this case the shocks are matrix elements of typeFloat64
and all remaining (free) entries arenothing
. You can also use aSparseMatrixCSC{Float64}
as input. In this case only non-zero elements are taken as certain shock values. Note that you cannot condition shocks to be zero using aSparseMatrixCSC{Float64}
as input (use other input formats to do so). Another possibility to input known shocks is by using aKeyedArray
. You can use aKeyedArray{Union{Nothing,Float64}}
where, similar toMatrix{Union{Nothing,Float64}}
, all entries of typeFloat64
are recognised as known shocks and all other entries have to benothing
. Furthermore, you can specify in the primary axis a subset of shocks (of typeSymbol
orString
) for which you specify values and all other shocks are considered free. The same goes for the case when you useKeyedArray{Float64}}
as input, whereas in this case the values for the specified shocks bind for all periods specified in theKeyedArray
, because there are nonothing
entries permitted with this type.initial_state
[Default:[0.0]
, Type:Union{Vector{Vector{Float64}},Vector{Float64}}
]: The initial state defines the starting point for the model. In the case of pruned solution algorithms the initial state can be given as multiple state vectors (Vector{Vector{Float64}}
). In this case the initial state must be given in deviations from the non-stochastic steady state. In all other cases the initial state must be given in levels. If a pruned solution algorithm is selected andinitial_state
is aVector{Float64}
then it impacts the first order initial state vector only. The state includes all variables as well as exogenous variables in leads or lags if present.get_irf(𝓂, shocks = :none, variables = :all, periods = 1)
returns aKeyedArray
with all variables.periods
[Default:40
, Type:Int
]: the total number of periods is the sum of the argument provided here and the maximum of periods of the shocks or conditions argument.parameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.variables
[Default::all_excluding_obc
]: variables for which to show the results. Inputs can be a variable name passed on as either aSymbol
orString
(e.g.:y
or "y"), orTuple
,Matrix
orVector
ofString
orSymbol
. Any variables not part of the model will trigger a warning.:all_excluding_auxilliary_and_obc
contains all shocks less those related to auxilliary variables and related to occasionally binding constraints (obc).:all_excluding_obc
contains all shocks less those related to auxilliary variables.:all
will contain all variables.conditions_in_levels
[Default:true
, Type:Bool
]: indicator whether the conditions are provided in levels. Iftrue
the input to the conditions argument will have the non-stochastic steady state substracted.levels
[Default:false
, Type:Bool
]: return levels or absolute deviations from the relevant steady state corresponding to the solution algorithm (e.g. stochastic steady state for higher order solution algorithms).algorithm
[Default::first_order
, Type:Symbol
]: algorithm to solve for the dynamics of the model. Available algorithms::first_order
,:second_order
,:pruned_second_order
,:third_order
,:pruned_third_order
quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
sylvester_algorithm
[Default: function of size of problem, with smaller problems::doubling
, and larger problems::bicgstab
, Type:Union{Symbol,Vector{Symbol},Tuple{Symbol,Vararg{Symbol}}}
]: algorithm to solve Sylvester equation (A * X * B + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:dqgmres
,:gmres
. Input argument can be up to two elements in aVector
orTuple
. The first (second) element corresponds to the second (third) order perturbation solutions' Sylvester equation. If only one element is provided it corresponds to the second order perturbation solutions' Sylvester equation.lyapunov_algorithm
[Default::doubling
, Type:Symbol
]: algorithm to solve Lyapunov equation (A * X * A' + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:gmres
tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
KeyedArray
with variables and shocks in rows, and periods in columns.
Examples
using MacroModelling
using SparseArrays, AxisKeys
@model RBC_CME begin
y[0]=A[0]*k[-1]^alpha
1/c[0]=beta*1/c[1]*(alpha*A[1]*k[0]^(alpha-1)+(1-delta))
1/c[0]=beta*1/c[1]*(R[0]/Pi[+1])
R[0] * beta =(Pi[0]/Pibar)^phi_pi
A[0]*k[-1]^alpha=c[0]+k[0]-(1-delta*z_delta[0])*k[-1]
z_delta[0] = 1 - rho_z_delta + rho_z_delta * z_delta[-1] + std_z_delta * delta_eps[x]
A[0] = 1 - rhoz + rhoz * A[-1] + std_eps * eps_z[x]
end
@parameters RBC_CME begin
alpha = .157
beta = .999
delta = .0226
Pibar = 1.0008
phi_pi = 1.5
rhoz = .9
std_eps = .0068
rho_z_delta = .9
std_z_delta = .005
end
# c is conditioned to deviate by 0.01 in period 1 and y is conditioned to deviate by 0.02 in period 2
conditions = KeyedArray(Matrix{Union{Nothing,Float64}}(undef,2,2),Variables = [:c,:y], Periods = 1:2)
conditions[1,1] = .01
conditions[2,2] = .02
# in period 2 second shock (eps_z) is conditioned to take a value of 0.05
shocks = Matrix{Union{Nothing,Float64}}(undef,2,1)
shocks[1,1] = .05
get_conditional_forecast(RBC_CME, conditions, shocks = shocks, conditions_in_levels = false)
# output
2-dimensional KeyedArray(NamedDimsArray(...)) with keys:
↓ Variables_and_shocks ∈ 9-element Vector{Symbol}
→ Periods ∈ 42-element UnitRange{Int64}
And data, 9×42 Matrix{Float64}:
(1) (2) … (41) (42)
(:A) 0.0313639 0.0134792 0.000221372 0.000199235
(:Pi) 0.000780257 0.00020929 -0.000146071 -0.000140137
(:R) 0.00117156 0.00031425 -0.000219325 -0.000210417
(:c) 0.01 0.00600605 0.00213278 0.00203751
(:k) 0.034584 0.0477482 … 0.0397631 0.0380482
(:y) 0.0446375 0.02 0.00129544 0.001222
(:z_delta) 0.00025 0.000225 3.69522e-6 3.3257e-6
(:delta_eps) 0.05 0.0 0.0 0.0
(:eps_z) 4.61234 -2.16887 0.0 0.0
# The same can be achieved with the other input formats:
# conditions = Matrix{Union{Nothing,Float64}}(undef,7,2)
# conditions[4,1] = .01
# conditions[6,2] = .02
# using SparseArrays
# conditions = spzeros(7,2)
# conditions[4,1] = .01
# conditions[6,2] = .02
# shocks = KeyedArray(Matrix{Union{Nothing,Float64}}(undef,1,1),Variables = [:delta_eps], Periods = [1])
# shocks[1,1] = .05
# using SparseArrays
# shocks = spzeros(2,1)
# shocks[1,1] = .05
MacroModelling.get_conditional_variance_decomposition
— Methodget_conditional_variance_decomposition(
𝓂;
periods,
parameters,
verbose,
tol,
quadratic_matrix_equation_algorithm,
lyapunov_algorithm
)
Return the conditional variance decomposition of endogenous variables with regards to the shocks using the linearised solution.
If occasionally binding constraints are present in the model, they are not taken into account here.
Arguments
𝓂
: object created by@model
and@parameters
.
Keyword Arguments
periods
[Default:[1:20...,Inf]
, Type:Union{Vector{Int},Vector{Float64},UnitRange{Int64}}
]: vector of periods for which to calculate the conditional variance decomposition. If the vector conatinsInf
, also the unconditional variance decomposition is calculated (same output asget_variance_decomposition
).parameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
lyapunov_algorithm
[Default::doubling
, Type:Symbol
]: algorithm to solve Lyapunov equation (A * X * A' + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:gmres
tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
KeyedArray
with variables in rows, shocks in columns, and periods as the third dimension.
Examples
using MacroModelling
@model RBC_CME begin
y[0]=A[0]*k[-1]^alpha
1/c[0]=beta*1/c[1]*(alpha*A[1]*k[0]^(alpha-1)+(1-delta))
1/c[0]=beta*1/c[1]*(R[0]/Pi[+1])
R[0] * beta =(Pi[0]/Pibar)^phi_pi
A[0]*k[-1]^alpha=c[0]+k[0]-(1-delta*z_delta[0])*k[-1]
z_delta[0] = 1 - rho_z_delta + rho_z_delta * z_delta[-1] + std_z_delta * delta_eps[x]
A[0] = 1 - rhoz + rhoz * A[-1] + std_eps * eps_z[x]
end
@parameters RBC_CME begin
alpha = .157
beta = .999
delta = .0226
Pibar = 1.0008
phi_pi = 1.5
rhoz = .9
std_eps = .0068
rho_z_delta = .9
std_z_delta = .005
end
get_conditional_variance_decomposition(RBC_CME)
# output
3-dimensional KeyedArray(NamedDimsArray(...)) with keys:
↓ Variables ∈ 7-element Vector{Symbol}
→ Shocks ∈ 2-element Vector{Symbol}
◪ Periods ∈ 21-element Vector{Float64}
And data, 7×2×21 Array{Float64, 3}:
[showing 3 of 21 slices]
[:, :, 1] ~ (:, :, 1.0):
(:delta_eps) (:eps_z)
(:A) 0.0 1.0
(:Pi) 0.00158668 0.998413
(:R) 0.00158668 0.998413
(:c) 0.0277348 0.972265
(:k) 0.00869568 0.991304
(:y) 0.0 1.0
(:z_delta) 1.0 0.0
[:, :, 11] ~ (:, :, 11.0):
(:delta_eps) (:eps_z)
(:A) 5.88653e-32 1.0
(:Pi) 0.0245641 0.975436
(:R) 0.0245641 0.975436
(:c) 0.0175249 0.982475
(:k) 0.00869568 0.991304
(:y) 7.63511e-5 0.999924
(:z_delta) 1.0 0.0
[:, :, 21] ~ (:, :, Inf):
(:delta_eps) (:eps_z)
(:A) 9.6461e-31 1.0
(:Pi) 0.0156771 0.984323
(:R) 0.0156771 0.984323
(:c) 0.0134672 0.986533
(:k) 0.00869568 0.991304
(:y) 0.000313462 0.999687
(:z_delta) 1.0 0.0
MacroModelling.get_corr
— FunctionSee get_correlation
MacroModelling.get_correlation
— Methodget_correlation(
𝓂;
parameters,
algorithm,
quadratic_matrix_equation_algorithm,
sylvester_algorithm,
lyapunov_algorithm,
verbose,
tol
)
Return the correlations of endogenous variables using the first, pruned second, or pruned third order perturbation solution.
If occasionally binding constraints are present in the model, they are not taken into account here.
Arguments
𝓂
: object created by@model
and@parameters
.
Keyword Arguments
parameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.algorithm
[Default::first_order
, Type:Symbol
]: algorithm to solve for the dynamics of the model. Available algorithms::first_order
,:second_order
,:pruned_second_order
,:third_order
,:pruned_third_order
quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
lyapunov_algorithm
[Default::doubling
, Type:Symbol
]: algorithm to solve Lyapunov equation (A * X * A' + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:gmres
sylvester_algorithm
[Default: function of size of problem, with smaller problems::doubling
, and larger problems::bicgstab
, Type:Union{Symbol,Vector{Symbol},Tuple{Symbol,Vararg{Symbol}}}
]: algorithm to solve Sylvester equation (A * X * B + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:dqgmres
,:gmres
. Input argument can be up to two elements in aVector
orTuple
. The first (second) element corresponds to the second (third) order perturbation solutions' Sylvester equation. If only one element is provided it corresponds to the second order perturbation solutions' Sylvester equation.tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
KeyedArray
with variables in rows and columns.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z[1]) * k[0]^(α - 1) + (1 - δ))
c[0] + k[0] = (1 - δ) * k[-1] + q[0]
q[0] = exp(z[0]) * k[-1]^α
z[0] = ρ * z[-1] + std_z * eps_z[x]
end
@parameters RBC begin
std_z = 0.01
ρ = 0.2
δ = 0.02
α = 0.5
β = 0.95
end
get_correlation(RBC)
# output
2-dimensional KeyedArray(NamedDimsArray(...)) with keys:
↓ Variables ∈ 4-element Vector{Symbol}
→ 𝑉𝑎𝑟𝑖𝑎𝑏𝑙𝑒𝑠 ∈ 4-element Vector{Symbol}
And data, 4×4 Matrix{Float64}:
(:c) (:k) (:q) (:z)
(:c) 1.0 0.999812 0.550168 0.314562
(:k) 0.999812 1.0 0.533879 0.296104
(:q) 0.550168 0.533879 1.0 0.965726
(:z) 0.314562 0.296104 0.965726 1.0
MacroModelling.get_cov
— FunctionWrapper for get_moments
with covariance = true
and non_stochastic_steady_state = false, variance = false, standard_deviation = false
.
MacroModelling.get_covariance
— MethodWrapper for get_moments
with covariance = true
and non_stochastic_steady_state = false, variance = false, standard_deviation = false
.
MacroModelling.get_dynamic_auxilliary_variables
— Methodget_dynamic_auxilliary_variables(𝓂)
Returns the auxilliary variables, without timing subscripts, part of the augmented system of equations describing the model dynamics. Augmented means that, in case of variables with leads or lags larger than 1, or exogenous shocks with leads or lags, the system is augemented by auxilliary variables containing variables or shocks in lead or lag. Because the original equations included variables with leads or lags certain expression cannot be negative (e.g. given log(c/q)
an auxilliary variable is created for c/q
).
See get_dynamic_equations
for more details on the auxilliary variables and equations.
Arguments
𝓂
: object created by@model
and@parameters
.
Returns
Vector{String}
of the auxilliary parameters.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z{TFP}[1]) * k[0]^(α - 1) + (1 - exp(z{δ}[1]) * δ))
c[0] + k[0] = (1 - exp(z{δ}[0])δ) * k[-1] + q[0]
q[0] = exp(z{TFP}[0]) * k[-1]^α
for shock in [TFP, δ]
z{shock}[0] = ρ{shock} * z{shock}[-1] + σ{shock} * (eps{shock}[x] + eps_news{shock}[x-1])
end
Δc_share[0] = log(c[0]/q[0]) - log(c[-1]/q[-1])
Δk_4q[0] = log(k[0]) - log(k[-4])
end
@parameters RBC begin
σ = 0.01
ρ = 0.2
capital_to_output = 1.5
k[ss] / (4 * q[ss]) = capital_to_output | δ
alpha = .5
α = alpha
β = 0.95
end
get_dynamic_auxilliary_variables(RBC)
# output
3-element Vector{String}:
"kᴸ⁽⁻²⁾"
"kᴸ⁽⁻³⁾"
"kᴸ⁽⁻¹⁾"
MacroModelling.get_dynamic_equations
— Methodget_dynamic_equations(𝓂)
Return the augmented system of equations describing the model dynamics. Augmented means that, in case of variables with leads or lags larger than 1, or exogenous shocks with leads or lags, the system is augemented by auxilliary equations containing variables in lead or lag. The augmented system features only variables which are in the present [0]
, future [1]
, or past [-1]
. For example, Δk_4q[0] = log(k[0]) - log(k[-3])
contains k[-3]
. By introducing 2 auxilliary variables (kᴸ⁽⁻¹⁾
and kᴸ⁽⁻²⁾
with ᴸ
being the lead/lag operator) and augmenting the system (kᴸ⁽⁻²⁾[0] = kᴸ⁽⁻¹⁾[-1]
and kᴸ⁽⁻¹⁾[0] = k[-1]
) we can ensure that the timing is smaller than 1 in absolute terms: Δk_4q[0] - (log(k[0]) - log(kᴸ⁽⁻²⁾[-1]))
.
In case programmatic model writing was used this function returns the parsed equations (see loop over shocks in example).
Note that the ouput assumes the equations are equal to 0. As in, kᴸ⁽⁻¹⁾[0] - k[-1]
implies kᴸ⁽⁻¹⁾[0] - k[-1] = 0
and therefore: kᴸ⁽⁻¹⁾[0] = k[-1]
.
Arguments
𝓂
: object created by@model
and@parameters
.
Returns
Vector{String}
of the dynamic model equations.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z{TFP}[1]) * k[0]^(α - 1) + (1 - exp(z{δ}[1]) * δ))
c[0] + k[0] = (1 - exp(z{δ}[0])δ) * k[-1] + q[0]
q[0] = exp(z{TFP}[0]) * k[-1]^α
for shock in [TFP, δ]
z{shock}[0] = ρ{shock} * z{shock}[-1] + σ{shock} * (eps{shock}[x] + eps_news{shock}[x-1])
end
Δc_share[0] = log(c[0]/q[0]) - log(c[-1]/q[-1])
Δk_4q[0] = log(k[0]) - log(k[-4])
end
@parameters RBC begin
σ = 0.01
ρ = 0.2
capital_to_output = 1.5
k[ss] / (4 * q[ss]) = capital_to_output | δ
alpha = .5
α = alpha
β = 0.95
end
get_dynamic_equations(RBC)
# output
12-element Vector{String}:
"1 / c[0] - (β / c[1]) * (α * ex" ⋯ 25 bytes ⋯ " - 1) + (1 - exp(z{δ}[1]) * δ))"
"(c[0] + k[0]) - ((1 - exp(z{δ}[0]) * δ) * k[-1] + q[0])"
"q[0] - exp(z{TFP}[0]) * k[-1] ^ α"
"eps_news{TFP}[0] - eps_news{TFP}[x]"
"z{TFP}[0] - (ρ{TFP} * z{TFP}[-1] + σ{TFP} * (eps{TFP}[x] + eps_news{TFP}[-1]))"
"eps_news{δ}[0] - eps_news{δ}[x]"
"z{δ}[0] - (ρ{δ} * z{δ}[-1] + σ{δ} * (eps{δ}[x] + eps_news{δ}[-1]))"
"Δc_share[0] - (log(c[0] / q[0]) - log(c[-1] / q[-1]))"
"kᴸ⁽⁻³⁾[0] - kᴸ⁽⁻²⁾[-1]"
"kᴸ⁽⁻²⁾[0] - kᴸ⁽⁻¹⁾[-1]"
"kᴸ⁽⁻¹⁾[0] - k[-1]"
"Δk_4q[0] - (log(k[0]) - log(kᴸ⁽⁻³⁾[-1]))"
MacroModelling.get_equations
— Methodget_equations(𝓂)
Return the equations of the model. In case programmatic model writing was used this function returns the parsed equations (see loop over shocks in Examples
).
Arguments
𝓂
: object created by@model
and@parameters
.
Returns
Vector{String}
of the parsed equations.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z{TFP}[1]) * k[0]^(α - 1) + (1 - exp(z{δ}[1]) * δ))
c[0] + k[0] = (1 - exp(z{δ}[0])δ) * k[-1] + q[0]
q[0] = exp(z{TFP}[0]) * k[-1]^α
for shock in [TFP, δ]
z{shock}[0] = ρ{shock} * z{shock}[-1] + σ{shock} * (eps{shock}[x] + eps_news{shock}[x-1])
end
Δc_share[0] = log(c[0]/q[0]) - log(c[-1]/q[-1])
Δk_4q[0] = log(k[0]) - log(k[-4])
end
@parameters RBC begin
σ = 0.01
ρ = 0.2
capital_to_output = 1.5
k[ss] / (4 * q[ss]) = capital_to_output | δ
alpha = .5
α = alpha
β = 0.95
end
get_equations(RBC)
# output
7-element Vector{String}:
"1 / c[0] = (β / c[1]) * (α * ex" ⋯ 25 bytes ⋯ " - 1) + (1 - exp(z{δ}[1]) * δ))"
"c[0] + k[0] = (1 - exp(z{δ}[0]) * δ) * k[-1] + q[0]"
"q[0] = exp(z{TFP}[0]) * k[-1] ^ α"
"z{TFP}[0] = ρ{TFP} * z{TFP}[-1]" ⋯ 18 bytes ⋯ "TFP}[x] + eps_news{TFP}[x - 1])"
"z{δ}[0] = ρ{δ} * z{δ}[-1] + σ{δ} * (eps{δ}[x] + eps_news{δ}[x - 1])"
"Δc_share[0] = log(c[0] / q[0]) - log(c[-1] / q[-1])"
"Δk_4q[0] = log(k[0]) - log(k[-4])"
MacroModelling.get_estimated_shocks
— Methodget_estimated_shocks(
𝓂,
data;
parameters,
algorithm,
filter,
warmup_iterations,
data_in_levels,
smooth,
verbose,
tol,
quadratic_matrix_equation_algorithm,
sylvester_algorithm,
lyapunov_algorithm
)
Return the estimated shocks based on the inversion filter (depending on the filter
keyword argument), or Kalman filter or smoother (depending on the smooth
keyword argument) using the provided data and (non-)linear solution of the model. Data is by default assumed to be in levels unless data_in_levels
is set to false
.
If occasionally binding constraints are present in the model, they are not taken into account here.
Arguments
𝓂
: object created by@model
and@parameters
.data
[Type:KeyedArray
]: data matrix with variables (String
orSymbol
) in rows and time in columns
Keyword Arguments
parameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.algorithm
[Default::first_order
, Type:Symbol
]: algorithm to solve for the dynamics of the model. Available algorithms::first_order
,:second_order
,:pruned_second_order
,:third_order
,:pruned_third_order
filter
[Default::kalman
, Type:Symbol
]: filter used to compute the variables, and shocks given the data, model, and parameters. The Kalman filter only works for linear problems, whereas the inversion filter (:inversion
) works for linear and nonlinear models. If a nonlinear solution algorithm is selected, the inversion filter is used.data_in_levels
[Default:true
, Type:Bool
]: indicator whether the data is provided in levels. Iftrue
the input to the data argument will have the non stochastic steady state substracted.smooth
[Default:true
, Type:Bool
]: whether to return smoothed (true
) or filtered (false
) shocks/variables. Only works for the Kalman filter. The inversion filter only returns filtered shocks/variables.quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
sylvester_algorithm
[Default: function of size of problem, with smaller problems::doubling
, and larger problems::bicgstab
, Type:Union{Symbol,Vector{Symbol},Tuple{Symbol,Vararg{Symbol}}}
]: algorithm to solve Sylvester equation (A * X * B + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:dqgmres
,:gmres
. Input argument can be up to two elements in aVector
orTuple
. The first (second) element corresponds to the second (third) order perturbation solutions' Sylvester equation. If only one element is provided it corresponds to the second order perturbation solutions' Sylvester equation.lyapunov_algorithm
[Default::doubling
, Type:Symbol
]: algorithm to solve Lyapunov equation (A * X * A' + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:gmres
tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
KeyedArray
with shocks in rows, and periods in columns.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z[1]) * k[0]^(α - 1) + (1 - δ))
c[0] + k[0] = (1 - δ) * k[-1] + q[0]
q[0] = exp(z[0]) * k[-1]^α
z[0] = ρ * z[-1] + std_z * eps_z[x]
end
@parameters RBC begin
std_z = 0.01
ρ = 0.2
δ = 0.02
α = 0.5
β = 0.95
end
simulation = simulate(RBC)
get_estimated_shocks(RBC,simulation([:c],:,:simulate))
# output
2-dimensional KeyedArray(NamedDimsArray(...)) with keys:
↓ Shocks ∈ 1-element Vector{Symbol}
→ Periods ∈ 40-element UnitRange{Int64}
And data, 1×40 Matrix{Float64}:
(1) (2) (3) (4) … (37) (38) (39) (40)
(:eps_z₍ₓ₎) 0.0603617 0.614652 -0.519048 0.711454 -0.873774 1.27918 -0.929701 -0.2255
MacroModelling.get_estimated_variable_standard_deviations
— Methodget_estimated_variable_standard_deviations(
𝓂,
data;
parameters,
data_in_levels,
smooth,
verbose,
tol,
quadratic_matrix_equation_algorithm,
lyapunov_algorithm
)
Return the standard deviations of the Kalman smoother or filter (depending on the smooth
keyword argument) estimates of the model variables based on the provided data and first order solution of the model. Data is by default assumed to be in levels unless data_in_levels
is set to false
.
If occasionally binding constraints are present in the model, they are not taken into account here.
Arguments
𝓂
: object created by@model
and@parameters
.data
[Type:KeyedArray
]: data matrix with variables (String
orSymbol
) in rows and time in columns
Keyword Arguments
parameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.data_in_levels
[Default:true
, Type:Bool
]: indicator whether the data is provided in levels. Iftrue
the input to the data argument will have the non stochastic steady state substracted.smooth
[Default:true
, Type:Bool
]: whether to return smoothed (true
) or filtered (false
) shocks/variables. Only works for the Kalman filter. The inversion filter only returns filtered shocks/variables.quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
lyapunov_algorithm
[Default::doubling
, Type:Symbol
]: algorithm to solve Lyapunov equation (A * X * A' + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:gmres
tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
KeyedArray
with standard deviations in rows, and periods in columns.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z[1]) * k[0]^(α - 1) + (1 - δ))
c[0] + k[0] = (1 - δ) * k[-1] + q[0]
q[0] = exp(z[0]) * k[-1]^α
z[0] = ρ * z[-1] + std_z * eps_z[x]
end
@parameters RBC begin
std_z = 0.01
ρ = 0.2
δ = 0.02
α = 0.5
β = 0.95
end
simulation = simulate(RBC)
get_estimated_variable_standard_deviations(RBC,simulation([:c],:,:simulate))
# output
2-dimensional KeyedArray(NamedDimsArray(...)) with keys:
↓ Standard_deviations ∈ 4-element Vector{Symbol}
→ Periods ∈ 40-element UnitRange{Int64}
And data, 4×40 Matrix{Float64}:
(1) (2) (3) (4) … (38) (39) (40)
(:c) 1.23202e-9 1.84069e-10 8.23181e-11 8.23181e-11 8.23181e-11 8.23181e-11 0.0
(:k) 0.00509299 0.000382934 2.87922e-5 2.16484e-6 1.6131e-9 9.31323e-10 1.47255e-9
(:q) 0.0612887 0.0046082 0.000346483 2.60515e-5 1.31709e-9 1.31709e-9 9.31323e-10
(:z) 0.00961766 0.000723136 5.43714e-5 4.0881e-6 3.08006e-10 3.29272e-10 2.32831e-10
MacroModelling.get_estimated_variables
— Methodget_estimated_variables(
𝓂,
data;
parameters,
algorithm,
filter,
warmup_iterations,
data_in_levels,
levels,
smooth,
verbose,
tol,
quadratic_matrix_equation_algorithm,
sylvester_algorithm,
lyapunov_algorithm
)
Return the estimated variables (in levels by default, see levels
keyword argument) based on the inversion filter (depending on the filter
keyword argument), or Kalman filter or smoother (depending on the smooth
keyword argument) using the provided data and (non-)linear solution of the model. Data is by default assumed to be in levels unless data_in_levels
is set to false
.
If occasionally binding constraints are present in the model, they are not taken into account here.
Arguments
𝓂
: object created by@model
and@parameters
.data
[Type:KeyedArray
]: data matrix with variables (String
orSymbol
) in rows and time in columns
Keyword Arguments
parameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.algorithm
[Default::first_order
, Type:Symbol
]: algorithm to solve for the dynamics of the model. Available algorithms::first_order
,:second_order
,:pruned_second_order
,:third_order
,:pruned_third_order
filter
[Default::kalman
, Type:Symbol
]: filter used to compute the variables, and shocks given the data, model, and parameters. The Kalman filter only works for linear problems, whereas the inversion filter (:inversion
) works for linear and nonlinear models. If a nonlinear solution algorithm is selected, the inversion filter is used.data_in_levels
[Default:true
, Type:Bool
]: indicator whether the data is provided in levels. Iftrue
the input to the data argument will have the non stochastic steady state substracted.levels
[Default:false
, Type:Bool
]: return levels or absolute deviations from the relevant steady state corresponding to the solution algorithm (e.g. stochastic steady state for higher order solution algorithms).smooth
[Default:true
, Type:Bool
]: whether to return smoothed (true
) or filtered (false
) shocks/variables. Only works for the Kalman filter. The inversion filter only returns filtered shocks/variables.quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
sylvester_algorithm
[Default: function of size of problem, with smaller problems::doubling
, and larger problems::bicgstab
, Type:Union{Symbol,Vector{Symbol},Tuple{Symbol,Vararg{Symbol}}}
]: algorithm to solve Sylvester equation (A * X * B + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:dqgmres
,:gmres
. Input argument can be up to two elements in aVector
orTuple
. The first (second) element corresponds to the second (third) order perturbation solutions' Sylvester equation. If only one element is provided it corresponds to the second order perturbation solutions' Sylvester equation.lyapunov_algorithm
[Default::doubling
, Type:Symbol
]: algorithm to solve Lyapunov equation (A * X * A' + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:gmres
tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
KeyedArray
with variables in rows, and periods in columns.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z[1]) * k[0]^(α - 1) + (1 - δ))
c[0] + k[0] = (1 - δ) * k[-1] + q[0]
q[0] = exp(z[0]) * k[-1]^α
z[0] = ρ * z[-1] + std_z * eps_z[x]
end
@parameters RBC begin
std_z = 0.01
ρ = 0.2
δ = 0.02
α = 0.5
β = 0.95
end
simulation = simulate(RBC)
get_estimated_variables(RBC,simulation([:c],:,:simulate))
# output
2-dimensional KeyedArray(NamedDimsArray(...)) with keys:
↓ Variables ∈ 4-element Vector{Symbol}
→ Periods ∈ 40-element UnitRange{Int64}
And data, 4×40 Matrix{Float64}:
(1) (2) (3) (4) … (37) (38) (39) (40)
(:c) 5.92901 5.92797 5.92847 5.92048 5.95845 5.95697 5.95686 5.96173
(:k) 47.3185 47.3087 47.3125 47.2392 47.6034 47.5969 47.5954 47.6402
(:q) 6.87159 6.86452 6.87844 6.79352 7.00476 6.9026 6.90727 6.95841
(:z) -0.00109471 -0.00208056 4.43613e-5 -0.0123318 0.0162992 0.000445065 0.00119089 0.00863586
MacroModelling.get_fevd
— FunctionMacroModelling.get_first_order_solution
— MethodWrapper for get_solution
with algorithm = :first_order
.
MacroModelling.get_forecast_error_variance_decomposition
— FunctionMacroModelling.get_girf
— MethodWrapper for get_irf
with generalised_irf = true
.
MacroModelling.get_irf
— Methodget_irf(
𝓂;
periods,
algorithm,
parameters,
variables,
shocks,
negative_shock,
generalised_irf,
initial_state,
levels,
shock_size,
ignore_obc,
verbose,
tol,
quadratic_matrix_equation_algorithm,
sylvester_algorithm,
lyapunov_algorithm
)
Return impulse response functions (IRFs) of the model. By default, the values represent absolute deviations from the relevant steady state (see levels
for details). The non-stochastic steady state (NSSS) is relevant for first order solutions and the stochastic steady state for higher order solutions.
If the model contains occasionally binding constraints and ignore_obc = false
they are enforced using shocks.
Arguments
𝓂
: object created by@model
and@parameters
.
Keyword Arguments
periods
[Default:40
, Type:Int
]: number of periods for which to calculate the output. In case a matrix of shocks was provided, periods defines how many periods after the series of shocks the output continues.algorithm
[Default::first_order
, Type:Symbol
]: algorithm to solve for the dynamics of the model. Available algorithms::first_order
,:second_order
,:pruned_second_order
,:third_order
,:pruned_third_order
parameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.variables
[Default::all_excluding_obc
]: variables for which to show the results. Inputs can be a variable name passed on as either aSymbol
orString
(e.g.:y
or "y"), orTuple
,Matrix
orVector
ofString
orSymbol
. Any variables not part of the model will trigger a warning.:all_excluding_auxilliary_and_obc
contains all shocks less those related to auxilliary variables and related to occasionally binding constraints (obc).:all_excluding_obc
contains all shocks less those related to auxilliary variables.:all
will contain all variables.shocks
[Default::all_excluding_obc
]: shocks for which to calculate the IRFs. Inputs can be a shock name passed on as either aSymbol
orString
(e.g.:y
, or "y"), orTuple
,Matrix
orVector
ofString
orSymbol
.:simulate
triggers random draws of all shocks (excluding occasionally binding constraints (obc) related shocks).:all_excluding_obc
will contain all shocks but not the obc related ones.:all
will contain also the obc related shocks. A series of shocks can be passed on using either aMatrix{Float64}
, or aKeyedArray{Float64}
as input with shocks (Symbol
orString
) in rows and periods in columns. The period of the simulation will correspond to the length of the input in the period dimension + the number of periods defined inperiods
. If the series of shocks is input as aKeyedArray{Float64}
make sure to name the rows with valid shock names of typeSymbol
. Any shocks not part of the model will trigger a warning.:none
in combination with aninitial_state
can be used for deterministic simulations.negative_shock
[Default:false
, Type:Bool
]: calculate IRFs for a negative shock.generalised_irf
[Default:false
, Type:Bool
]: calculate generalised IRFs. Relevant for nonlinear (higher order perturbation) solutions only. Reference steady state for deviations is the stochastic steady state.initial_state
has no effect on generalised IRFs. Occasionally binding constraint are not respected for generalised IRF.initial_state
[Default:[0.0]
, Type:Union{Vector{Vector{Float64}},Vector{Float64}}
]: The initial state defines the starting point for the model. In the case of pruned solution algorithms the initial state can be given as multiple state vectors (Vector{Vector{Float64}}
). In this case the initial state must be given in deviations from the non-stochastic steady state. In all other cases the initial state must be given in levels. If a pruned solution algorithm is selected andinitial_state
is aVector{Float64}
then it impacts the first order initial state vector only. The state includes all variables as well as exogenous variables in leads or lags if present.get_irf(𝓂, shocks = :none, variables = :all, periods = 1)
returns aKeyedArray
with all variables.levels
[Default:false
, Type:Bool
]: return levels or absolute deviations from the relevant steady state corresponding to the solution algorithm (e.g. stochastic steady state for higher order solution algorithms).shock_size
[Default:1
, Type:Real
]: affects the size of shocks as long as they are not set to:none
.ignore_obc
[Default:false
, Type:Bool
]: solve the model ignoring the occasionally binding constraints.quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
sylvester_algorithm
[Default: function of size of problem, with smaller problems::doubling
, and larger problems::bicgstab
, Type:Union{Symbol,Vector{Symbol},Tuple{Symbol,Vararg{Symbol}}}
]: algorithm to solve Sylvester equation (A * X * B + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:dqgmres
,:gmres
. Input argument can be up to two elements in aVector
orTuple
. The first (second) element corresponds to the second (third) order perturbation solutions' Sylvester equation. If only one element is provided it corresponds to the second order perturbation solutions' Sylvester equation.lyapunov_algorithm
[Default::doubling
, Type:Symbol
]: algorithm to solve Lyapunov equation (A * X * A' + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:gmres
tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
KeyedArray
with variables in rows, periods in columns, and shocks as the third dimension.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z[1]) * k[0]^(α - 1) + (1 - δ))
c[0] + k[0] = (1 - δ) * k[-1] + q[0]
q[0] = exp(z[0]) * k[-1]^α
z[0] = ρ * z[-1] + std_z * eps_z[x]
end
@parameters RBC begin
std_z = 0.01
ρ = 0.2
δ = 0.02
α = 0.5
β = 0.95
end
get_irf(RBC)
# output
3-dimensional KeyedArray(NamedDimsArray(...)) with keys:
↓ Variables ∈ 4-element Vector{Symbol}
→ Periods ∈ 40-element UnitRange{Int64}
◪ Shocks ∈ 1-element Vector{Symbol}
And data, 4×40×1 Array{Float64, 3}:
[:, :, 1] ~ (:, :, :eps_z):
(1) (2) … (39) (40)
(:c) 0.00674687 0.00729773 0.00146962 0.00140619
(:k) 0.0620937 0.0718322 0.0146789 0.0140453
(:q) 0.0688406 0.0182781 0.00111425 0.00106615
(:z) 0.01 0.002 2.74878e-29 5.49756e-30
MacroModelling.get_irf
— Methodget_irf(
𝓂,
parameters;
periods,
variables,
shocks,
negative_shock,
initial_state,
levels,
verbose,
tol,
quadratic_matrix_equation_algorithm
)
Return impulse response functions (IRFs) of the model. Function to use when differentiating IRFs with repect to parameters.
If occasionally binding constraints are present in the model, they are not taken into account here.
Arguments
𝓂
: object created by@model
and@parameters
.parameters
[Type:Vector
]: Parameter values in alphabetical order (sorted by parameter name).
Keyword Arguments
periods
[Default:40
, Type:Int
]: number of periods for which to calculate the output. In case a matrix of shocks was provided, periods defines how many periods after the series of shocks the output continues.variables
[Default::all_excluding_obc
]: variables for which to show the results. Inputs can be a variable name passed on as either aSymbol
orString
(e.g.:y
or "y"), orTuple
,Matrix
orVector
ofString
orSymbol
. Any variables not part of the model will trigger a warning.:all_excluding_auxilliary_and_obc
contains all shocks less those related to auxilliary variables and related to occasionally binding constraints (obc).:all_excluding_obc
contains all shocks less those related to auxilliary variables.:all
will contain all variables.shocks
[Default::all_excluding_obc
]: shocks for which to calculate the IRFs. Inputs can be a shock name passed on as either aSymbol
orString
(e.g.:y
, or "y"), orTuple
,Matrix
orVector
ofString
orSymbol
.:simulate
triggers random draws of all shocks (excluding occasionally binding constraints (obc) related shocks).:all_excluding_obc
will contain all shocks but not the obc related ones.:all
will contain also the obc related shocks. A series of shocks can be passed on using either aMatrix{Float64}
, or aKeyedArray{Float64}
as input with shocks (Symbol
orString
) in rows and periods in columns. The period of the simulation will correspond to the length of the input in the period dimension + the number of periods defined inperiods
. If the series of shocks is input as aKeyedArray{Float64}
make sure to name the rows with valid shock names of typeSymbol
. Any shocks not part of the model will trigger a warning.:none
in combination with aninitial_state
can be used for deterministic simulations.negative_shock
[Default:false
, Type:Bool
]: calculate IRFs for a negative shock.initial_state
[Default:[0.0]
, Type:Vector{Float64}
]: The initial state defines the starting point for the model (in levels, not deviations). The state includes all variables as well as exogenous variables in leads or lags if present.get_irf(𝓂, shocks = :none, variables = :all, periods = 1)
returns aKeyedArray
with all variables.levels
[Default:false
, Type:Bool
]: return levels or absolute deviations from the relevant steady state corresponding to the solution algorithm (e.g. stochastic steady state for higher order solution algorithms).quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
Array{<:AbstractFloat, 3}
with variables in rows, periods in columns, and shocks as the third dimension.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z[1]) * k[0]^(α - 1) + (1 - δ))
c[0] + k[0] = (1 - δ) * k[-1] + q[0]
q[0] = exp(z[0]) * k[-1]^α
z[0] = ρ * z[-1] + std_z * eps_z[x]
end
@parameters RBC begin
std_z = 0.01
ρ = 0.2
δ = 0.02
α = 0.5
β = 0.95
end
get_irf(RBC, RBC.parameter_values)
# output
4×40×1 Array{Float64, 3}:
[:, :, 1] =
0.00674687 0.00729773 0.00715114 0.00687615 … 0.00146962 0.00140619
0.0620937 0.0718322 0.0712153 0.0686381 0.0146789 0.0140453
0.0688406 0.0182781 0.00797091 0.0057232 0.00111425 0.00106615
0.01 0.002 0.0004 8.0e-5 2.74878e-29 5.49756e-30
MacroModelling.get_irfs
— FunctionSee get_irf
MacroModelling.get_jump_variables
— Methodget_jump_variables(𝓂)
Returns the jump variables of the model. Jump variables occur in the future and not in the past or occur in all three: past, present, and future.
In case programmatic model writing was used this function returns the parsed variables (see z
in example).
Arguments
𝓂
: object created by@model
and@parameters
.
Returns
Vector{String}
of the jump variables.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z{TFP}[1]) * k[0]^(α - 1) + (1 - exp(z{δ}[1]) * δ))
c[0] + k[0] = (1 - exp(z{δ}[0])δ) * k[-1] + q[0]
q[0] = exp(z{TFP}[0]) * k[-1]^α
for shock in [TFP, δ]
z{shock}[0] = ρ{shock} * z{shock}[-1] + σ{shock} * (eps{shock}[x] + eps_news{shock}[x-1])
end
Δc_share[0] = log(c[0]/q[0]) - log(c[-1]/q[-1])
Δk_4q[0] = log(k[0]) - log(k[-4])
end
@parameters RBC begin
σ = 0.01
ρ = 0.2
capital_to_output = 1.5
k[ss] / (4 * q[ss]) = capital_to_output | δ
alpha = .5
α = alpha
β = 0.95
end
get_jump_variables(RBC)
# output
3-element Vector{String}:
"c"
"z{TFP}"
"z{δ}"
MacroModelling.get_loglikelihood
— Methodget_loglikelihood(
𝓂,
data,
parameter_values;
algorithm,
filter,
warmup_iterations,
presample_periods,
initial_covariance,
filter_algorithm,
tol,
quadratic_matrix_equation_algorithm,
lyapunov_algorithm,
sylvester_algorithm,
verbose
)
Return the loglikelihood of the model given the data and parameters provided. The loglikelihood is either calculated based on the inversion or the Kalman filter (depending on the filter
keyword argument). In case of a nonlinear solution algorithm the inversion filter will be used. The data must be provided as a KeyedArray{Float64}
with the names of the variables to be matched in rows and the periods in columns.
This function is differentiable (so far for the Kalman filter only) and can be used in gradient based sampling or optimisation.
If occasionally binding constraints are present in the model, they are not taken into account here.
Arguments
𝓂
: object created by@model
and@parameters
.data
[Type:KeyedArray
]: data matrix with variables (String
orSymbol
) in rows and time in columnsparameter_values
[Type:Vector
]: Parameter values.
Keyword Arguments
algorithm
[Default::first_order
, Type:Symbol
]: algorithm to solve for the dynamics of the model. Available algorithms::first_order
,:second_order
,:pruned_second_order
,:third_order
,:pruned_third_order
filter
[Default::kalman
, Type:Symbol
]: filter used to compute the variables, and shocks given the data, model, and parameters. The Kalman filter only works for linear problems, whereas the inversion filter (:inversion
) works for linear and nonlinear models. If a nonlinear solution algorithm is selected, the inversion filter is used.presample_periods
[Default:0
, Type:Int
]: periods at the beginning of the data for which the loglikelihood is discarded.initial_covariance
[Default::theoretical
, Type:Symbol
]: defines the method to initialise the Kalman filters covariance matrix. It can be initialised with the theoretical long run values (option:theoretical
) or large values (10.0) along the diagonal (option:diagonal
).quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
sylvester_algorithm
[Default: function of size of problem, with smaller problems::doubling
, and larger problems::bicgstab
, Type:Union{Symbol,Vector{Symbol},Tuple{Symbol,Vararg{Symbol}}}
]: algorithm to solve Sylvester equation (A * X * B + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:dqgmres
,:gmres
. Input argument can be up to two elements in aVector
orTuple
. The first (second) element corresponds to the second (third) order perturbation solutions' Sylvester equation. If only one element is provided it corresponds to the second order perturbation solutions' Sylvester equation.lyapunov_algorithm
[Default::doubling
, Type:Symbol
]: algorithm to solve Lyapunov equation (A * X * A' + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:gmres
tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
<:AbstractFloat
loglikelihood
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z[1]) * k[0]^(α - 1) + (1 - δ))
c[0] + k[0] = (1 - δ) * k[-1] + q[0]
q[0] = exp(z[0]) * k[-1]^α
z[0] = ρ * z[-1] + std_z * eps_z[x]
end
@parameters RBC begin
std_z = 0.01
ρ = 0.2
δ = 0.02
α = 0.5
β = 0.95
end
simulated_data = simulate(RBC)
get_loglikelihood(RBC, simulated_data([:k], :, :simulate), RBC.parameter_values)
# output
58.24780188977981
MacroModelling.get_mean
— MethodWrapper for get_moments
with mean = true
, and non_stochastic_steady_state = false, variance = false, standard_deviation = false, covariance = false
MacroModelling.get_moments
— Methodget_moments(
𝓂;
parameters,
non_stochastic_steady_state,
mean,
standard_deviation,
variance,
covariance,
variables,
derivatives,
parameter_derivatives,
algorithm,
silent,
quadratic_matrix_equation_algorithm,
sylvester_algorithm,
lyapunov_algorithm,
verbose,
tol
)
Return the first and second moments of endogenous variables using the first, pruned second, or pruned third order perturbation solution. By default returns: non stochastic steady state (NSSS), and standard deviations, but can optionally return variances, and covariance matrix. Derivatives of the moments (except for covariance) can also be provided by setting derivatives
to true
.
If occasionally binding constraints are present in the model, they are not taken into account here.
Arguments
𝓂
: object created by@model
and@parameters
.
Keyword Arguments
parameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.non_stochastic_steady_state
[Default:true
, Type:Bool
]: switch to return SS of endogenous variablesmean
[Default:false
, Type:Bool
]: switch to return mean of endogenous variables (the mean for the linearised solutoin is the NSSS)standard_deviation
[Default:true
, Type:Bool
]: switch to return standard deviation of endogenous variablesvariance
[Default:false
, Type:Bool
]: switch to return variance of endogenous variablescovariance
[Default:false
, Type:Bool
]: switch to return covariance matrix of endogenous variablesvariables
[Default::all_excluding_obc
]: variables for which to show the results. Inputs can be a variable name passed on as either aSymbol
orString
(e.g.:y
or "y"), orTuple
,Matrix
orVector
ofString
orSymbol
. Any variables not part of the model will trigger a warning.:all_excluding_auxilliary_and_obc
contains all shocks less those related to auxilliary variables and related to occasionally binding constraints (obc).:all_excluding_obc
contains all shocks less those related to auxilliary variables.:all
will contain all variables.derivatives
[Default:true
, Type:Bool
]: calculate derivatives with respect to the parameters.parameter_derivatives
[Default: :all]: parameters for which to calculate partial derivatives. Inputs can be a parameter name passed on as either aSymbol
orString
(e.g.:alpha
, or "alpha"), orTuple
,Matrix
orVector
ofString
orSymbol
.:all
will include all parameters.algorithm
[Default::first_order
, Type:Symbol
]: algorithm to solve for the dynamics of the model. Available algorithms::first_order
,:second_order
,:pruned_second_order
,:third_order
,:pruned_third_order
quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
lyapunov_algorithm
[Default::doubling
, Type:Symbol
]: algorithm to solve Lyapunov equation (A * X * A' + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:gmres
sylvester_algorithm
[Default: function of size of problem, with smaller problems::doubling
, and larger problems::bicgstab
, Type:Union{Symbol,Vector{Symbol},Tuple{Symbol,Vararg{Symbol}}}
]: algorithm to solve Sylvester equation (A * X * B + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:dqgmres
,:gmres
. Input argument can be up to two elements in aVector
orTuple
. The first (second) element corresponds to the second (third) order perturbation solutions' Sylvester equation. If only one element is provided it corresponds to the second order perturbation solutions' Sylvester equation.tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
Dict{Symbol,KeyedArray}
containing the selected moments. All moments have variables as rows and the moment as the first column followed by partial derivatives wrt parameters.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z[1]) * k[0]^(α - 1) + (1 - δ))
c[0] + k[0] = (1 - δ) * k[-1] + q[0]
q[0] = exp(z[0]) * k[-1]^α
z[0] = ρ * z[-1] + std_z * eps_z[x]
end
@parameters RBC begin
std_z = 0.01
ρ = 0.2
δ = 0.02
α = 0.5
β = 0.95
end
moments = get_moments(RBC);
moments[:non_stochastic_steady_state]
# output
2-dimensional KeyedArray(NamedDimsArray(...)) with keys:
↓ Variables ∈ 4-element Vector{Symbol}
→ Steady_state_and_∂steady_state∂parameter ∈ 6-element Vector{Symbol}
And data, 4×6 Matrix{Float64}:
(:Steady_state) (:std_z) (:ρ) (:δ) (:α) (:β)
(:c) 5.93625 0.0 0.0 -116.072 55.786 76.1014
(:k) 47.3903 0.0 0.0 -1304.95 555.264 1445.93
(:q) 6.88406 0.0 0.0 -94.7805 66.8912 105.02
(:z) 0.0 0.0 0.0 0.0 0.0 0.0
moments[:standard_deviation]
# output
2-dimensional KeyedArray(NamedDimsArray(...)) with keys:
↓ Variables ∈ 4-element Vector{Symbol}
→ Standard_deviation_and_∂standard_deviation∂parameter ∈ 6-element Vector{Symbol}
And data, 4×6 Matrix{Float64}:
(:Standard_deviation) (:std_z) … (:δ) (:α) (:β)
(:c) 0.0266642 2.66642 -0.384359 0.2626 0.144789
(:k) 0.264677 26.4677 -5.74194 2.99332 6.30323
(:q) 0.0739325 7.39325 -0.974722 0.726551 1.08
(:z) 0.0102062 1.02062 0.0 0.0 0.0
MacroModelling.get_non_stochastic_steady_state
— MethodWrapper for get_steady_state
with stochastic = false
.
MacroModelling.get_non_stochastic_steady_state_residuals
— Methodget_non_stochastic_steady_state_residuals(
𝓂,
values;
parameters,
tol,
verbose
)
Calculate the residuals of the non-stochastic steady state equations of the model for a given set of values. Values not provided, will be filled with the non-stochastic steady state values corresponding to the current parameters.
Arguments
𝓂
: object created by@model
and@parameters
.values
[Type:Union{Vector{Float64}, Dict{Symbol, Float64}, Dict{String, Float64}, KeyedArray{Float64, 1}}
]: A Vector, Dict, or KeyedArray containing the values of the variables and calibrated parameters in the non-stochastic steady state equations (including calibration equations).
Keyword Arguments
parameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
KeyedArray
containing the absolute values of the residuals of the non-stochastic steady state equations.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z[1]) * k[0]^(α - 1) + (1 - δ))
c[0] + k[0] = (1 - δ) * k[-1] + q[0]
q[0] = exp(z[0]) * k[-1]^α
z[0] = ρ * z[-1] + std_z * eps_z[x]
end
@parameters RBC begin
std_z = 0.01
ρ = 0.2
δ = 0.02
k[ss] / q[ss] = 2.5 | α
β = 0.95
end
steady_state = SS(RBC, derivatives = false)
get_non_stochastic_steady_state_residuals(RBC, steady_state)
# output
1-dimensional KeyedArray(NamedDimsArray(...)) with keys:
↓ Equation ∈ 5-element Vector{Symbol}
And data, 5-element Vector{Float64}:
(:Equation₁) 0.0
(:Equation₂) 0.0
(:Equation₃) 0.0
(:Equation₄) 0.0
(:CalibrationEquation₁) 0.0
get_non_stochastic_steady_state_residuals(RBC, [1.1641597, 3.0635781, 1.2254312, 0.0, 0.18157895])
# output
1-dimensional KeyedArray(NamedDimsArray(...)) with keys:
↓ Equation ∈ 5-element Vector{Symbol}
And data, 5-element Vector{Float64}:
(:Equation₁) 2.7360991250446887e-10
(:Equation₂) 6.199999980083248e-8
(:Equation₃) 2.7897102183871425e-8
(:Equation₄) 0.0
(:CalibrationEquation₁) 8.160392850342646e-8
MacroModelling.get_nonnegativity_auxilliary_variables
— Methodget_nonnegativity_auxilliary_variables(𝓂)
Returns the auxilliary variables, without timing subscripts, added to the non-stochastic steady state problem because certain expression cannot be negative (e.g. given log(c/q)
an auxilliary variable is created for c/q
).
See get_steady_state_equations
for more details on the auxilliary variables and equations.
Arguments
𝓂
: object created by@model
and@parameters
.
Returns
Vector{String}
of the auxilliary parameters.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z{TFP}[1]) * k[0]^(α - 1) + (1 - exp(z{δ}[1]) * δ))
c[0] + k[0] = (1 - exp(z{δ}[0])δ) * k[-1] + q[0]
q[0] = exp(z{TFP}[0]) * k[-1]^α
for shock in [TFP, δ]
z{shock}[0] = ρ{shock} * z{shock}[-1] + σ{shock} * (eps{shock}[x] + eps_news{shock}[x-1])
end
Δc_share[0] = log(c[0]/q[0]) - log(c[-1]/q[-1])
Δk_4q[0] = log(k[0]) - log(k[-4])
end
@parameters RBC begin
σ = 0.01
ρ = 0.2
capital_to_output = 1.5
k[ss] / (4 * q[ss]) = capital_to_output | δ
alpha = .5
α = alpha
β = 0.95
end
get_nonnegativity_auxilliary_variables(RBC)
# output
2-element Vector{String}:
"➕₁"
"➕₂"
MacroModelling.get_parameters
— Methodget_parameters(𝓂; values)
Returns the parameters (and optionally the values) which have an impact on the model dynamics but do not depend on other parameters and are not determined by calibration equations.
In case programmatic model writing was used this function returns the parsed parameters (see σ
in Examples
).
Arguments
𝓂
: object created by@model
and@parameters
.
Keyword Arguments
values
[Default:false
, Type:Bool
]: return the values together with the parameter names.
Returns
Vector{String}
of the parameters orVector{Pair{String, Float64}}
of parameters and values ifvalues
is set totrue
.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z{TFP}[1]) * k[0]^(α - 1) + (1 - exp(z{δ}[1]) * δ))
c[0] + k[0] = (1 - exp(z{δ}[0])δ) * k[-1] + q[0]
q[0] = exp(z{TFP}[0]) * k[-1]^α
for shock in [TFP, δ]
z{shock}[0] = ρ{shock} * z{shock}[-1] + σ{shock} * (eps{shock}[x] + eps_news{shock}[x-1])
end
Δc_share[0] = log(c[0]/q[0]) - log(c[-1]/q[-1])
Δk_4q[0] = log(k[0]) - log(k[-4])
end
@parameters RBC begin
σ = 0.01
ρ = 0.2
capital_to_output = 1.5
k[ss] / (4 * q[ss]) = capital_to_output | δ
alpha = .5
α = alpha
β = 0.95
end
get_parameters(RBC)
# output
7-element Vector{String}:
"σ{TFP}"
"σ{δ}"
"ρ{TFP}"
"ρ{δ}"
"capital_to_output"
"alpha"
"β"
MacroModelling.get_parameters_defined_by_parameters
— Methodget_parameters_defined_by_parameters(𝓂)
Returns the parameters which are defined by other parameters which are not necessarily used in the equations of the model (see α
in Examples
).
Arguments
𝓂
: object created by@model
and@parameters
.
Returns
Vector{String}
of the parameters.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z{TFP}[1]) * k[0]^(α - 1) + (1 - exp(z{δ}[1]) * δ))
c[0] + k[0] = (1 - exp(z{δ}[0])δ) * k[-1] + q[0]
q[0] = exp(z{TFP}[0]) * k[-1]^α
for shock in [TFP, δ]
z{shock}[0] = ρ{shock} * z{shock}[-1] + σ{shock} * (eps{shock}[x] + eps_news{shock}[x-1])
end
Δc_share[0] = log(c[0]/q[0]) - log(c[-1]/q[-1])
Δk_4q[0] = log(k[0]) - log(k[-4])
end
@parameters RBC begin
σ = 0.01
ρ = 0.2
capital_to_output = 1.5
k[ss] / (4 * q[ss]) = capital_to_output | δ
alpha = .5
α = alpha
β = 0.95
end
get_parameters_defined_by_parameters(RBC)
# output
1-element Vector{String}:
"α"
MacroModelling.get_parameters_defining_parameters
— Methodget_parameters_defining_parameters(𝓂)
Returns the parameters which define other parameters in the @parameters
block which are not necessarily used in the equations of the model (see alpha
in Examples
).
Arguments
𝓂
: object created by@model
and@parameters
.
Returns
Vector{String}
of the parameters.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z{TFP}[1]) * k[0]^(α - 1) + (1 - exp(z{δ}[1]) * δ))
c[0] + k[0] = (1 - exp(z{δ}[0])δ) * k[-1] + q[0]
q[0] = exp(z{TFP}[0]) * k[-1]^α
for shock in [TFP, δ]
z{shock}[0] = ρ{shock} * z{shock}[-1] + σ{shock} * (eps{shock}[x] + eps_news{shock}[x-1])
end
Δc_share[0] = log(c[0]/q[0]) - log(c[-1]/q[-1])
Δk_4q[0] = log(k[0]) - log(k[-4])
end
@parameters RBC begin
σ = 0.01
ρ = 0.2
capital_to_output = 1.5
k[ss] / (4 * q[ss]) = capital_to_output | δ
alpha = .5
α = alpha
β = 0.95
end
get_parameters_defining_parameters(RBC)
# output
1-element Vector{String}:
"alpha"
MacroModelling.get_parameters_in_equations
— Methodget_parameters_in_equations(𝓂)
Returns the parameters contained in the model equations. Note that these parameters might be determined by other parameters or calibration equations defined in the @parameters
block.
In case programmatic model writing was used this function returns the parsed parameters (see σ
in Examples
).
Arguments
𝓂
: object created by@model
and@parameters
.
Returns
Vector{String}
of the parameters.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z{TFP}[1]) * k[0]^(α - 1) + (1 - exp(z{δ}[1]) * δ))
c[0] + k[0] = (1 - exp(z{δ}[0])δ) * k[-1] + q[0]
q[0] = exp(z{TFP}[0]) * k[-1]^α
for shock in [TFP, δ]
z{shock}[0] = ρ{shock} * z{shock}[-1] + σ{shock} * (eps{shock}[x] + eps_news{shock}[x-1])
end
Δc_share[0] = log(c[0]/q[0]) - log(c[-1]/q[-1])
Δk_4q[0] = log(k[0]) - log(k[-4])
end
@parameters RBC begin
σ = 0.01
ρ = 0.2
capital_to_output = 1.5
k[ss] / (4 * q[ss]) = capital_to_output | δ
alpha = .5
α = alpha
β = 0.95
end
get_parameters_in_equations(RBC)
# output
7-element Vector{String}:
"α"
"β"
"δ"
"ρ{TFP}"
"ρ{δ}"
"σ{TFP}"
"σ{δ}"
MacroModelling.get_perturbation_solution
— MethodSee get_solution
MacroModelling.get_residuals
— FunctionMacroModelling.get_second_order_solution
— MethodWrapper for get_solution
with algorithm = :second_order
.
MacroModelling.get_shock_decomposition
— Methodget_shock_decomposition(
𝓂,
data;
parameters,
filter,
algorithm,
data_in_levels,
warmup_iterations,
smooth,
verbose,
tol,
quadratic_matrix_equation_algorithm,
sylvester_algorithm,
lyapunov_algorithm
)
Return the shock decomposition in absolute deviations from the relevant steady state. The non-stochastic steady state (NSSS) is relevant for first order solutions and the stochastic steady state for higher order solutions. The deviations are based on the Kalman smoother or filter (depending on the smooth
keyword argument) or inversion filter using the provided data and solution of the model. Data is by default assumed to be in levels unless data_in_levels
is set to false
.
In case of pruned second and pruned third order perturbation algorithms the decomposition additionally contains a term Nonlinearities
. This term represents the nonlinear interaction between the states in the periods after the shocks arrived and in the case of pruned third order, the interaciton between (pruned second order) states and contemporaneous shocks.
If occasionally binding constraints are present in the model, they are not taken into account here.
Arguments
𝓂
: object created by@model
and@parameters
.data
[Type:KeyedArray
]: data matrix with variables (String
orSymbol
) in rows and time in columns
Keyword Arguments
parameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.filter
[Default::kalman
, Type:Symbol
]: filter used to compute the variables, and shocks given the data, model, and parameters. The Kalman filter only works for linear problems, whereas the inversion filter (:inversion
) works for linear and nonlinear models. If a nonlinear solution algorithm is selected, the inversion filter is used.algorithm
[Default::first_order
, Type:Symbol
]: algorithm to solve for the dynamics of the model. Available algorithms::first_order
,:second_order
,:pruned_second_order
,:third_order
,:pruned_third_order
data_in_levels
[Default:true
, Type:Bool
]: indicator whether the data is provided in levels. Iftrue
the input to the data argument will have the non stochastic steady state substracted.smooth
[Default:true
, Type:Bool
]: whether to return smoothed (true
) or filtered (false
) shocks/variables. Only works for the Kalman filter. The inversion filter only returns filtered shocks/variables.quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
sylvester_algorithm
[Default: function of size of problem, with smaller problems::doubling
, and larger problems::bicgstab
, Type:Union{Symbol,Vector{Symbol},Tuple{Symbol,Vararg{Symbol}}}
]: algorithm to solve Sylvester equation (A * X * B + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:dqgmres
,:gmres
. Input argument can be up to two elements in aVector
orTuple
. The first (second) element corresponds to the second (third) order perturbation solutions' Sylvester equation. If only one element is provided it corresponds to the second order perturbation solutions' Sylvester equation.lyapunov_algorithm
[Default::doubling
, Type:Symbol
]: algorithm to solve Lyapunov equation (A * X * A' + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:gmres
tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
KeyedArray
with variables in rows, shocks in columns, and periods as the third dimension.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z[1]) * k[0]^(α - 1) + (1 - δ))
c[0] + k[0] = (1 - δ) * k[-1] + q[0]
q[0] = exp(z[0]) * k[-1]^α
z[0] = ρ * z[-1] + std_z * eps_z[x]
end
@parameters RBC begin
std_z = 0.01
ρ = 0.2
δ = 0.02
α = 0.5
β = 0.95
end
simulation = simulate(RBC)
get_shock_decomposition(RBC,simulation([:c],:,:simulate))
# output
3-dimensional KeyedArray(NamedDimsArray(...)) with keys:
↓ Variables ∈ 4-element Vector{Symbol}
→ Shocks ∈ 2-element Vector{Symbol}
◪ Periods ∈ 40-element UnitRange{Int64}
And data, 4×2×40 Array{Float64, 3}:
[showing 3 of 40 slices]
[:, :, 1] ~ (:, :, 1):
(:eps_z₍ₓ₎) (:Initial_values)
(:c) 0.000407252 -0.00104779
(:k) 0.00374808 -0.0104645
(:q) 0.00415533 -0.000807161
(:z) 0.000603617 -1.99957e-6
[:, :, 21] ~ (:, :, 21):
(:eps_z₍ₓ₎) (:Initial_values)
(:c) 0.026511 -0.000433619
(:k) 0.25684 -0.00433108
(:q) 0.115858 -0.000328764
(:z) 0.0150266 0.0
[:, :, 40] ~ (:, :, 40):
(:eps_z₍ₓ₎) (:Initial_values)
(:c) 0.0437976 -0.000187505
(:k) 0.4394 -0.00187284
(:q) 0.00985518 -0.000142164
(:z) -0.00366442 8.67362e-19
MacroModelling.get_shocks
— Methodget_shocks(𝓂)
Returns the exogenous shocks.
In case programmatic model writing was used this function returns the parsed variables (see eps
in example).
Arguments
𝓂
: object created by@model
and@parameters
.
Returns
Vector{String}
of the exogenous shocks.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z{TFP}[1]) * k[0]^(α - 1) + (1 - exp(z{δ}[1]) * δ))
c[0] + k[0] = (1 - exp(z{δ}[0])δ) * k[-1] + q[0]
q[0] = exp(z{TFP}[0]) * k[-1]^α
for shock in [TFP, δ]
z{shock}[0] = ρ{shock} * z{shock}[-1] + σ{shock} * (eps{shock}[x] + eps_news{shock}[x-1])
end
Δc_share[0] = log(c[0]/q[0]) - log(c[-1]/q[-1])
Δk_4q[0] = log(k[0]) - log(k[-4])
end
@parameters RBC begin
σ = 0.01
ρ = 0.2
capital_to_output = 1.5
k[ss] / (4 * q[ss]) = capital_to_output | δ
alpha = .5
α = alpha
β = 0.95
end
get_shocks(RBC)
# output
4-element Vector{String}:
"eps_news{TFP}"
"eps_news{δ}"
"eps{TFP}"
"eps{δ}"
MacroModelling.get_simulation
— MethodWrapper for get_irf
with shocks = :simulate
. Function returns values in levels by default.
MacroModelling.get_simulations
— MethodWrapper for get_irf
with shocks = :simulate
. Function returns values in levels by default.
MacroModelling.get_solution
— Methodget_solution(
𝓂;
parameters,
algorithm,
silent,
verbose,
tol,
quadratic_matrix_equation_algorithm,
sylvester_algorithm
)
Return the solution of the model. In the linear case it returns the the non-stochastic steady state (NSSS) followed by the linearised solution of the model. In the nonlinear case (higher order perturbation) the function returns a multidimensional array with the endogenous variables as the second dimension and the state variables, shocks, and perturbation parameter (:Volatility) as the other dimensions.
The values of the output represent the NSSS in the case of a linear solution and below it the effect that deviations from the NSSS of the respective past states, shocks, and perturbation parameter have (perturbation parameter = 1) on the present value (NSSS deviation) of the model variables.
Arguments
𝓂
: object created by@model
and@parameters
.
Keyword Arguments
parameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.algorithm
[Default::first_order
, Type:Symbol
]: algorithm to solve for the dynamics of the model. Available algorithms::first_order
,:second_order
,:pruned_second_order
,:third_order
,:pruned_third_order
quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
sylvester_algorithm
[Default: function of size of problem, with smaller problems::doubling
, and larger problems::bicgstab
, Type:Union{Symbol,Vector{Symbol},Tuple{Symbol,Vararg{Symbol}}}
]: algorithm to solve Sylvester equation (A * X * B + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:dqgmres
,:gmres
. Input argument can be up to two elements in aVector
orTuple
. The first (second) element corresponds to the second (third) order perturbation solutions' Sylvester equation. If only one element is provided it corresponds to the second order perturbation solutions' Sylvester equation.tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
KeyedArray
shows as columns the endogenous variables inlcuding the auxilliary endogenous and exogenous variables (due to leads and lags > 1). The rows and other dimensions (depending on the chosen perturbation order) include the NSSS for the linear case only, followed by the states, and exogenous shocks. Subscripts following variable names indicate the timing (e.g.variable₍₋₁₎
indicates the variable being in the past). Superscripts indicate leads or lags (e.g.variableᴸ⁽²⁾
indicates the variable being in lead by two periods). If no super- or subscripts follow the variable name, the variable is in the present.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z[1]) * k[0]^(α - 1) + (1 - δ))
c[0] + k[0] = (1 - δ) * k[-1] + q[0]
q[0] = exp(z[0]) * k[-1]^α
z[0] = ρ * z[-1] + std_z * eps_z[x]
end
@parameters RBC begin
std_z = 0.01
ρ = 0.2
δ = 0.02
α = 0.5
β = 0.95
end
get_solution(RBC)
# output
2-dimensional KeyedArray(NamedDimsArray(...)) with keys:
↓ Steady_state__States__Shocks ∈ 4-element Vector{Symbol}
→ Variables ∈ 4-element Vector{Symbol}
And data, 4×4 adjoint(::Matrix{Float64}) with eltype Float64:
(:c) (:k) (:q) (:z)
(:Steady_state) 5.93625 47.3903 6.88406 0.0
(:k₍₋₁₎) 0.0957964 0.956835 0.0726316 -0.0
(:z₍₋₁₎) 0.134937 1.24187 1.37681 0.2
(:eps_z₍ₓ₎) 0.00674687 0.0620937 0.0688406 0.01
MacroModelling.get_solution
— Methodget_solution(
𝓂,
parameters;
algorithm,
verbose,
tol,
quadratic_matrix_equation_algorithm,
sylvester_algorithm
)
Return the components of the solution of the model: non-stochastic steady state (NSSS), and solution martrices corresponding to the order of the solution. Note that all returned objects have the variables in rows and the solution matrices have as columns the state variables followed by the perturbation/volatility parameter for higher order solution matrices and lastly the exogenous shocks. Higher order perturbation matrices are sparse and have the Kronecker product of the forementioned elements as columns. The last element, a Boolean indicates whether the solution is numerically accurate. Function to use when differentiating IRFs with repect to parameters.
Arguments
𝓂
: object created by@model
and@parameters
.parameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.
Keyword Arguments
algorithm
[Default::first_order
, Type:Symbol
]: algorithm to solve for the dynamics of the model. Available algorithms::first_order
,:second_order
,:pruned_second_order
,:third_order
,:pruned_third_order
quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
sylvester_algorithm
[Default: function of size of problem, with smaller problems::doubling
, and larger problems::bicgstab
, Type:Union{Symbol,Vector{Symbol},Tuple{Symbol,Vararg{Symbol}}}
]: algorithm to solve Sylvester equation (A * X * B + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:dqgmres
,:gmres
. Input argument can be up to two elements in aVector
orTuple
. The first (second) element corresponds to the second (third) order perturbation solutions' Sylvester equation. If only one element is provided it corresponds to the second order perturbation solutions' Sylvester equation.tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
Tuple
consisting of aVector
containing the NSSS, followed by aMatrix
containing the first order solution matrix. In case of higher order solutions,SparseMatrixCSC
represent the higher order solution matrices. The last element is aBool
indicating the correctness of the solution provided.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z[1]) * k[0]^(α - 1) + (1 - δ))
c[0] + k[0] = (1 - δ) * k[-1] + q[0]
q[0] = exp(z[0]) * k[-1]^α
z[0] = ρ * z[-1] + std_z * eps_z[x]
end
@parameters RBC begin
std_z = 0.01
ρ = 0.2
δ = 0.02
α = 0.5
β = 0.95
end
get_solution(RBC, RBC.parameter_values)
# output
([5.936252888048724, 47.39025414828808, 6.884057971014486, 0.0],
[0.09579643002421227 0.1349373930517757 0.006746869652588215;
0.9568351489231555 1.241874201151121 0.06209371005755664;
0.07263157894736819 1.376811594202897 0.06884057971014486;
0.0 0.19999999999999998 0.01], true)
MacroModelling.get_ss
— FunctionSee get_steady_state
MacroModelling.get_standard_deviation
— MethodWrapper for get_moments
with standard_deviation = true
and non_stochastic_steady_state = false, variance = false, covariance = false
.
MacroModelling.get_state_variables
— Methodget_state_variables(𝓂)
Returns the state variables of the model. State variables occur in the past and not in the future or occur in all three: past, present, and future.
In case programmatic model writing was used this function returns the parsed variables (see z
in example).
Arguments
𝓂
: object created by@model
and@parameters
.
Returns
Vector{String}
of the state variables.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z{TFP}[1]) * k[0]^(α - 1) + (1 - exp(z{δ}[1]) * δ))
c[0] + k[0] = (1 - exp(z{δ}[0])δ) * k[-1] + q[0]
q[0] = exp(z{TFP}[0]) * k[-1]^α
for shock in [TFP, δ]
z{shock}[0] = ρ{shock} * z{shock}[-1] + σ{shock} * (eps{shock}[x] + eps_news{shock}[x-1])
end
Δc_share[0] = log(c[0]/q[0]) - log(c[-1]/q[-1])
Δk_4q[0] = log(k[0]) - log(k[-4])
end
@parameters RBC begin
σ = 0.01
ρ = 0.2
capital_to_output = 1.5
k[ss] / (4 * q[ss]) = capital_to_output | δ
alpha = .5
α = alpha
β = 0.95
end
get_state_variables(RBC)
# output
10-element Vector{String}:
"c"
"eps_news{TFP}"
"eps_news{δ}"
"k"
"kᴸ⁽⁻²⁾"
"kᴸ⁽⁻³⁾"
"kᴸ⁽⁻¹⁾"
"q"
"z{TFP}"
"z{δ}"
MacroModelling.get_statistics
— Methodget_statistics(
𝓂,
parameter_values;
parameters,
non_stochastic_steady_state,
mean,
standard_deviation,
variance,
covariance,
autocorrelation,
autocorrelation_periods,
algorithm,
quadratic_matrix_equation_algorithm,
sylvester_algorithm,
lyapunov_algorithm,
verbose,
tol
)
Return the first and second moments of endogenous variables using either the linearised solution or the pruned second or pruned third order perturbation solution. By default returns a Dict
with: non stochastic steady state (NSSS), and standard deviations, but can also return variances, and covariance matrix. Function to use when differentiating model moments with repect to parameters.
If occasionally binding constraints are present in the model, they are not taken into account here.
Arguments
𝓂
: object created by@model
and@parameters
.parameter_values
[Type:Vector
]: Parameter values. Ifparameter_names
is not explicitly defined,parameter_values
are assumed to correspond to the parameters and the order of the parameters declared in the@parameters
block.
Keyword Arguments
parameters
[Type:Vector{Symbol}
]: Corresponding names in the same order asparameter_values
.non_stochastic_steady_state
[Default:Symbol[]
, Type:Union{Symbol_input,String_input}
]: variables for which to show the NSSS of selected variables. Inputs can be a variable name passed on as either aSymbol
orString
(e.g.:y
or "y"), orTuple
,Matrix
orVector
ofString
orSymbol
. Any variables not part of the model will trigger a warning.:all_excluding_auxilliary_and_obc
contains all shocks less those related to auxilliary variables and related to occasionally binding constraints (obc).:all_excluding_obc
contains all shocks less those related to auxilliary variables.:all
will contain all variables.mean
[Default:Symbol[]
, Type:Union{Symbol_input,String_input}
]: variables for which to show the mean of selected variables (the mean for the linearised solution is the NSSS). Inputs can be a variable name passed on as either aSymbol
orString
(e.g.:y
or "y"), orTuple
,Matrix
orVector
ofString
orSymbol
. Any variables not part of the model will trigger a warning.:all_excluding_auxilliary_and_obc
contains all shocks less those related to auxilliary variables and related to occasionally binding constraints (obc).:all_excluding_obc
contains all shocks less those related to auxilliary variables.:all
will contain all variables.standard_deviation
[Default:Symbol[]
, Type:Union{Symbol_input,String_input}
]: variables for which to show the standard deviation of selected variables. Inputs can be a variable name passed on as either aSymbol
orString
(e.g.:y
or "y"), orTuple
,Matrix
orVector
ofString
orSymbol
. Any variables not part of the model will trigger a warning.:all_excluding_auxilliary_and_obc
contains all shocks less those related to auxilliary variables and related to occasionally binding constraints (obc).:all_excluding_obc
contains all shocks less those related to auxilliary variables.:all
will contain all variables.variance
[Default:Symbol[]
, Type:Union{Symbol_input,String_input}
]: variables for which to show the variance of selected variables. Inputs can be a variable name passed on as either aSymbol
orString
(e.g.:y
or "y"), orTuple
,Matrix
orVector
ofString
orSymbol
. Any variables not part of the model will trigger a warning.:all_excluding_auxilliary_and_obc
contains all shocks less those related to auxilliary variables and related to occasionally binding constraints (obc).:all_excluding_obc
contains all shocks less those related to auxilliary variables.:all
will contain all variables.covariance
[Default:Symbol[]
, Type:Union{Symbol_input,String_input}
]: variables for which to show the covariance of selected variables. Inputs can be a variable name passed on as either aSymbol
orString
(e.g.:y
or "y"), orTuple
,Matrix
orVector
ofString
orSymbol
. Any variables not part of the model will trigger a warning.:all_excluding_auxilliary_and_obc
contains all shocks less those related to auxilliary variables and related to occasionally binding constraints (obc).:all_excluding_obc
contains all shocks less those related to auxilliary variables.:all
will contain all variables.autocorrelation
[Default:Symbol[]
, Type:Union{Symbol_input,String_input}
]: variables for which to show the autocorrelation of selected variables. Inputs can be a variable name passed on as either aSymbol
orString
(e.g.:y
or "y"), orTuple
,Matrix
orVector
ofString
orSymbol
. Any variables not part of the model will trigger a warning.:all_excluding_auxilliary_and_obc
contains all shocks less those related to auxilliary variables and related to occasionally binding constraints (obc).:all_excluding_obc
contains all shocks less those related to auxilliary variables.:all
will contain all variables.autocorrelation_periods
[Default:1:5
, Type =UnitRange{Int}
]: periods for which to return the autocorrelation of selected variablesalgorithm
[Default::first_order
, Type:Symbol
]: algorithm to solve for the dynamics of the model. Available algorithms::first_order
,:second_order
,:pruned_second_order
,:third_order
,:pruned_third_order
quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
lyapunov_algorithm
[Default::doubling
, Type:Symbol
]: algorithm to solve Lyapunov equation (A * X * A' + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:gmres
sylvester_algorithm
[Default: function of size of problem, with smaller problems::doubling
, and larger problems::bicgstab
, Type:Union{Symbol,Vector{Symbol},Tuple{Symbol,Vararg{Symbol}}}
]: algorithm to solve Sylvester equation (A * X * B + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:dqgmres
,:gmres
. Input argument can be up to two elements in aVector
orTuple
. The first (second) element corresponds to the second (third) order perturbation solutions' Sylvester equation. If only one element is provided it corresponds to the second order perturbation solutions' Sylvester equation.tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
Dict
with the name of the statistics and the corresponding vectors (NSSS, mean, standard deviation, variance) or matrices (covariance, autocorrelation).
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z[1]) * k[0]^(α - 1) + (1 - δ))
c[0] + k[0] = (1 - δ) * k[-1] + q[0]
q[0] = exp(z[0]) * k[-1]^α
z[0] = ρ * z[-1] + std_z * eps_z[x]
end
@parameters RBC begin
std_z = 0.01
ρ = 0.2
δ = 0.02
α = 0.5
β = 0.95
end
get_statistics(RBC, RBC.parameter_values, parameters = RBC.parameters, standard_deviation = RBC.var)
# output
Dict{Symbol, AbstractArray{Float64}} with 1 entry:
:standard_deviation => [0.0266642, 0.264677, 0.0739325, 0.0102062]
MacroModelling.get_std
— FunctionWrapper for get_moments
with standard_deviation = true
and non_stochastic_steady_state = false, variance = false, covariance = false
.
MacroModelling.get_stdev
— FunctionWrapper for get_moments
with standard_deviation = true
and non_stochastic_steady_state = false, variance = false, covariance = false
.
MacroModelling.get_steady_state
— Methodget_steady_state(
𝓂;
parameters,
derivatives,
stochastic,
algorithm,
parameter_derivatives,
return_variables_only,
verbose,
silent,
tol,
quadratic_matrix_equation_algorithm,
sylvester_algorithm
)
Return the (non-stochastic) steady state, calibrated parameters, and derivatives with respect to model parameters.
Arguments
𝓂
: object created by@model
and@parameters
.
Keyword Arguments
parameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.derivatives
[Default:true
, Type:Bool
]: calculate derivatives with respect to the parameters.parameter_derivatives
[Default: :all]: parameters for which to calculate partial derivatives. Inputs can be a parameter name passed on as either aSymbol
orString
(e.g.:alpha
, or "alpha"), orTuple
,Matrix
orVector
ofString
orSymbol
.:all
will include all parameters.stochastic
[Default:false
, Type:Bool
]: return stochastic steady state using second order perturbation if no other higher order perturbation algorithm is provided inalgorithm
.return_variables_only
[Defaut:false
, Type:Bool
]: return only variables and not calibrated parameters.algorithm
[Default::first_order
, Type:Symbol
]: algorithm to solve for the dynamics of the model. Available algorithms::first_order
,:second_order
,:pruned_second_order
,:third_order
,:pruned_third_order
quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
sylvester_algorithm
[Default: function of size of problem, with smaller problems::doubling
, and larger problems::bicgstab
, Type:Union{Symbol,Vector{Symbol},Tuple{Symbol,Vararg{Symbol}}}
]: algorithm to solve Sylvester equation (A * X * B + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:dqgmres
,:gmres
. Input argument can be up to two elements in aVector
orTuple
. The first (second) element corresponds to the second (third) order perturbation solutions' Sylvester equation. If only one element is provided it corresponds to the second order perturbation solutions' Sylvester equation.tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
KeyedArray
with variables in rows. The columns show the (non-stochastic) steady state and parameters for which derivatives are taken.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z[1]) * k[0]^(α - 1) + (1 - δ))
c[0] + k[0] = (1 - δ) * k[-1] + q[0]
q[0] = exp(z[0]) * k[-1]^α
z[0] = ρ * z[-1] + std_z * eps_z[x]
end
@parameters RBC begin
std_z = 0.01
ρ = 0.2
δ = 0.02
α = 0.5
β = 0.95
end
get_steady_state(RBC)
# output
2-dimensional KeyedArray(NamedDimsArray(...)) with keys:
↓ Variables_and_calibrated_parameters ∈ 4-element Vector{Symbol}
→ Steady_state_and_∂steady_state∂parameter ∈ 6-element Vector{Symbol}
And data, 4×6 Matrix{Float64}:
(:Steady_state) (:std_z) (:ρ) (:δ) (:α) (:β)
(:c) 5.93625 0.0 0.0 -116.072 55.786 76.1014
(:k) 47.3903 0.0 0.0 -1304.95 555.264 1445.93
(:q) 6.88406 0.0 0.0 -94.7805 66.8912 105.02
(:z) 0.0 0.0 0.0 0.0 0.0 0.0
MacroModelling.get_steady_state_equations
— Methodget_steady_state_equations(𝓂)
Return the non-stochastic steady state (NSSS) equations of the model. The difference to the equations as they were written in the @model
block is that exogenous shocks are set to 0
, time subscripts are eliminated (e.g. c[-1]
becomes c
), trivial simplifications are carried out (e.g. log(k) - log(k) = 0
), and auxilliary variables are added for expressions that cannot become negative.
Auxilliary variables facilitate the solution of the NSSS problem. The package substitutes expressions which cannot become negative with auxilliary variables and adds another equation to the system of equations determining the NSSS. For example, log(c/q)
cannot be negative and c/q
is substituted by an auxilliary varaible ➕₁
and an additional equation is added: ➕₁ = c / q
.
Note that the ouput assumes the equations are equal to 0. As in, -z{δ} * ρ{δ} + z{δ}
implies -z{δ} * ρ{δ} + z{δ} = 0
and therefore: z{δ} * ρ{δ} = z{δ}
.
Arguments
𝓂
: object created by@model
and@parameters
.
Returns
Vector{String}
of the NSSS equations.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z{TFP}[1]) * k[0]^(α - 1) + (1 - exp(z{δ}[1]) * δ))
c[0] + k[0] = (1 - exp(z{δ}[0])δ) * k[-1] + q[0]
q[0] = exp(z{TFP}[0]) * k[-1]^α
for shock in [TFP, δ]
z{shock}[0] = ρ{shock} * z{shock}[-1] + σ{shock} * (eps{shock}[x] + eps_news{shock}[x-1])
end
Δc_share[0] = log(c[0]/q[0]) - log(c[-1]/q[-1])
Δk_4q[0] = log(k[0]) - log(k[-4])
end
@parameters RBC begin
σ = 0.01
ρ = 0.2
capital_to_output = 1.5
k[ss] / (4 * q[ss]) = capital_to_output | δ
alpha = .5
α = alpha
β = 0.95
end
get_steady_state_equations(RBC)
# output
9-element Vector{String}:
"(-β * ((k ^ (α - 1) * α * exp(z{TFP}) - δ * exp(z{δ})) + 1)) / c + 1 / c"
"((c - k * (-δ * exp(z{δ}) + 1)) + k) - q"
"-(k ^ α) * exp(z{TFP}) + q"
"-z{TFP} * ρ{TFP} + z{TFP}"
"-z{δ} * ρ{δ} + z{δ}"
"➕₁ - c / q"
"➕₂ - c / q"
"(Δc_share - log(➕₁)) + log(➕₂)"
"Δk_4q - 0"
MacroModelling.get_stochastic_steady_state
— MethodWrapper for get_steady_state
with stochastic = true
.
MacroModelling.get_third_order_solution
— MethodWrapper for get_solution
with algorithm = :third_order
.
MacroModelling.get_var
— FunctionWrapper for get_moments
with variance = true
and non_stochastic_steady_state = false, standard_deviation = false, covariance = false
.
MacroModelling.get_var_decomp
— FunctionMacroModelling.get_variables
— Methodget_variables(𝓂)
Returns the variables of the model without timing subscripts and not including auxilliary variables.
In case programmatic model writing was used this function returns the parsed variables (see z
in Examples
).
Arguments
𝓂
: object created by@model
and@parameters
.
Returns
Vector{String}
of the variables.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z{TFP}[1]) * k[0]^(α - 1) + (1 - exp(z{δ}[1]) * δ))
c[0] + k[0] = (1 - exp(z{δ}[0])δ) * k[-1] + q[0]
q[0] = exp(z{TFP}[0]) * k[-1]^α
for shock in [TFP, δ]
z{shock}[0] = ρ{shock} * z{shock}[-1] + σ{shock} * (eps{shock}[x] + eps_news{shock}[x-1])
end
Δc_share[0] = log(c[0]/q[0]) - log(c[-1]/q[-1])
Δk_4q[0] = log(k[0]) - log(k[-4])
end
@parameters RBC begin
σ = 0.01
ρ = 0.2
capital_to_output = 1.5
k[ss] / (4 * q[ss]) = capital_to_output | δ
alpha = .5
α = alpha
β = 0.95
end
get_variables(RBC)
# output
7-element Vector{String}:
"c"
"k"
"q"
"z{TFP}"
"z{δ}"
"Δc_share"
"Δk_4q"
MacroModelling.get_variance
— MethodWrapper for get_moments
with variance = true
and non_stochastic_steady_state = false, standard_deviation = false, covariance = false
.
MacroModelling.get_variance_decomposition
— Methodget_variance_decomposition(
𝓂;
parameters,
verbose,
tol,
quadratic_matrix_equation_algorithm,
lyapunov_algorithm
)
Return the variance decomposition of endogenous variables with regards to the shocks using the linearised solution.
If occasionally binding constraints are present in the model, they are not taken into account here.
Arguments
𝓂
: object created by@model
and@parameters
.
Keyword Arguments
parameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
lyapunov_algorithm
[Default::doubling
, Type:Symbol
]: algorithm to solve Lyapunov equation (A * X * A' + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:gmres
tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
KeyedArray
with variables in rows, and shocks in columns.
Examples
using MacroModelling
@model RBC_CME begin
y[0]=A[0]*k[-1]^alpha
1/c[0]=beta*1/c[1]*(alpha*A[1]*k[0]^(alpha-1)+(1-delta))
1/c[0]=beta*1/c[1]*(R[0]/Pi[+1])
R[0] * beta =(Pi[0]/Pibar)^phi_pi
A[0]*k[-1]^alpha=c[0]+k[0]-(1-delta*z_delta[0])*k[-1]
z_delta[0] = 1 - rho_z_delta + rho_z_delta * z_delta[-1] + std_z_delta * delta_eps[x]
A[0] = 1 - rhoz + rhoz * A[-1] + std_eps * eps_z[x]
end
@parameters RBC_CME begin
alpha = .157
beta = .999
delta = .0226
Pibar = 1.0008
phi_pi = 1.5
rhoz = .9
std_eps = .0068
rho_z_delta = .9
std_z_delta = .005
end
get_variance_decomposition(RBC_CME)
# output
2-dimensional KeyedArray(NamedDimsArray(...)) with keys:
↓ Variables ∈ 7-element Vector{Symbol}
→ Shocks ∈ 2-element Vector{Symbol}
And data, 7×2 Matrix{Float64}:
(:delta_eps) (:eps_z)
(:A) 9.78485e-31 1.0
(:Pi) 0.0156771 0.984323
(:R) 0.0156771 0.984323
(:c) 0.0134672 0.986533
(:k) 0.00869568 0.991304
(:y) 0.000313462 0.999687
(:z_delta) 1.0 0.0
MacroModelling.gr_backend
— Functiongr_backend()
Renaming and reexport of Plot.jl function gr()
to define GR.jl as backend
MacroModelling.import_dynare
— FunctionMacroModelling.import_model
— FunctionMacroModelling.plot_IRF
— FunctionSee plot_irf
MacroModelling.plot_conditional_forecast
— Methodplot_conditional_forecast(
𝓂,
conditions;
shocks,
initial_state,
periods,
parameters,
variables,
conditions_in_levels,
algorithm,
levels,
show_plots,
save_plots,
save_plots_format,
save_plots_path,
plots_per_page,
plot_attributes,
verbose,
tol,
quadratic_matrix_equation_algorithm,
sylvester_algorithm,
lyapunov_algorithm
)
Plot the conditional forecast given restrictions on endogenous variables and shocks (optional). By default, the values represent absolute deviations from the relevant steady state (see levels
for details). The non-stochastic steady state (NSSS) is relevant for first order solutions and the stochastic steady state for higher order solutions. A constrained minimisation problem is solved to find the combination of shocks with the smallest squared magnitude fulfilling the conditions.
The left axis shows the level, and the right axis the deviation from the relevant steady state. The horizontal black line indicates the relevant steady state. Variable names are above the subplots and the title provides information about the model, shocks and number of pages per shock.
If occasionally binding constraints are present in the model, they are not taken into account here.
Arguments
𝓂
: object created by@model
and@parameters
.conditions
[Type:Union{Matrix{Union{Nothing,Float64}}, SparseMatrixCSC{Float64}, KeyedArray{Union{Nothing,Float64}}, KeyedArray{Float64}}
]: conditions for which to find the corresponding shocks. The input can have multiple formats, but for all types of entries the first dimension corresponds to variables and the second dimension to the number of periods. The conditions can be specified using a matrix of typeMatrix{Union{Nothing,Float64}}
. In this case the conditions are matrix elements of typeFloat64
and all remaining (free) entries arenothing
. You can also use aSparseMatrixCSC{Float64}
as input. In this case only non-zero elements are taken as conditions. Note that you cannot condition variables to be zero using aSparseMatrixCSC{Float64}
as input (use other input formats to do so). Another possibility to input conditions is by using aKeyedArray
. You can use aKeyedArray{Union{Nothing,Float64}}
where, similar toMatrix{Union{Nothing,Float64}}
, all entries of typeFloat64
are recognised as conditions and all other entries have to benothing
. Furthermore, you can specify in the primary axis a subset of variables (of typeSymbol
orString
) for which you specify conditions and all other variables are considered free. The same goes for the case when you useKeyedArray{Float64}}
as input, whereas in this case the conditions for the specified variables bind for all periods specified in theKeyedArray
, because there are nonothing
entries permitted with this type.
Keyword Arguments
shocks
[Default:nothing
, Type:Union{Matrix{Union{Nothing,Float64}}, SparseMatrixCSC{Float64}, KeyedArray{Union{Nothing,Float64}}, KeyedArray{Float64}, Nothing}
]: known values of shocks. This argument allows the user to include certain shock values. By entering restrictions on the shocks in this way the problem to match the conditions on endogenous variables is restricted to the remaining free shocks in the repective period. The input can have multiple formats, but for all types of entries the first dimension corresponds to shocks and the second dimension to the number of periods.shocks
can be specified using a matrix of typeMatrix{Union{Nothing,Float64}}
. In this case the shocks are matrix elements of typeFloat64
and all remaining (free) entries arenothing
. You can also use aSparseMatrixCSC{Float64}
as input. In this case only non-zero elements are taken as certain shock values. Note that you cannot condition shocks to be zero using aSparseMatrixCSC{Float64}
as input (use other input formats to do so). Another possibility to input known shocks is by using aKeyedArray
. You can use aKeyedArray{Union{Nothing,Float64}}
where, similar toMatrix{Union{Nothing,Float64}}
, all entries of typeFloat64
are recognised as known shocks and all other entries have to benothing
. Furthermore, you can specify in the primary axis a subset of shocks (of typeSymbol
orString
) for which you specify values and all other shocks are considered free. The same goes for the case when you useKeyedArray{Float64}}
as input, whereas in this case the values for the specified shocks bind for all periods specified in theKeyedArray
, because there are nonothing
entries permitted with this type.initial_state
[Default:[0.0]
, Type:Union{Vector{Vector{Float64}},Vector{Float64}}
]: The initial state defines the starting point for the model. In the case of pruned solution algorithms the initial state can be given as multiple state vectors (Vector{Vector{Float64}}
). In this case the initial state must be given in deviations from the non-stochastic steady state. In all other cases the initial state must be given in levels. If a pruned solution algorithm is selected andinitial_state
is aVector{Float64}
then it impacts the first order initial state vector only. The state includes all variables as well as exogenous variables in leads or lags if present.get_irf(𝓂, shocks = :none, variables = :all, periods = 1)
returns aKeyedArray
with all variables.periods
[Default:40
, Type:Int
]: the total number of periods is the sum of the argument provided here and the maximum of periods of the shocks or conditions argument.parameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.variables
[Default::all_excluding_obc
]: variables for which to show the results. Inputs can be a variable name passed on as either aSymbol
orString
(e.g.:y
or "y"), orTuple
,Matrix
orVector
ofString
orSymbol
. Any variables not part of the model will trigger a warning.:all_excluding_auxilliary_and_obc
contains all shocks less those related to auxilliary variables and related to occasionally binding constraints (obc).:all_excluding_obc
contains all shocks less those related to auxilliary variables.:all
will contain all variables.conditions_in_levels
[Default:true
, Type:Bool
]: indicator whether the conditions are provided in levels. Iftrue
the input to the conditions argument will have the non-stochastic steady state substracted.algorithm
[Default::first_order
, Type:Symbol
]: algorithm to solve for the dynamics of the model. Available algorithms::first_order
,:second_order
,:pruned_second_order
,:third_order
,:pruned_third_order
levels
[Default:false
, Type:Bool
]: return levels or absolute deviations from the relevant steady state corresponding to the solution algorithm (e.g. stochastic steady state for higher order solution algorithms).show_plots
[Default:true
, Type:Bool
]: show plots. Separate plots per shocks and varibles depending on number of variables andplots_per_page
.save_plots
[Default:false
, Type:Bool
]: switch to save plots using path and extension fromsave_plots_path
andsave_plots_format
. Separate files per shocks and variables depending on number of variables andplots_per_page
save_plots_format
[Default::pdf
, Type:Symbol
]: output format of saved plots. See input formats compatible with GR for valid formats.save_plots_path
[Default:pwd()
, Type:String
]: path where to save plotsplots_per_page
[Default:9
, Type:Int
]: how many plots to show per pageplot_attributes
[Default:Dict()
, Type:Dict
]: pass on plot attributes for the top-level plot (see https://docs.juliaplots.org/latest/generated/attributesplot/). E.g. Dict(:plottitlefontcolor => :red).quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
sylvester_algorithm
[Default: function of size of problem, with smaller problems::doubling
, and larger problems::bicgstab
, Type:Union{Symbol,Vector{Symbol},Tuple{Symbol,Vararg{Symbol}}}
]: algorithm to solve Sylvester equation (A * X * B + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:dqgmres
,:gmres
. Input argument can be up to two elements in aVector
orTuple
. The first (second) element corresponds to the second (third) order perturbation solutions' Sylvester equation. If only one element is provided it corresponds to the second order perturbation solutions' Sylvester equation.lyapunov_algorithm
[Default::doubling
, Type:Symbol
]: algorithm to solve Lyapunov equation (A * X * A' + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:gmres
tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
Vector{Plot}
of individual plots
Examples
using MacroModelling, StatsPlots
@model RBC_CME begin
y[0]=A[0]*k[-1]^alpha
1/c[0]=beta*1/c[1]*(alpha*A[1]*k[0]^(alpha-1)+(1-delta))
1/c[0]=beta*1/c[1]*(R[0]/Pi[+1])
R[0] * beta =(Pi[0]/Pibar)^phi_pi
A[0]*k[-1]^alpha=c[0]+k[0]-(1-delta*z_delta[0])*k[-1]
z_delta[0] = 1 - rho_z_delta + rho_z_delta * z_delta[-1] + std_z_delta * delta_eps[x]
A[0] = 1 - rhoz + rhoz * A[-1] + std_eps * eps_z[x]
end
@parameters RBC_CME begin
alpha = .157
beta = .999
delta = .0226
Pibar = 1.0008
phi_pi = 1.5
rhoz = .9
std_eps = .0068
rho_z_delta = .9
std_z_delta = .005
end
# c is conditioned to deviate by 0.01 in period 1 and y is conditioned to deviate by 0.02 in period 3
conditions = KeyedArray(Matrix{Union{Nothing,Float64}}(undef,2,2),Variables = [:c,:y], Periods = 1:2)
conditions[1,1] = .01
conditions[2,3] = .02
# in period 2 second shock (eps_z) is conditioned to take a value of 0.05
shocks = Matrix{Union{Nothing,Float64}}(undef,2,1)
shocks[1,1] = .05
plot_conditional_forecast(RBC_CME, conditions, shocks = shocks, conditions_in_levels = false)
# The same can be achieved with the other input formats:
# conditions = Matrix{Union{Nothing,Float64}}(undef,7,2)
# conditions[4,1] = .01
# conditions[6,2] = .02
# using SparseArrays
# conditions = spzeros(7,2)
# conditions[4,1] = .01
# conditions[6,2] = .02
# shocks = KeyedArray(Matrix{Union{Nothing,Float64}}(undef,1,1),Variables = [:delta_eps], Periods = [1])
# shocks[1,1] = .05
# using SparseArrays
# shocks = spzeros(2,1)
# shocks[1,1] = .05
MacroModelling.plot_conditional_variance_decomposition
— Methodplot_conditional_variance_decomposition(
𝓂;
periods,
variables,
parameters,
show_plots,
save_plots,
save_plots_format,
save_plots_path,
plots_per_page,
plot_attributes,
max_elements_per_legend_row,
extra_legend_space,
verbose,
tol,
quadratic_matrix_equation_algorithm,
lyapunov_algorithm
)
Plot conditional variance decomposition of the model.
The vertical axis shows the share of the shocks variance contribution, and horizontal axis the period of the variance decomposition. The stacked bars represent each shocks variance contribution at a specific time horizon.
If occasionally binding constraints are present in the model, they are not taken into account here.
Arguments
𝓂
: object created by@model
and@parameters
.
Keyword Arguments
periods
[Default:40
, Type:Int
]: number of periods for which to calculate the output. In case a matrix of shocks was provided, periods defines how many periods after the series of shocks the output continues.variables
[Default::all_excluding_obc
]: variables for which to show the results. Inputs can be a variable name passed on as either aSymbol
orString
(e.g.:y
or "y"), orTuple
,Matrix
orVector
ofString
orSymbol
. Any variables not part of the model will trigger a warning.:all_excluding_auxilliary_and_obc
contains all shocks less those related to auxilliary variables and related to occasionally binding constraints (obc).:all_excluding_obc
contains all shocks less those related to auxilliary variables.:all
will contain all variables.parameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.show_plots
[Default:true
, Type:Bool
]: show plots. Separate plots per shocks and varibles depending on number of variables andplots_per_page
.save_plots
[Default:false
, Type:Bool
]: switch to save plots using path and extension fromsave_plots_path
andsave_plots_format
. Separate files per shocks and variables depending on number of variables andplots_per_page
save_plots_format
[Default::pdf
, Type:Symbol
]: output format of saved plots. See input formats compatible with GR for valid formats.save_plots_path
[Default:pwd()
, Type:String
]: path where to save plotsplots_per_page
[Default:9
, Type:Int
]: how many plots to show per pageplot_attributes
[Default:Dict()
, Type:Dict
]: pass on plot attributes for the top-level plot (see https://docs.juliaplots.org/latest/generated/attributesplot/). E.g. Dict(:plottitlefontcolor => :red).max_elements_per_legend_row
[Default:4
, Type:Int
]: maximum number of elements per legend row. In other words, number of columns in legend.extra_legend_space
[Default:0.0
, Type:Float64
]: space between the plots and the legend (useful if the plots overlap the legend).quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
lyapunov_algorithm
[Default::doubling
, Type:Symbol
]: algorithm to solve Lyapunov equation (A * X * A' + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:gmres
tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
Vector{Plot}
of individual plots
Examples
using MacroModelling, StatsPlots
@model RBC_CME begin
y[0]=A[0]*k[-1]^alpha
1/c[0]=beta*1/c[1]*(alpha*A[1]*k[0]^(alpha-1)+(1-delta))
1/c[0]=beta*1/c[1]*(R[0]/Pi[+1])
R[0] * beta =(Pi[0]/Pibar)^phi_pi
A[0]*k[-1]^alpha=c[0]+k[0]-(1-delta*z_delta[0])*k[-1]
z_delta[0] = 1 - rho_z_delta + rho_z_delta * z_delta[-1] + std_z_delta * delta_eps[x]
A[0] = 1 - rhoz + rhoz * A[-1] + std_eps * eps_z[x]
end
@parameters RBC_CME begin
alpha = .157
beta = .999
delta = .0226
Pibar = 1.0008
phi_pi = 1.5
rhoz = .9
std_eps = .0068
rho_z_delta = .9
std_z_delta = .005
end
plot_conditional_variance_decomposition(RBC_CME)
MacroModelling.plot_fevd
— FunctionMacroModelling.plot_forecast_error_variance_decomposition
— FunctionMacroModelling.plot_girf
— MethodWrapper for plot_irf
with generalised_irf = true
.
MacroModelling.plot_irf
— Methodplot_irf(
𝓂;
periods,
shocks,
variables,
parameters,
show_plots,
save_plots,
save_plots_format,
save_plots_path,
plots_per_page,
algorithm,
shock_size,
negative_shock,
generalised_irf,
initial_state,
ignore_obc,
plot_attributes,
verbose,
tol,
quadratic_matrix_equation_algorithm,
sylvester_algorithm,
lyapunov_algorithm
)
Plot impulse response functions (IRFs) of the model.
The left axis shows the level, and the right axis the deviation from the relevant steady state. The non-stochastic steady state is relevant for first order solutions and the stochastic steady state for higher order solutions. The horizontal black line indicates the relevant steady state. Variable names are above the subplots and the title provides information about the model, shocks and number of pages per shock.
If the model contains occasionally binding constraints and ignore_obc = false
they are enforced using shocks.
Arguments
𝓂
: object created by@model
and@parameters
.
Keyword Arguments
periods
[Default:40
, Type:Int
]: number of periods for which to calculate the output. In case a matrix of shocks was provided, periods defines how many periods after the series of shocks the output continues.shocks
[Default::all_excluding_obc
]: shocks for which to calculate the IRFs. Inputs can be a shock name passed on as either aSymbol
orString
(e.g.:y
, or "y"), orTuple
,Matrix
orVector
ofString
orSymbol
.:simulate
triggers random draws of all shocks (excluding occasionally binding constraints (obc) related shocks).:all_excluding_obc
will contain all shocks but not the obc related ones.:all
will contain also the obc related shocks. A series of shocks can be passed on using either aMatrix{Float64}
, or aKeyedArray{Float64}
as input with shocks (Symbol
orString
) in rows and periods in columns. The period of the simulation will correspond to the length of the input in the period dimension + the number of periods defined inperiods
. If the series of shocks is input as aKeyedArray{Float64}
make sure to name the rows with valid shock names of typeSymbol
. Any shocks not part of the model will trigger a warning.:none
in combination with aninitial_state
can be used for deterministic simulations.variables
[Default::all_excluding_obc
]: variables for which to show the results. Inputs can be a variable name passed on as either aSymbol
orString
(e.g.:y
or "y"), orTuple
,Matrix
orVector
ofString
orSymbol
. Any variables not part of the model will trigger a warning.:all_excluding_auxilliary_and_obc
contains all shocks less those related to auxilliary variables and related to occasionally binding constraints (obc).:all_excluding_obc
contains all shocks less those related to auxilliary variables.:all
will contain all variables.parameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.algorithm
[Default::first_order
, Type:Symbol
]: algorithm to solve for the dynamics of the model. Available algorithms::first_order
,:second_order
,:pruned_second_order
,:third_order
,:pruned_third_order
shock_size
[Default:1
, Type:Real
]: affects the size of shocks as long as they are not set to:none
.negative_shock
[Default:false
, Type:Bool
]: calculate IRFs for a negative shock.generalised_irf
[Default:false
, Type:Bool
]: calculate generalised IRFs. Relevant for nonlinear (higher order perturbation) solutions only. Reference steady state for deviations is the stochastic steady state.initial_state
has no effect on generalised IRFs. Occasionally binding constraint are not respected for generalised IRF.initial_state
[Default:[0.0]
, Type:Union{Vector{Vector{Float64}},Vector{Float64}}
]: The initial state defines the starting point for the model. In the case of pruned solution algorithms the initial state can be given as multiple state vectors (Vector{Vector{Float64}}
). In this case the initial state must be given in deviations from the non-stochastic steady state. In all other cases the initial state must be given in levels. If a pruned solution algorithm is selected andinitial_state
is aVector{Float64}
then it impacts the first order initial state vector only. The state includes all variables as well as exogenous variables in leads or lags if present.get_irf(𝓂, shocks = :none, variables = :all, periods = 1)
returns aKeyedArray
with all variables.ignore_obc
[Default:false
, Type:Bool
]: solve the model ignoring the occasionally binding constraints.show_plots
[Default:true
, Type:Bool
]: show plots. Separate plots per shocks and varibles depending on number of variables andplots_per_page
.save_plots
[Default:false
, Type:Bool
]: switch to save plots using path and extension fromsave_plots_path
andsave_plots_format
. Separate files per shocks and variables depending on number of variables andplots_per_page
save_plots_format
[Default::pdf
, Type:Symbol
]: output format of saved plots. See input formats compatible with GR for valid formats.save_plots_path
[Default:pwd()
, Type:String
]: path where to save plotsplots_per_page
[Default:9
, Type:Int
]: how many plots to show per pageplot_attributes
[Default:Dict()
, Type:Dict
]: pass on plot attributes for the top-level plot (see https://docs.juliaplots.org/latest/generated/attributesplot/). E.g. Dict(:plottitlefontcolor => :red).quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
sylvester_algorithm
[Default: function of size of problem, with smaller problems::doubling
, and larger problems::bicgstab
, Type:Union{Symbol,Vector{Symbol},Tuple{Symbol,Vararg{Symbol}}}
]: algorithm to solve Sylvester equation (A * X * B + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:dqgmres
,:gmres
. Input argument can be up to two elements in aVector
orTuple
. The first (second) element corresponds to the second (third) order perturbation solutions' Sylvester equation. If only one element is provided it corresponds to the second order perturbation solutions' Sylvester equation.lyapunov_algorithm
[Default::doubling
, Type:Symbol
]: algorithm to solve Lyapunov equation (A * X * A' + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:gmres
tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
Vector{Plot}
of individual plots
Examples
using MacroModelling, StatsPlots
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z[1]) * k[0]^(α - 1) + (1 - δ))
c[0] + k[0] = (1 - δ) * k[-1] + q[0]
q[0] = exp(z[0]) * k[-1]^α
z[0] = ρ * z[-1] + std_z * eps_z[x]
end;
@parameters RBC begin
std_z = 0.01
ρ = 0.2
δ = 0.02
α = 0.5
β = 0.95
end;
plot_irf(RBC)
MacroModelling.plot_irfs
— FunctionSee plot_irf
MacroModelling.plot_model_estimates
— Methodplot_model_estimates(
𝓂,
data;
parameters,
algorithm,
filter,
warmup_iterations,
variables,
shocks,
presample_periods,
data_in_levels,
shock_decomposition,
smooth,
show_plots,
save_plots,
save_plots_format,
save_plots_path,
plots_per_page,
transparency,
max_elements_per_legend_row,
extra_legend_space,
plot_attributes,
verbose,
tol,
quadratic_matrix_equation_algorithm,
sylvester_algorithm,
lyapunov_algorithm
)
Plot model estimates of the variables given the data. The default plot shows the estimated variables, shocks, and the data underlying the estimates. The estimates are based on the Kalman smoother or filter (depending on the smooth
keyword argument) or inversion filter using the provided data and solution of the model.
The left axis shows the level, and the right the deviation from the relevant steady state. The non-stochastic steady state (NSSS) is relevant for first order solutions and the stochastic steady state for higher order solutions. The horizontal black line indicates the relevant steady state. Variable names are above the subplots and the title provides information about the model, shocks, and number of pages per shock. In case shock_decomposition = true
, the plot shows the variables, shocks, and data in absolute deviations from the relevant steady state as a stacked bar chart per period.
For higher order perturbation solutions the decomposition additionally contains a term Nonlinearities
. This term represents the nonlinear interaction between the states in the periods after the shocks arrived and in the case of pruned third order, the interaciton between (pruned second order) states and contemporaneous shocks.
If occasionally binding constraints are present in the model, they are not taken into account here.
Arguments
𝓂
: object created by@model
and@parameters
.data
[Type:KeyedArray
]: data matrix with variables (String
orSymbol
) in rows and time in columns
Keyword Arguments
parameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.algorithm
[Default::first_order
, Type:Symbol
]: algorithm to solve for the dynamics of the model. Available algorithms::first_order
,:second_order
,:pruned_second_order
,:third_order
,:pruned_third_order
filter
[Default::kalman
, Type:Symbol
]: filter used to compute the variables, and shocks given the data, model, and parameters. The Kalman filter only works for linear problems, whereas the inversion filter (:inversion
) works for linear and nonlinear models. If a nonlinear solution algorithm is selected, the inversion filter is used.variables
[Default::all_excluding_obc
]: variables for which to show the results. Inputs can be a variable name passed on as either aSymbol
orString
(e.g.:y
or "y"), orTuple
,Matrix
orVector
ofString
orSymbol
. Any variables not part of the model will trigger a warning.:all_excluding_auxilliary_and_obc
contains all shocks less those related to auxilliary variables and related to occasionally binding constraints (obc).:all_excluding_obc
contains all shocks less those related to auxilliary variables.:all
will contain all variables.shocks
[Default::all
]: shocks for which to plot the estimates. Inputs can be either aSymbol
(e.g.:y
, or:all
),Tuple{Symbol, Vararg{Symbol}}
,Matrix{Symbol}
, orVector{Symbol}
.presample_periods
[Default:0
, Type:Int
]: periods at the beginning of the data which are not plotted. Useful if you want to filter for all periods but focus only on a certain period later in the sample.data_in_levels
[Default:true
, Type:Bool
]: indicator whether the data is provided in levels. Iftrue
the input to the data argument will have the non stochastic steady state substracted.shock_decomposition
[Default:false
, Type:Bool
]: whether to show the contribution of the shocks to the deviations from NSSS for each variable. Iffalse
, the plot shows the values of the selected variables, data, and shockssmooth
[Default:true
, Type:Bool
]: whether to return smoothed (true
) or filtered (false
) shocks/variables. Only works for the Kalman filter. The inversion filter only returns filtered shocks/variables.show_plots
[Default:true
, Type:Bool
]: show plots. Separate plots per shocks and varibles depending on number of variables andplots_per_page
.save_plots
[Default:false
, Type:Bool
]: switch to save plots using path and extension fromsave_plots_path
andsave_plots_format
. Separate files per shocks and variables depending on number of variables andplots_per_page
save_plots_format
[Default::pdf
, Type:Symbol
]: output format of saved plots. See input formats compatible with GR for valid formats.save_plots_path
[Default:pwd()
, Type:String
]: path where to save plotsplots_per_page
[Default:9
, Type:Int
]: how many plots to show per pagetransparency
[Default:0.6
, Type:Float64
]: transparency of barsmax_elements_per_legend_row
[Default:4
, Type:Int
]: maximum number of elements per legend row. In other words, number of columns in legend.extra_legend_space
[Default:0.0
, Type:Float64
]: space between the plots and the legend (useful if the plots overlap the legend).plot_attributes
[Default:Dict()
, Type:Dict
]: pass on plot attributes for the top-level plot (see https://docs.juliaplots.org/latest/generated/attributesplot/). E.g. Dict(:plottitlefontcolor => :red).quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
sylvester_algorithm
[Default: function of size of problem, with smaller problems::doubling
, and larger problems::bicgstab
, Type:Union{Symbol,Vector{Symbol},Tuple{Symbol,Vararg{Symbol}}}
]: algorithm to solve Sylvester equation (A * X * B + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:dqgmres
,:gmres
. Input argument can be up to two elements in aVector
orTuple
. The first (second) element corresponds to the second (third) order perturbation solutions' Sylvester equation. If only one element is provided it corresponds to the second order perturbation solutions' Sylvester equation.lyapunov_algorithm
[Default::doubling
, Type:Symbol
]: algorithm to solve Lyapunov equation (A * X * A' + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:gmres
tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
Vector{Plot}
of individual plots
Examples
using MacroModelling, StatsPlots
@model RBC_CME begin
y[0]=A[0]*k[-1]^alpha
1/c[0]=beta*1/c[1]*(alpha*A[1]*k[0]^(alpha-1)+(1-delta))
1/c[0]=beta*1/c[1]*(R[0]/Pi[+1])
R[0] * beta =(Pi[0]/Pibar)^phi_pi
A[0]*k[-1]^alpha=c[0]+k[0]-(1-delta*z_delta[0])*k[-1]
z_delta[0] = 1 - rho_z_delta + rho_z_delta * z_delta[-1] + std_z_delta * delta_eps[x]
A[0] = 1 - rhoz + rhoz * A[-1] + std_eps * eps_z[x]
end
@parameters RBC_CME begin
alpha = .157
beta = .999
delta = .0226
Pibar = 1.0008
phi_pi = 1.5
rhoz = .9
std_eps = .0068
rho_z_delta = .9
std_z_delta = .005
end
simulation = simulate(RBC_CME)
plot_model_estimates(RBC_CME, simulation([:k],:,:simulate))
MacroModelling.plot_shock_decomposition
— MethodWrapper for plot_model_estimates
with shock_decomposition = true
.
MacroModelling.plot_simulation
— MethodWrapper for plot_irf
with shocks = :simulate
and periods = 100
.
MacroModelling.plot_simulations
— MethodWrapper for plot_irf
with shocks = :simulate
and periods = 100
.
MacroModelling.plot_solution
— Methodplot_solution(
𝓂,
state;
variables,
algorithm,
σ,
parameters,
ignore_obc,
show_plots,
save_plots,
save_plots_format,
save_plots_path,
plots_per_page,
plot_attributes,
verbose,
tol,
quadratic_matrix_equation_algorithm,
sylvester_algorithm,
lyapunov_algorithm
)
Plot the solution of the model (mapping of past states to present variables) around the relevant steady state (e.g. higher order perturbation algorithms are centered around the stochastic steady state). Each plot shows the relationship between the chosen state (defined in state
) and one of the chosen variables (defined in variables
).
The relevant steady state is plotted along with the mapping from the chosen past state to one present variable per plot. All other (non-chosen) states remain in the relevant steady state.
In the case of pruned higher order solutions there are as many (latent) state vectors as the perturbation order. The first and third order baseline state vectors are the non stochastic steady state and the second order baseline state vector is the stochastic steady state. Deviations for the chosen state are only added to the first order baseline state. The plot shows the mapping from σ
standard deviations (first order) added to the first order non stochastic steady state and the present variables. Note that there is no unique mapping from the "pruned" states and the "actual" reported state. Hence, the plots shown are just one realisation of inifitely many possible mappings.
If the model contains occasionally binding constraints and ignore_obc = false
they are enforced using shocks.
Arguments
𝓂
: object created by@model
and@parameters
.state
[Type:Union{Symbol,String}
]: state variable to be shown on x-axis.
Keyword Arguments
variables
[Default::all_excluding_obc
]: variables for which to show the results. Inputs can be a variable name passed on as either aSymbol
orString
(e.g.:y
or "y"), orTuple
,Matrix
orVector
ofString
orSymbol
. Any variables not part of the model will trigger a warning.:all_excluding_auxilliary_and_obc
contains all shocks less those related to auxilliary variables and related to occasionally binding constraints (obc).:all_excluding_obc
contains all shocks less those related to auxilliary variables.:all
will contain all variables.algorithm
[Default::first_order
, Type: Union{Symbol,Vector{Symbol}}]: solution algorithm for which to show the IRFs. Can be more than one, e.g.:[:second_order,:pruned_third_order]
"σ
[Default:2
, Type:Union{Int64,Float64}
]: defines the range of the state variable around the (non) stochastic steady state in standard deviations. E.g. a value of 2 means that the state variable is plotted for values of the (non) stochastic steady state in standard deviations +/- 2 standard deviations.parameters
[Default:nothing
]: Ifnothing
is provided, the solution is calculated for the parameters defined previously. Acceptable inputs are aVector
of parameter values, aVector
orTuple
ofPair
s of the parameterSymbol
orString
and value. If the new parameter values differ from the previously defined the solution will be recalculated.ignore_obc
[Default:false
, Type:Bool
]: solve the model ignoring the occasionally binding constraints.show_plots
[Default:true
, Type:Bool
]: show plots. Separate plots per shocks and varibles depending on number of variables andplots_per_page
.save_plots
[Default:false
, Type:Bool
]: switch to save plots using path and extension fromsave_plots_path
andsave_plots_format
. Separate files per shocks and variables depending on number of variables andplots_per_page
save_plots_format
[Default::pdf
, Type:Symbol
]: output format of saved plots. See input formats compatible with GR for valid formats.save_plots_path
[Default:pwd()
, Type:String
]: path where to save plotsplots_per_page
[Default:6
, Type:Int
]: how many plots to show per pageplot_attributes
[Default:Dict()
, Type:Dict
]: pass on plot attributes for the top-level plot (see https://docs.juliaplots.org/latest/generated/attributesplot/). E.g. Dict(:plottitlefontcolor => :red).algorithm
[Default::first_order
, Type:Symbol
]: algorithm to solve for the dynamics of the model. Available algorithms::first_order
,:second_order
,:pruned_second_order
,:third_order
,:pruned_third_order
quadratic_matrix_equation_algorithm
[Default::schur
, Type:Symbol
]: algorithm to solve quadratic matrix equation (A * X ^ 2 + B * X + C = 0
). Available algorithms::schur
,:doubling
sylvester_algorithm
[Default: function of size of problem, with smaller problems::doubling
, and larger problems::bicgstab
, Type:Union{Symbol,Vector{Symbol},Tuple{Symbol,Vararg{Symbol}}}
]: algorithm to solve Sylvester equation (A * X * B + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:dqgmres
,:gmres
. Input argument can be up to two elements in aVector
orTuple
. The first (second) element corresponds to the second (third) order perturbation solutions' Sylvester equation. If only one element is provided it corresponds to the second order perturbation solutions' Sylvester equation.lyapunov_algorithm
[Default::doubling
, Type:Symbol
]: algorithm to solve Lyapunov equation (A * X * A' + C = X
). Available algorithms::doubling
,:bartels_stewart
,:bicgstab
,:gmres
tol
[Default:Tolerances()
, Type:Tolerances
]: define various tolerances for the algorithm used to solve the model. See documentation ofTolerances
for more details:?Tolerances
verbose
[Default:false
, Type:Bool
]: print information about results of the different solvers used to solve the model (non stochastic steady state solver, Sylvester equations, Lyapunov equation, and quadratic matrix equation).
Returns
Vector{Plot}
of individual plots
Examples
using MacroModelling, StatsPlots
@model RBC_CME begin
y[0]=A[0]*k[-1]^alpha
1/c[0]=beta*1/c[1]*(alpha*A[1]*k[0]^(alpha-1)+(1-delta))
1/c[0]=beta*1/c[1]*(R[0]/Pi[+1])
R[0] * beta =(Pi[0]/Pibar)^phi_pi
A[0]*k[-1]^alpha=c[0]+k[0]-(1-delta*z_delta[0])*k[-1]
z_delta[0] = 1 - rho_z_delta + rho_z_delta * z_delta[-1] + std_z_delta * delta_eps[x]
A[0] = 1 - rhoz + rhoz * A[-1] + std_eps * eps_z[x]
end
@parameters RBC_CME begin
alpha = .157
beta = .999
delta = .0226
Pibar = 1.0008
phi_pi = 1.5
rhoz = .9
std_eps = .0068
rho_z_delta = .9
std_z_delta = .005
end
plot_solution(RBC_CME, :k)
MacroModelling.plotlyjs_backend
— Functionplotlyjs_backend()
Renaming and reexport of Plot.jl function plotlyjs()
to define PlotlyJS.jl as backend
MacroModelling.simulate
— MethodWrapper for get_irf
with shocks = :simulate
. Function returns values in levels by default.
MacroModelling.ss
— MethodSee get_steady_state
MacroModelling.sss
— MethodWrapper for get_steady_state
with stochastic = true
.
MacroModelling.std
— FunctionWrapper for get_moments
with standard_deviation = true
and non_stochastic_steady_state = false, variance = false, covariance = false
.
MacroModelling.stdev
— FunctionWrapper for get_moments
with standard_deviation = true
and non_stochastic_steady_state = false, variance = false, covariance = false
.
MacroModelling.steady_state
— FunctionSee get_steady_state
MacroModelling.translate_dynare_file
— FunctionMacroModelling.translate_mod_file
— Methodtranslate_mod_file(path_to_mod_file)
Reads in a dynare
.mod-file, adapts the syntax, tries to capture parameter definitions, and writes a julia file in the same folder containing the model equations and parameters in MacroModelling.jl
syntax. This function is not guaranteed to produce working code. It's purpose is to make it easier to port a model from dynare
to MacroModelling.jl
.
The recommended workflow is to use this function to translate a .mod-file, and then adapt the output so that it runs and corresponds to the input.
Note that this function copies the .mod-file to a temporary folder and executes it there. All references within that .mod-file are therefore not valid (because those filesare not copied) and must be made copied into the .mod-file.
Arguments
path_to_mod_file
[Type:AbstractString
]: path including filename of the .mod-file to be translated
MacroModelling.var
— FunctionWrapper for get_moments
with variance = true
and non_stochastic_steady_state = false, standard_deviation = false, covariance = false
.
MacroModelling.write_dynare_file
— FunctionSee write_mod_file
MacroModelling.write_mod_file
— Methodwrite_mod_file(m)
Writes a dynare
.mod-file in the current working directory. This function is not guaranteed to produce working code. It's purpose is to make it easier to port a model from MacroModelling.jl
to dynare
.
The recommended workflow is to use this function to write a .mod-file, and then adapt the output so that it runs and corresponds to the input.
Arguments
𝓂
: object created by@model
and@parameters
.
MacroModelling.write_to_dynare
— FunctionSee write_mod_file
MacroModelling.write_to_dynare_file
— FunctionSee write_mod_file
MacroModelling.@model
— MacroParses the model equations and assigns them to an object.
Arguments
𝓂
: name of the object to be created containing the model information.ex
: equations
Optional arguments to be placed between 𝓂
and ex
max_obc_horizon
[Default:40
, Type:Int
]: maximum length of anticipated shocks and corresponding unconditional forecast horizon over which the occasionally binding constraint is to be enforced. Increase this number if no solution is found to enforce the constraint.
Variables must be defined with their time subscript in square brackets. Endogenous variables can have the following:
- present:
c[0]
- non-stcohastic steady state:
c[ss]
instead ofss
any of the following is also a valid flag for the non-stochastic steady state:ss
,stst
,steady
,steadystate
,steady_state
, and the parser is case-insensitive (SS
orsTst
will work as well). - past:
c[-1]
or any negative Integer: e.g.c[-12]
- future:
c[1]
or any positive Integer: e.g.c[16]
orc[+16]
Signed integers are recognised and parsed as such.
Exogenous variables (shocks) can have the following:
- present:
eps_z[x]
instead ofx
any of the following is also a valid flag for exogenous variables:ex
,exo
,exogenous
, and the parser is case-insensitive (Ex
orexoGenous
will work as well). - past:
eps_z[x-1]
- future:
eps_z[x+1]
Parameters enter the equations without square brackets.
If an equation contains a max
or min
operator, then the default dynamic (first order) solution of the model will enforce the occasionally binding constraint. You can choose to ignore it by setting ignore_obc = true
in the relevant function calls.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z[1]) * k[0]^(α - 1) + (1 - δ))
c[0] + k[0] = (1 - δ) * k[-1] + q[0]
q[0] = exp(z[0]) * k[-1]^α
z[0] = ρ * z[-1] + std_z * eps_z[x]
end
Programmatic model writing
Parameters and variables can be indexed using curly braces: e.g. c{H}[0]
, eps_z{F}[x]
, or α{H}
.
for
loops can be used to write models programmatically. They can either be used to generate expressions where you iterate over the time index or the index in curly braces:
- generate equation with different indices in curly braces:
for co in [H,F] C{co}[0] + X{co}[0] + Z{co}[0] - Z{co}[-1] end = for co in [H,F] Y{co}[0] end
- generate multiple equations with different indices in curly braces:
for co in [H, F] K{co}[0] = (1-delta{co}) * K{co}[-1] + S{co}[0] end
- generate equation with different time indices:
Y_annual[0] = for lag in -3:0 Y[lag] end
orR_annual[0] = for operator = :*, lag in -3:0 R[lag] end
MacroModelling.@parameters
— MacroAdds parameter values and calibration equations to the previously defined model. Allows to provide an initial guess for the non-stochastic steady state (NSSS).
Arguments
𝓂
: name of the object previously created containing the model information.ex
: parameter, parameters values, and calibration equations
Parameters can be defined in either of the following ways:
- plain number:
δ = 0.02
- expression containing numbers:
δ = 1/50
- expression containing other parameters:
δ = 2 * std_z
in this case it is irrelevant ifstd_z
is defined before or after. The definitons including other parameters are treated as a system of equaitons and solved accordingly. - expressions containing a target parameter and an equations with endogenous variables in the non-stochastic steady state, and other parameters, or numbers:
k[ss] / (4 * q[ss]) = 1.5 | δ
orα | 4 * q[ss] = δ * k[ss]
in this case the target parameter will be solved simultaneaously with the non-stochastic steady state using the equation defined with it.
Optional arguments to be placed between 𝓂
and ex
guess
[Type:Dict{Symbol, <:Real}, Dict{String, <:Real}}
]: Guess for the non-stochastic steady state. The keys must be the variable (and calibrated parameters) names and the values the guesses. Missing values are filled with standard starting values.verbose
[Default:false
, Type:Bool
]: print more information about how the non stochastic steady state is solvedsilent
[Default:false
, Type:Bool
]: do not print any informationsymbolic
[Default:false
, Type:Bool
]: try to solve the non stochastic steady state symbolically and fall back to a numerical solution if not possibleperturbation_order
[Default:1
, Type:Int
]: take derivatives only up to the specified order at this stage. In case you want to work with higher order perturbation later on, respective derivatives will be taken at that stage.simplify
[Default:true
, Type:Bool
]: whether to elminiate redundant variables and simplify the non stochastic steady state (NSSS) problem. Setting this tofalse
can speed up the process, but might make it harder to find the NSSS. If the model does not parse at all (at step 1 or 2), setting this option tofalse
might solve it.
Examples
using MacroModelling
@model RBC begin
1 / c[0] = (β / c[1]) * (α * exp(z[1]) * k[0]^(α - 1) + (1 - δ))
c[0] + k[0] = (1 - δ) * k[-1] + q[0]
q[0] = exp(z[0]) * k[-1]^α
z[0] = ρ * z[-1] + std_z * eps_z[x]
end
@parameters RBC verbose = true begin
std_z = 0.01
ρ = 0.2
δ = 0.02
α = 0.5
β = 0.95
end
@model RBC_calibrated begin
1 / c[0] = (β / c[1]) * (α * exp(z[1]) * k[0]^(α - 1) + (1 - δ))
c[0] + k[0] = (1 - δ) * k[-1] + q[0]
q[0] = exp(z[0]) * k[-1]^α
z[0] = ρ * z[-1] + std_z * eps_z[x]
end
@parameters RBC_calibrated verbose = true guess = Dict(:k => 3) begin
std_z = 0.01
ρ = 0.2
δ = 0.02
k[ss] / q[ss] = 2.5 | α
β = 0.95
end
Programmatic model writing
Variables and parameters indexed with curly braces can be either referenced specifically (e.g. c{H}[ss]
) or generally (e.g. alpha
). If they are referenced generaly the parse assumes all instances (indices) are meant. For example, in a model where alpha
has two indices H
and F
, the expression alpha = 0.3
is interpreted as two expressions: alpha{H} = 0.3
and alpha{F} = 0.3
. The same goes for calibration equations.