InflationEvalTools
Documentation for InflationEvalTools.
InflationEvalTools.InflationEvalTools
InflationEvalTools.DEFAULT_SEED
InflationEvalTools.GT_EVAL_B00
InflationEvalTools.GT_EVAL_B10
InflationEvalTools.GT_EVAL_T0010
InflationEvalTools.LOCAL_RNG
InflationEvalTools.RWTREND
InflationEvalTools.AbstractConfig
InflationEvalTools.AbstractEvalPeriod
InflationEvalTools.AbstractInflationParameter
InflationEvalTools.ArrayTrendFunction
InflationEvalTools.CompletePeriod
InflationEvalTools.CrossEvalConfig
InflationEvalTools.EvalPeriod
InflationEvalTools.InflationParameter
InflationEvalTools.ResampleFunction
InflationEvalTools.ResampleFunction
InflationEvalTools.ResampleFunction
InflationEvalTools.ResampleScrambleVarMonths
InflationEvalTools.SimConfig
InflationEvalTools.TrendAnalytical
InflationEvalTools.TrendExponential
InflationEvalTools.TrendFunction
InflationEvalTools.TrendIdentity
InflationEvalTools.TrendRandomWalk
InflationEvalTools.DEFAULT_RESAMPLE_FN
InflationEvalTools.DEFAULT_TREND_FN
InflationEvalTools.ParamTotalCPI
InflationEvalTools.ParamTotalCPILegacyRebase
InflationEvalTools.ParamTotalCPIRebase
InflationEvalTools.ParamWeightedMean
InflationEvalTools.absme_combination_weights
InflationEvalTools.add_ones
InflationEvalTools.average_mats
InflationEvalTools.combination_metrics
InflationEvalTools.combination_weights
InflationEvalTools.crossvalidate
InflationEvalTools.dict_config
InflationEvalTools.elastic_combination_weights
InflationEvalTools.eval_absme_online
InflationEvalTools.eval_absme_online
InflationEvalTools.eval_corr_online
InflationEvalTools.eval_corr_online
InflationEvalTools.eval_metrics
InflationEvalTools.eval_mse_online
InflationEvalTools.eval_mse_online
InflationEvalTools.eval_periods
InflationEvalTools.evalsim
InflationEvalTools.gentrayinfl
InflationEvalTools.get_param_function
InflationEvalTools.get_ranges
InflationEvalTools.lasso_combination_weights
InflationEvalTools.makesim
InflationEvalTools.method_name
InflationEvalTools.method_name
InflationEvalTools.method_tag
InflationEvalTools.method_tag
InflationEvalTools.metric_combination_weights
InflationEvalTools.param_gsbb_mod
InflationEvalTools.param_gsbb_mod
InflationEvalTools.param_sbb
InflationEvalTools.param_sbb
InflationEvalTools.pargentrayinfl
InflationEvalTools.period_tag
InflationEvalTools.ridge_combination_weights
InflationEvalTools.run_batch
InflationEvalTools.share_combination_weights
InflationEvalTools.InflationEvalTools
— ModuleInflationEvalTools
Tipos, funciones y demás utilidades de simulación para evaluación de medidas inflación.
InflationEvalTools.DEFAULT_SEED
— Constantconst DEFAULT_SEED
Semilla por defecto utilizada para el proceso de simulación y la reproducibilidad de los resultados.
InflationEvalTools.GT_EVAL_B00
— Constantconst GT_EVAL_B00 = EvalPeriod(Date(2001, 12), Date(2010, 12), "gt_b00")
Período por defecto para evaluación en la década de los años 2000, incluyendo el año 2010.
InflationEvalTools.GT_EVAL_B10
— Constantconst GT_EVAL_B10 = EvalPeriod(Date(2011, 12), Date(2021, 12), "gt_b10")
Período por defecto para evaluación en la década de los años 2010, incluyendo el año 2021.
InflationEvalTools.GT_EVAL_T0010
— Constantconst GT_EVAL_T0010 = EvalPeriod(Date(2011, 1), Date(2011, 11), "gt_t0010")
Período por defecto para evaluación en la transición de la década de los años 2000 a 2010.
InflationEvalTools.LOCAL_RNG
— Constantconst LOCAL_RNG = StableRNG(0)
Esta constante se utiliza para fijar el generador de números aleatorios en cada proceso local, utilizando el generador StableRNG
con semilla inicial cero. La semilla será alterada en cada iteración del proceso de simulación. Esto garantiza la reproducibilidad de los resultados por realización de remuestreo escogiendo la constante DEFAULT_SEED
.
InflationEvalTools.RWTREND
— ConstantRWTREND
Trayectoria de caminata aleatoria precalibrada para 292 períodos.
InflationEvalTools.AbstractConfig
— Typeabstract type AbstractConfig{F <: InflationFunction, R <:ResampleFunction, T <:TrendFunction} end
AbstractConfig
es un tipo abstracto para representar variantes de simulación que utilizan, en general, una función de inflación InflationFunction
, una función de remuestreo ResampleFunction
y una función de Tendencia TrendFunction
. Contiene el esquema general de la simulación.
InflationEvalTools.AbstractEvalPeriod
— Typeabstract type AbstractEvalPeriod
Tipo abstracto para representar tipos de períodos de evaluación.
Ver también: EvalPeriod
, CompletePeriod
.
InflationEvalTools.AbstractInflationParameter
— TypeTipo abstracto para representar los parámetros de inflación
InflationEvalTools.ArrayTrendFunction
— Typeabstract type ArrayTrendFunction <: TrendFunction end
Tipo para función de tendencia que almacena el vector de valores a aplicar a las variaciones intermensuales.
Utilización
function (trendfn::ArrayTrendFunction)(base::VarCPIBase{T}, range::UnitRange) where T
Especifica cómo aplicar la función de tendencia sobre un VarCPIBase con el rango de índices range
.
InflationEvalTools.CompletePeriod
— TypeCompletePeriod <: AbstractEvalPeriod
Tipo para representar el período completo de evaluación, correspondiente a los períodos de inflación del CountryStructure
de datos. El tag
por defecto para el período completo es vacío (""
), para que las métricas de evaluación en los resultados generados en evalsim
no tienen un prefijo, ya que es el período de evaluación principal. Este período se puede brindar a una configuración SimConfig
para evaluar sobre todo el rango de fechas de inflación simuladas.
Ejemplo
Creamos una instancia de este tipo para representar la evaluación sobre el período completo de las trayectorias de inflación generadas en las simulaciones.
julia> comp = CompletePeriod()
Período completo
Ver también: EvalPeriod
, GT_EVAL_B00
, GT_EVAL_B10
, GT_EVAL_T0010
InflationEvalTools.CrossEvalConfig
— TypeCrossEvalConfig{F, R, T} <:AbstractConfig{F, R, T}
CrossEvalConfig(ensemblefn, resamplefn, trendfn, paramfn, nsim, evalperiods)
CrossEvalConfig
es un tipo concreto que contiene la configuración base para generar simulaciones utilizando un conjunto de funciones de inflación a combinarse.
Recibe una
- función de inflación de conjunto
EnsembleFunction
, - una función de remuestreo
ResampleFunction
, - una función de Tendencia
TrendFunction
, - la cantidad de simulaciones a realizar
nsim
, - un período (o conjunto de períodos) de evaluación
EvalPeriod
para en los cuales se obtendrán métricas de evaluación de validación cruzada. El período de entrenamiento se considera desde el inicio de la muestra hasta el período anterior a cada período de evaluación dado.
Ejemplo
Considerando un conjunto de funciones de inflación, remuestreo, tendencia e inflación paramétrica:
julia> ensemblefn = EnsembleFunction(InflationPercentileEq(72), InflationPercentileWeighted(68));
julia> resamplefn = ResampleSBB(36);
julia> trendfn = TrendRandomWalk();
julia> paramfn = InflationTotalRebaseCPI(60);
Generamos una configuración del tipo CrossEvalConfig
con 10000 simulaciones, configurando dos períodos de evaluación para los métodos de validación cruzada.
julia> config = CrossEvalConfig(ensemblefn, resamplefn, trendfn, paramfn, 10000,
(EvalPeriod(Date(2016, 1), Date(2017, 12), "cv1617"),
EvalPeriod(Date(2017, 1), Date(2018, 12), "cv1718")))
CrossEvalConfig{InflationTotalRebaseCPI, ResampleSBB, TrendRandomWalk{Float32}}
|─> Función de inflación : ["Percentil equiponderado 72.0", "Percentil ponderado 68.0"]
|─> Función de remuestreo : Block bootstrap estacionario con bloque esperado 36
|─> Función de tendencia : Tendencia de caminata aleatoria
|─> Método de inflación paramétrica : Variación interanual IPC con cambios de base sintéticos (60, 0)
|─> Número de simulaciones : 10000
|─> Períodos de evaluación : cv1617:Jan-16-Dec-17 y cv1718:Jan-17-Dec-18
InflationEvalTools.EvalPeriod
— TypeEvalPeriod <: AbstractEvalPeriod
Tipo para representar un período de evaluación dado por las fechas startdate
y finaldate
. Se debe incluir una etiqueta en el campo tag
para adjuntar a los resultados generados en evalsim
. Este período se puede brindar a una configuración SimConfig
para evaluar sobre un rango de fechas determinado.
Ejemplo
Creamos un período de evaluación denominado b2010
al generar los resultados.
julia> b2010 = EvalPeriod(Date(2011,1), Date(2019,12), "b2010")
b2010:Jan-11-Dec-19
Ver también: GT_EVAL_B00
, GT_EVAL_B10
, GT_EVAL_T0010
InflationEvalTools.InflationParameter
— TypeTipo concreto para representar un parámetro de inflación computado con la función de inflación inflfn
, el método de remuestreo resamplefn
y función de tendencia trendfn
.
Ver también: ParamTotalCPIRebase
, ParamTotalCPI
, ParamWeightedMean
InflationEvalTools.ResampleFunction
— Typefunction (resamplefn::ResampleFunction)(base::VarCPIBase, rng = Random.GLOBAL_RNG)
Define el comportamiento general de función de remuestreo sobre VarCPIBase
. Este método requiere una implementación específica del método sobre el par (AbstractMatrix
, rng). Considera que el método de remuestreo podría extender los períodos de la serie de tiempo y ajusta las fechas apropiadamente.
InflationEvalTools.ResampleFunction
— Typefunction (resamplefn::ResampleFunction)(cs::CountryStructure, rng = Random.GLOBAL_RNG)
Define el comportamiento general de función de remuestreo sobre CountryStructure. Se remuestrea cada una de las bases del campo base
utilizando el método para objetos VarCPIBase
y se devuelve un nuevo CountryStructure
.
InflationEvalTools.ResampleFunction
— Typeabstract type ResampleFunction <: Function end
Tipo abstracto para funciones de remuestreo. Cada función debe extender como mínimo el método
resamplefn(vmat::AbstractMatrix, rng)::Matrix
para remuestrear un CountryStructure con las funciones definidas arriba.
Opcionalmente, si se desea modificar el comportamiento específico de cada función de remuestreo, se deben extender los siguientes métodos:
function (resamplefn::ResampleFunction)(cs::CountryStructure, rng = Random.GLOBAL_RNG)
function (resamplefn::ResampleFunction)(base::VarCPIBase, rng = Random.GLOBAL_RNG)
InflationEvalTools.ResampleScrambleVarMonths
— TypeResampleScrambleVarMonths <: ResampleFunction
Define una función de remuestreo para remuestrear las series de tiempo por los mismos meses de ocurrencia. El muestreo se realiza de manera independiente para serie de tiempo en las columnas de una matriz.
InflationEvalTools.SimConfig
— TypeSimConfig{F, R, T} <:AbstractConfig{F, R, T}
Tipo concreto que contiene una configuración base para generar simulaciones utilizando todos los datos como set de entrenamiento. Recibe una función de inflación InflationFunction
, una función de remuestreo ResampleFunction
, una función de Tendencia TrendFunction
, una función de inflación de evaluación [paramfn
] y la cantidad de simulaciones deseadas [nsim
].
Ejemplo
Considerando las siguientes instancias de funciones de inflación, remuestreo, tendencia e inflación de evaluación:
julia> percEq = InflationPercentileEq(80);
julia> resamplefn = ResampleSBB(36);
julia> trendfn = TrendRandomWalk();
julia> paramfn = InflationWeightedMean();
Generamos una configuración del tipo SimConfig
con 1000 simulaciones, con períodos de evaluación por defecto:
CompletePeriod()
,GT_EVAL_B00
,GT_EVAL_T0010
yGT_EVAL_B10
julia> config = SimConfig(percEq, resamplefn, trendfn, paramfn, 1000, Date(2019,12))
SimConfig{InflationPercentileEq, ResampleSBB, TrendRandomWalk{Float32}}
|─> Función de inflación : Percentil equiponderado 80.0
|─> Función de remuestreo : Block bootstrap estacionario con bloque esperado 36
|─> Función de tendencia : Tendencia de caminata aleatoria
|─> Método de inflación paramétrica : Media ponderada interanual
|─> Número de simulaciones : 1000
|─> Fin set de entrenamiento : Dec-19
|─> Períodos de evaluación : Período completo, gt_b00:Dec-01-Dec-10, gt_t0010:Jan-11-Nov-11 y gt_b10:Dec-11-Dec-20
Para generar una configuración con períodos específicos podemos brindar la colección de períodos de interés:
julia> config2 = SimConfig(percEq, resamplefn, trendfn, paramfn, 1000, Date(2019,12),
(CompletePeriod(), EvalPeriod(Date(2008,1), Date(2009,12), "fincrisis")))
SimConfig{InflationPercentileEq, ResampleSBB, TrendRandomWalk{Float32}}
|─> Función de inflación : Percentil equiponderado 80.0
|─> Función de remuestreo : Block bootstrap estacionario con bloque esperado 36
|─> Función de tendencia : Tendencia de caminata aleatoria
|─> Método de inflación paramétrica : Media ponderada interanual
|─> Número de simulaciones : 1000
|─> Fin set de entrenamiento : Dec-19
|─> Períodos de evaluación : Período completo y fincrisis:Jan-08-Dec-09
InflationEvalTools.TrendAnalytical
— TypeTrendAnalytical{T} <: ArrayTrendFunction
Tipo para representar una función de tendencia definida por una función anónima. Recibe los datos de un CountryStructure
o un rango de índices para precomputar el vector de tendencia utlizando una función anónima.
Ejemplos:
Para crear una función de tendencia a partir de una función anónima:
trendfn = TrendAnalytical(param_data, t -> 1 + sin(2π*t/12), "Tendencia sinusoidal")
o bien:
trendfn = TrendAnalytical(1:periods(param_data), t -> 1 + sin(2π*t/12), "Tendencia sinusoidal")
InflationEvalTools.TrendExponential
— TypeTrendExponential{T} <: ArrayTrendFunction
Tipo concreto para representar una función de tendencia de crecimiento exponencial.
Constructores
function TrendExponential(cs::CountryStructure, rate::Real = 0.02f0)
function TrendExponential(range::UnitRange, rate::Real = 0.02f0)
Ejemplos:
# Crear una función de tendencia con crecimiento exponencial al 2% anual
trendfn = TrendExponential(gtdata, 0.02)
Utilización
function (trendfn::TrendExponential)(cs::CountryStructure)
Aplicación de tendencia TrendExponential sobre los objetos VarCPIBase
que componen el CountryStructure
.
trendfn = TrendExponential(gtdata, 0.02)
trended_cs = trendfn(gtdata)
InflationEvalTools.TrendFunction
— Typeabstract type TrendFunction <: Function end
Tipo abstracto para manejar las funciones de tendencia.
Utilización
function (trendfn::TrendFunction)(cs::CountryStructure)
Aplica la función de tendencia sobre un CountryStructure
y devuelve un nuevo CountryStructure
.
InflationEvalTools.TrendIdentity
— TypeTrendIdentity <: TrendFunction
Tipo concreto para representar una función de tendencia neutra. Es decir, esta función de tendencia mantiene los datos sin alteración.
Ejemplos:
# Crear una función de tendencia neutra.
trendfn = TrendIdentity()
Utilización
function (trendfn::TrendIdentity)(cs::CountryStructure)
Aplicación de tendencia TrendIdentity sobre VarCPIBase. Se redefine este método para dejar invariante la base VarCPIBase.
trendfn = TrendIdentity()
trended_cs = trendfn(gtdata)
InflationEvalTools.TrendRandomWalk
— TypeTrendRandomWalk{T} <: ArrayTrendFunction
Tipo para representar una función de tendencia de caminata aleatoria. Utiliza el vector de caminata aleatoria precalibrado en RWTREND
.
Ejemplo:
# Crear la función de tendencia de caminata aleatoria
trendfn = TrendRandomWalk()
InflationEvalTools.DEFAULT_RESAMPLE_FN
— FunctionDEFAULT_RESAMPLE_FN
Define la funcón de remuestreo a utilizar por defecto en el ejercicio de simulación.
InflationEvalTools.DEFAULT_TREND_FN
— FunctionDEFAULT_TREND_FN
Define la funcón de tendencia a utilizar por defecto en el ejercicio de simulación.
InflationEvalTools.ParamTotalCPI
— MethodParamTotalCPI()
Función de ayuda para obtener la configuración del parámetro de inflación dado por la función de inflación del IPC, y el método de remuestreo y función de tendencia por defecto.
InflationEvalTools.ParamTotalCPILegacyRebase
— MethodParamTotalCPILegacyRebase()
Función de ayuda para obtener la configuración del parámetro de inflación dado por la función de inflación del IPC con cambio de base sintético, y el método de remuestreo y función de tendencia por defecto.
InflationEvalTools.ParamTotalCPIRebase
— MethodParamTotalCPIRebase()
Función de ayuda para obtener la configuración del parámetro de inflación dado por la función de inflación del IPC con cambio de base sintético, y el método de remuestreo y función de tendencia por defecto.
InflationEvalTools.ParamWeightedMean
— MethodParamWeightedMean()
Función de ayuda para obtener la configuración del parámetro de inflación dado por la media ponderada interanual y el método de remuestreo por defecto.
InflationEvalTools.absme_combination_weights
— Methodabsme_combination_weights(tray_infl::AbstractArray{F, 3}, tray_infl_param;
restrict_all::Bool = true,
show_status::Bool = false) where F -> Vector{F}
Obtiene ponderadores no negativos, cuya suma es igual a 1, para el problema de combinación lineal que minimiza el valor absoluto de error medio. Estos ponderadores se pueden interpretar como participaciones en la combinación lineal.
Los parámetros opcionales son:
show_status::Bool = false
: mostrar estado del proceso de optimización con Ipopt y JuMP.restrict_all::Bool = true
: indica si aplicar la restricción de la suma de ponderadores a todas las entradas del vector de ponderaciones. Si esfalse
, se aplica la restricción a partir de la segunda entrada. Esto es para que si el primer ponderador corresponde a un término constante, este no sea restringido.
InflationEvalTools.add_ones
— Methodadd_ones(tray_infl) -> Array{<:AbstractFloat, 3}
Agrega intercepto al cubo de trayectorias en la primera columna. Si las dimensiones de entrada de tray_infl
son (T, n, K)
, esta función devuelve un arreglo con dimensiones (T+1, n, K)
.
InflationEvalTools.average_mats
— Methodaverage_mats(tray_infl, tray_infl_param) -> (Matrix{<:AbstractFloat}, Vector{<:AbstractFloat})
Obtiene las matrices XᵀX
y Xᵀπ
para el problema de minimización del error cuadrático medio.
InflationEvalTools.combination_metrics
— Methodcombination_metrics(tray_infl, tray_infl_param, w; kwargs...)
Métricas para medidas de combinación lineal. Se combinan las trayectorias en tray_infl
con las ponderaciones w
y se computan las métricas de evaluación utilizando la trayectoria paramétrica tray_infl_param
.
Los argumentos opcionales (kwargs...
) son pasados a la función eval_metrics
.
InflationEvalTools.combination_weights
— Methodcombination_weights(tray_infl, tray_infl_param) -> Vector{<:AbstractFloat}
Obtiene los ponderadores óptimos de la solución analítica al problema de minimización del error cuadrático medio de la combinación lineal de estiamadores de inflación en tray_infl
utilizando la trayectoria de inflación paramétrica tray_infl_param
.
Devuelve un vector con los ponderadores asociados a cada estimador en las columnas de tray_infl
.
Ver también: ridge_combination_weights
, lasso_combination_weights
, share_combination_weights
, elastic_combination_weights
.
InflationEvalTools.crossvalidate
— Functioncrossvalidate(
weightsfunction::Function,
crossvaldata::Dict{String},
config::CrossEvalConfig = crossvaldata["config"];
show_status::Bool = true,
print_weights::Bool = true,
return_weights::Bool = false,
metrics::Vector{Symbol} = [:mse],
train_start_date::Date = Date(2000, 12),
components_mask = Colon(),
add_intercept::Bool = false) -> (cv_results::Matrix [, weights::Vector])
Lleva a cabo un proceso de combinación lineal de medidas de inflación y evaluación de validación sobre subperíodos futuros. Las medidas de inflación a combinarse son generadas con la configuración config
de tipo CrossEvalConfig
, así como los parámetros de simulación y los períodos de evaluación.
El diccionario crossvaldata
contiene las trayectorias de inflación, la trayectoria paramétrica y las fechas de cada período de combinación y evaluación. El diccionario crossvaldata
es producido por makesim
para un CrossEvalConfig
. Se hace de esta forma para que las trayectorias de inflación estén precomputadas, ya que sería muy costoso generarlas al vuelo.
La función weightsfunction
recibe una tupla (tray_infl, tray_param)
y obtiene ponderaciones de combinación para las medidas en tray_infl
. Por ejemplo, se puede utilizar directamente la función combination_weights
, o una función anónima construida con ridge_combination_weights
o lasso_combination_weights
.
Los parámetros opcionales son:
show_status::Bool = true
: muestra información sobre cada período de ajuste de ponderadores (subperíodo de entrenamiento) y resultados de las métricas en los subperíodos de validación.print_weights::Bool = true
: indica si se deben imprimir los vectores de ponderaciones obtenidos en cada iteración de entrenamiento y evaluación.return_weights::Bool = false
: indica si se devuelve el vector de ponderación del último período.metrics::Vector{Symbol} = [:mse]
: vector de métricas a reportar en cada iteración de entrenamiento y evaluación. Las métricas son obtenidas poreval_metrics
.train_start_date::Date = Date(2000, 12)
: fecha de inicio para el subperíodo de los datos de entrenamiento sobre el cual se obtienen los ponderadores de combinación.components_mask = (:)
: máscara a aplicar sobre las columnas detray_infl
en la combinación y evaluación. Utilizado para excluir una o más medidas del proceso de ajustes de ponderadores y evaluación fuera de muestra.add_intercept::Bool = false
: indica si se debe agregar una columna de unos en las trayectorias de inflación a combinar. Si elensemblefn
deconfig
contiene unaInflationConstant
como primera entrada, este argumento no es necesario. Utilizado para obtener un intercepto en la combinación lineal de trayectorias de inflación y que los ponderadores obtenidos de la combinación representen variaciones alrededor de este intercepto.
InflationEvalTools.dict_config
— Methoddict_config(params::Dict)
Función para convertir diccionario de parámetros a SimConfig
o CrossEvalConfig
.
InflationEvalTools.elastic_combination_weights
— Methodelastic_combination_weights(tray_infl, tray_infl_param, lambda, gamma;
max_iterations::Int = 1000,
alpha = 0.001,
tol = 1e-4,
show_status = true,
return_cost = false,
penalize_all = true) -> Vector{<:AbstractFloat}
Obtiene ponderadores óptimos de Elastic Net a través de una aproximación iterativa al problema de minimización del error cuadrático medio de la combinación lineal de estimadores de inflación en tray_infl
utilizando la trayectoria de inflación paramétrica tray_infl_param
, regularizada con la norma L1 y L2 de los ponderadores, ponderada por el parámetro lambda
. El porcentaje de regularización de la norma L1 se controla con el parámetro gamma
.
Los parámetros opcionales son:
max_iterations::Int = 1000
: número máximo de iteraciones.alpha::AbstractFloat = 0.001
: parámetro de aproximación o avance del algoritmo de gradiente próximo.tol::AbstractFloat = 1e-4
: desviación absoluta de la función de costo. Si la función de costo varía en términos absolutos menos quetol
de una iteración a otra, el algoritmo de gradiente se detiene.show_status::Bool = true
: mostrar estado del algoritmo iterativo.return_cost::Bool = false
: indica si devuelve el vector de historia de la función de costo de entrenamiento.penalize_all::Bool = true
: indica si aplicar la regularización a todos los ponderadores. Si es falso, se aplica la regularización a partir del segundo al último componente del vector de ponderaciones.
Devuelve un vector con los ponderadores asociados a cada estimador en las columnas de tray_infl
.
Ver también: combination_weights
, ridge_combination_weights
, share_combination_weights
, lasso_combination_weights
.
InflationEvalTools.eval_absme_online
— Methodeval_absme_online(
inflfn::InflationFunction,
resamplefn::ResampleFunction,
trendfn::TrendFunction,
csdata::CountryStructure,
tray_infl_param::Vector{<:AbstractFloat};
K = 1000, rndseed = DEFAULT_SEED) -> absme
Función para obtener evaluación de valor absoluto de error medio (ABSME) utilizando la configuración especificada. Se requiere la trayectoria paramétrica tray_infl_param
para evitar su cómputo repetidamente en esta función. Devuelve el ABSME como un escalar.
InflationEvalTools.eval_absme_online
— Methodeval_absme_online(config::SimConfig, csdata::CountryStructure;
K = 1000,
rndseed = DEFAULT_SEED) -> absme
Función para obtener evaluación del valor absoluto de error medio utilizando configuración de evaluación SimConfig
. Se deben proveer los datos de evaluación en csdata
, con los cuales se desee computar la trayectoria paramétrica de comparación. Devuelve la métrica de valor absoluto como un escalar.
Esta función se puede utilizar para optimizar los parámetros de diferentes medidas de inflación y es más eficiente en memoria que pargentrayinfl
.
InflationEvalTools.eval_corr_online
— Methodeval_corr_online(
inflfn::InflationFunction,
resamplefn::ResampleFunction,
trendfn::TrendFunction,
csdata::CountryStructure,
tray_infl_param::Vector{<:AbstractFloat};
K = 1000, rndseed = DEFAULT_SEED) -> corr
Función para obtener evaluación de correlación media (corr) utilizando la configuración especificada. Se requiere la trayectoria paramétrica tray_infl_param
para evitar su cómputo repetidamente en esta función. Devuelve la correlación media (corr) como un escalar.
InflationEvalTools.eval_corr_online
— Methodeval_corr_online(config::SimConfig, csdata::CountryStructure;
K = 1000,
rndseed = DEFAULT_SEED) -> corr
Función para obtener evaluación de correlación media (corr) utilizando configuración de evaluación SimConfig
. Se deben proveer los datos de evaluación en csdata
, con los cuales se desee computar la trayectoria paramétrica de comparación. Devuelve la correlación media (corr) como un escalar.
Esta función se puede utilizar para optimizar los parámetros de diferentes medidas de inflación y es más eficiente en memoria que pargentrayinfl
.
InflationEvalTools.eval_metrics
— Methodeval_metrics(tray_infl, tray_infl_pob; short=false) -> Dict
Función para obtener un diccionario con estadísticos de evaluación de las realizaciones de las medidas de inflación en tray_infl
utilizando el parámetro tray_infl_pob
.
Si short=true
, devuelve un diccionario únicamente con el error cuadrático medio (MSE) de evaluación. Útil para realizar optimización iterativa en la búsqueda de parámetros.
InflationEvalTools.eval_mse_online
— Methodeval_mse_online(
inflfn::InflationFunction,
resamplefn::ResampleFunction,
trendfn::TrendFunction,
csdata::CountryStructure,
tray_infl_param::Vector{<:AbstractFloat};
K = 1000, rndseed = DEFAULT_SEED) -> mse
Función para obtener evaluación de error cuadrático medio (MSE) utilizando la configuración especificada. Se requiere la trayectoria paramétrica tray_infl_param
para evitar su cómputo repetidamente en esta función. Devuelve el MSE como un escalar.
InflationEvalTools.eval_mse_online
— Methodeval_mse_online(config::SimConfig, csdata::CountryStructure;
K = 1000,
rndseed = DEFAULT_SEED) -> mse
Función para obtener evaluación de error cuadrático medio utilizando configuración de evaluación SimConfig
. Se deben proveer los datos de evaluación en csdata
, con los cuales se desee computar la trayectoria paramétrica de comparación. Devuelve el MSE como un escalar.
Esta función se puede utilizar para optimizar los parámetros de diferentes medidas de inflación y es más eficiente en memoria que pargentrayinfl
.
InflationEvalTools.eval_periods
— Functioneval_periods(cs::CountryStructure, period::EvalPeriod) -> BitVector
eval_periods(cs::CountryStructure, ::CompletePeriod) -> UnitRange
Devuelve una máscara o un rango de índices de los períodos comprendidos en EvalPeriod
o CompletePeriod
para aplicar slicing a las trayectorias de inflación y al parámetro antes de obtener las métricas de evaluación.
Ver también: EvalPeriod
, CompletePeriod
, period_tag
.
InflationEvalTools.evalsim
— Methodevalsim(data::CountryStructure, config::SimConfig;
rndseed = DEFAULT_SEED,
short = false) -> (Dict, Array{<:AbstractFloat, 3})
Esta función genera la trayectoria paramétrica, las trayectorias de simulación y las métricas de evaluación utilizando la configuración SimConfig
. Devuelve (metrics, tray_infl)
.
Las métricas de evaluación se devuelven en el diccionario metrics
. Si short=true
, el diccionario contiene únicamente la llave :mse
. Este diccionario corto es útil para optimización iterativa. Por defecto, se computa el diccionario completo de métricas, pero este proceso es más intensivo en memoria. Ver también eval_metrics
.
Las trayectorias de inflación simuladas son devueltas en tray_infl
como un arreglo tridimensional de dimensión (T, 1, K)
, en donde T
corresponde a los períodos de inflación computados y K
representa el número de realizaciones de la simulación. La dimensión unitaria 1
sirve para concatenar posteriormente los resultados de simulación. Por ejemplo, en el cómputo de una medida de promedio ponderado óptima.
Utilización
La función evalsim
recibe un CountryStructure
y un AbstractConfig
del tipo SimConfig
.
Ejemplo
Teniendo una configuración de tipo SimConfig
y un conjunto de datos gtdata_eval
julia> config = SimConfig(
InflationPercentileEq(69),
ResampleScrambleVarMonths(),
TrendRandomWalk(),
InflationTotalRebaseCPI(36, 2), 10_000, Date(2019,12))
SimConfig{InflationPercentileEq, ResampleScrambleVarMonths, TrendRandomWalk{Float32}}
|─> Función de inflación : Percentil equiponderado 69.0
|─> Función de remuestreo : Bootstrap IID por meses de ocurrencia
|─> Función de tendencia : Tendencia de caminata aleatoria
|─> Método de inflación paramétrica : Variación interanual IPC con cambios de base sintéticos (36, 2)
|─> Número de simulaciones : 10000
|─> Fin set de entrenamiento : Dec-19
|─> Períodos de evaluación : Período completo, gt_b00:Dec-01-Dec-10, gt_t0010:Jan-11-Nov-11 y gt_b10:Dec-11-Dec-20
podemos ejecutar una simulación con los parámetros de config
con:
julia> results, tray_infl = evalsim(gtdata, config)
┌ Info: Evaluación de medida de inflación
│ medida = "Percentil equiponderado 69.0"
│ remuestreo = "Bootstrap IID por meses de ocurrencia"
│ tendencia = "Tendencia de caminata aleatoria"
│ evaluación = "Variación interanual IPC con cambios de base sintéticos (36, 2)"
│ simulaciones = 10000
│ traindate = 2019-12-01
└ periodos = (Período completo, gt_b00:Dec-01-Dec-10, gt_t0010:Jan-11-Nov-11, gt_b10:Dec-11-Dec-20)
... (barra de progreso)
┌ Info: Métricas de evaluación:
│ mse = ...
└ ... (otras métricas)
InflationEvalTools.gentrayinfl
— Methodgentrayinfl(inflfn::F, resamplefn::R, trendfn::T, csdata::CountryStructure;
K = 100,
rndseed = DEFAULT_SEED,
showprogress = true)
Computa K
trayectorias de inflación utilizando la función de inflación inflfn::
InflationFunction
, la función de remuestreo resamplefn::
TrendFunction
y la función de tendencia trendfn::
TrendFunction
especificada. Se utilizan los datos en el CountryStructure
dado en csdata
.
A diferencia de la función pargentrayinfl
, esta función no realiza el cómputo de forma distribuida.
Para lograr la reproducibilidad entre diferentes corridas de la función, y de esta forma, generar trayectorias de inflación con diferentes metodologías utilizando los mismos remuestreos, se fija la semilla de generación de acuerdo con el número de iteración en la simulación. Para controlar el inicio de la generación de trayectorias se utiliza como parámetro de desplazamiento el valor rndseed
, cuyo valor por defecto es la semilla DEFAULT_SEED
.
InflationEvalTools.get_param_function
— Methodget_param_function(::ResampleFunction)
Cada función de remuestreo debe realizar la implementación de una función para obtener un CountryStructure
con objetos VarCPIBase
que contengan las variaciones intermensuales promedio (o paramétricas) que permitan construir la trayectoria paramétrica de inflación de acuerdo con el método de remuestreo dado en ResampleFunction
.
Esta función devuelve la función de obtención de datos paramétricos.
Ejemplo
# Obtener la función de remuestreo
resamplefn = ResampleSBB(36)
...
# Obtener su función para obtener los datos paramétricos
paramdatafn = get_param_function(resamplefn)
# Obtener CountryStructure de datos paramétricos
paramdata = paramdatafn(gtdata)
Ver también: param_sbb
InflationEvalTools.get_ranges
— Methodget_ranges(cs::CountryStructure)
Función de ayuda para obtener tupla de rangos de índices para hacer slicing de los vectores de tendencia.
InflationEvalTools.lasso_combination_weights
— Methodlasso_combination_weights(tray_infl, tray_infl_param, lambda;
max_iterations::Int = 1000,
alpha = F(0.005),
tol = F(1e-4),
show_status = true,
return_cost = false,
penalize_all = true) -> Vector{<:AbstractFloat}
Obtiene ponderadores óptimos de LASSO a través de una aproximación iterativa al problema de minimización del error cuadrático medio de la combinación lineal de estimadores de inflación en tray_infl
utilizando la trayectoria de inflación paramétrica tray_infl_param
, regularizada con la norma L1 de los ponderadores, ponderada por el parámetro lambda
.
Los parámetros opcionales son:
max_iterations::Int = 1000
: número máximo de iteraciones.alpha::AbstractFloat = 0.001
: parámetro de aproximación o avance del algoritmo de gradiente próximo.tol::AbstractFloat = 1e-4
: desviación absoluta de la función de costo. Si la función de costo varía en términos absolutos menos quetol
de una iteración a otra, el algoritmo de gradiente se detiene.show_status::Bool = true
: mostrar estado del algoritmo iterativo.return_cost::Bool = false
: indica si devuelve el vector de historia de la función de costo de entrenamiento.penalize_all::Bool = true
: indica si aplicar la regularización a todos los ponderadores. Si es falso, se aplica la regularización a partir del segundo al último componente del vector de ponderaciones.
Devuelve un vector con los ponderadores asociados a cada estimador en las columnas de tray_infl
.
Ver también: combination_weights
, ridge_combination_weights
, share_combination_weights
, elastic_combination_weights
.
InflationEvalTools.makesim
— Methodmakesim(data, config::AbstractConfig;
rndseed = DEFAULT_SEED
short = false) -> (Dict, Array{<:AbstractFloat, 3})
Utilización
Esta función utiliza la función evalsim
para generar un set de simulaciones en base a un CountryStructure
y un AbstractConfig
, y genera un diccionario results
con todas las métricas de evaluación y con la información del AbstractConfig
utilizado para generarlas. Adicionalmente genera un objeto con las trayectorias de inflación. Devuelve (metrics, tray_infl)
.
Ejemplos
makesim
recibe un CountryStructure
y un AbstractConfig
, para trasladarlo a evalsim
y generar las simulaciones. Almacena las métricas y los parámetros de simulación en el diccionario results, y Adicionalmente devuelve las trayectoria de simulacion.
julia> results, tray_infl = makesim(gtdata, config)
┌ Info: Evaluación de medida de inflación
│ medida = "Percentil equiponderado 69.0"
│ remuestreo = "Bootstrap IID por meses de ocurrencia"
│ tendencia = "Tendencia de caminata aleatoria"
│ evaluación = "Variación interanual IPC con cambios de base sintéticos (36, 2)"
│ simulaciones = 10000
│ traindate = 2019-12-01
└ periodos = (Período completo, gt_b00:Dec-01-Dec-10, gt_t0010:Jan-11-Nov-11, gt_b10:Dec-11-Dec-20)
... (barra de progreso)
┌ Info: Métricas de evaluación:
│ mse = ...
└ ... (otras métricas)
InflationEvalTools.method_name
— Methodmethod_name(resamplefn::ResampleFunction)
Función para obtener el nombre del método de remuestreo.
InflationEvalTools.method_name
— Methodmethod_name(resamplefn::TrendFunction)
Función para obtener el nombre de la función de tendencia.
InflationEvalTools.method_tag
— Methodmethod_tag(resamplefn::ResampleFunction)
Función para obtener una etiqueta del método de remuestreo.
InflationEvalTools.method_tag
— Methodmethod_tag(trendfn::TrendFunction)
Función para obtener una etiqueta de la función de tendencia.
InflationEvalTools.metric_combination_weights
— Methodmetric_combination_weights(tray_infl::AbstractArray{F, 3}, tray_infl_param;
metric::Symbol = :corr,
w_start = nothing,
x_abstol::AbstractFloat = 1f-2,
f_abstol::AbstractFloat = 1f-4,
max_iterations::Int = 1000) where F
Obtiene ponderadores óptimos de combinación para la métrica metric
a través de una aproximación iterativa al problema de optimización de dicha métrica de la combinación lineal de estimadores de inflación en tray_infl
utilizando la trayectoria de inflación paramétrica tray_infl_param
.
Los parámetros opcionales son:
metric::Symbol = :corr
: métrica a optimizar. Si se trata de la correlación lineal, la métrica es maximizada. El resto de métricas son minimizadas. Véase tambiéneval_metrics
.w_start = nothing
: ponderadores iniciales de búsqueda. Típicamente, un vector de valores flotantes.x_abstol::AbstractFloat = 1f-2
: desviación absoluta máxima de los ponderadores.f_abstol::AbstractFloat = 1f-4
: desviación absoluta máxima en la función de costo.sum_abstol::AbstractFloat = 1f-2
: desviación absoluta permisible máxima en la suma de ponderadores, respecto de la unidad.max_iterations::Int = 1000
: número máximo de iteraciones.
Devuelve un vector con los ponderadores asociados a cada estimador en las columnas de tray_infl
.
Ver también: combination_weights
, ridge_combination_weights
, share_combination_weights
, elastic_combination_weights
.
InflationEvalTools.param_gsbb_mod
— Methodparam_gsbb_mod(cs::CountryStructure)
Obtiene un CountryStructure
paramétrico.
InflationEvalTools.param_gsbb_mod
— Methodparam_gsbb_mod(base::VarCPIBase)
Obtiene la matriz de variaciones intermensuales paramétricas para la metodología de remuestreo de Generalized Seasonal Block Bootstrap modificada que extiende las observaciones a 300 períodos. Devuelve una base de tipo VarCPIBase con las variaciones intermensuales paramétricas. Actualmente funciona solamente si base
tiene 120 observaciones.
InflationEvalTools.param_sbb
— Methodparam_sbb(cs::CountryStructure)
Obtiene un CountryStructure
paramétrico. Véase también param_sbb
.
InflationEvalTools.param_sbb
— Methodparam_sbb(base::VarCPIBase)
Obtiene la matriz de variaciones intermensuales paramétricas para la metodología de remuestreo de Stationary Block Bootstrap. Devuelve una base de tipo VarCPIBase
con las variaciones intermensuales promedio de los mismos meses de ocurrencia (también llamadas variaciones intermensuales paramétricas).
Esta definición también aplica a otras metodologías que utilicen como variaciones intermensuales paramétricas los promedios en los mismos meses de ocurrencia.
InflationEvalTools.pargentrayinfl
— Methodpargentrayinfl(inflfn::F, resamplefn::R, trendfn::T, csdata::CountryStructure;
K = 100,
rndseed = DEFAULT_SEED,
showprogress = true)
Computa K
trayectorias de inflación utilizando la función de inflación inflfn::
InflationFunction
, la función de remuestreo resamplefn::
TrendFunction
y la función de tendencia trendfn::
TrendFunction
especificada. Se utilizan los datos en el CountryStructure
dado en csdata
.
A diferencia de la función gentrayinfl
, esta función implementa el cómputo distribuido en procesos utilizando @distributed
. Esto requiere que el paquete haya sido cargado en todos los procesos de cómputo. Por ejemplo:
using Distributed
addprocs(4, exeflags="--project")
@everywhere using HEMI
Para lograr la reproducibilidad entre diferentes corridas de la función, y de esta forma, generar trayectorias de inflación con diferentes metodologías utilizando los mismos remuestreos, se fija la semilla de generación de acuerdo con el número de iteración en la simulación. Para controlar el inicio de la generación de trayectorias se utiliza como parámetro de desplazamiento el valor rndseed
, cuyo valor por defecto es la semilla DEFAULT_SEED
.
InflationEvalTools.period_tag
— Methodperiod_tag(period::EvalPeriod) -> String
period_tag(::CompletePeriod) -> String
Función para obtener etiqueta asociada al período de evaluación. El período de evaluación completo tiene una etiqueta vacía (""
).
Ver también: EvalPeriod
, CompletePeriod
, eval_periods
.
InflationEvalTools.ridge_combination_weights
— Methodridge_combination_weights(tray_infl, tray_infl_param, lambda;
penalize_all = true) -> Vector{<:AbstractFloat}
Obtiene ponderadores óptimos de Ridge a través de la solución analítica al problema de minimización del error cuadrático medio de la combinación lineal de estimadores de inflación en tray_infl
utilizando la trayectoria de inflación paramétrica tray_infl_param
, regularizada con la norma L2 de los ponderadores, ponderada por el parámetro lambda
.
Devuelve un vector con los ponderadores asociados a cada estimador en las columnas de tray_infl
.
Los parámetros opcionales son:
penalize_all
(Bool
): indica si aplicar la regularización a todos los ponderadores. Si es falso, se aplica la regularización a partir del segundo al último componente del vector de ponderaciones. Por defecto estrue
.
Ver también: combination_weights
, lasso_combination_weights
, share_combination_weights
, elastic_combination_weights
.
InflationEvalTools.run_batch
— Methodrun_batch(data, dict_list_params, savepath;
savetrajectories = true,
rndseed = DEFAULT_SEED)
La función run_batch
genera paquetes de simulaciones con base en el diccionario de parámetros de configuración.
Utilización
La función recibe un CountryStructure
, un diccionario con vectores que contienen parámetros de simulación y un directorio para almacenar archivos con las métricas de cada una de las evaluaciones generadas.
Ejemplo
Generamos un diccionario con parámetros de configuración para percentiles equiponderados, desde el percentil 60 hasta el percentil 80. Esto genera un diccionario con 21 configuraciones distintas para evaluación.
config_dict = Dict(
:inflfn => InflationPercentileWeighted.(50:80),
:resamplefn => resamplefn,
:trendfn => trendfn,
:paramfn => paramfn,
:traindate => Date(2019, 12),
:nsim => 1000) |> dict_list`
Una vez creado config_dict
, podemos generar el paquete de simulación utilizando run_batch
.
julia> run_batch(gtdata_eval, config_dict, savepath)
... (progreso de evaluación)
Una vez generadas todas las simulaciones podemos obtener los datos mediante la función collect_results
. Esta función lee los resultados desde savepath
y los presenta en un DataFrame
.
julia> df = collect_results(savepath)
[ Info: Scanning folder `<savepath>` for result files.
[ Info: Added 31 entries.
...
InflationEvalTools.share_combination_weights
— Methodfunction share_combination_weights(tray_infl::AbstractArray{F, 3}, tray_infl_param;
restrict_all::Bool = true,
show_status::Bool = false) where F -> Vector{F}
Obtiene ponderadores no negativos, cuya suma es igual a 1. Estos ponderadores se pueden interpretar como participaciones en la combinación lineal.
Los parámetros opcionales son:
show_status::Bool = false
: mostrar estado del proceso de optimización con Ipopt y JuMP.restrict_all::Bool = true
: indica si aplicar la restricción de la suma de ponderadores a todas las entradas del vector de ponderaciones. Si esfalse
, se aplica la restricción a partir de la segunda entrada. Esto es para que si el primer ponderador corresponde a un término constante, este no sea restringido.