InflationEvalTools

Documentation for InflationEvalTools.

InflationEvalTools.GT_EVAL_B00Constant
const 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.

source
InflationEvalTools.GT_EVAL_B10Constant
const 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.

source
InflationEvalTools.GT_EVAL_T0010Constant
const 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.

source
InflationEvalTools.LOCAL_RNGConstant
const 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.

source
InflationEvalTools.AbstractConfigType
abstract 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.

source
InflationEvalTools.ArrayTrendFunctionType
abstract 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.

source
InflationEvalTools.CompletePeriodType
CompletePeriod <: 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

source
InflationEvalTools.CrossEvalConfigType
CrossEvalConfig{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
source
InflationEvalTools.EvalPeriodType
EvalPeriod <: 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

source
InflationEvalTools.ResampleFunctionType
function (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.

source
InflationEvalTools.ResampleFunctionType
function (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.

source
InflationEvalTools.ResampleFunctionType
abstract 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)
source
InflationEvalTools.ResampleScrambleVarMonthsType
ResampleScrambleVarMonths <: 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.

source
InflationEvalTools.SimConfigType
SimConfig{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 y
  • GT_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
source
InflationEvalTools.TrendAnalyticalType
TrendAnalytical{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")
source
InflationEvalTools.TrendExponentialType
TrendExponential{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) 
source
InflationEvalTools.TrendFunctionType
abstract 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.

source
InflationEvalTools.TrendIdentityType
TrendIdentity <: 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) 
source
InflationEvalTools.TrendRandomWalkType
TrendRandomWalk{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()
source
InflationEvalTools.ParamTotalCPIMethod
ParamTotalCPI()

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.

source
InflationEvalTools.ParamTotalCPILegacyRebaseMethod
ParamTotalCPILegacyRebase()

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.

source
InflationEvalTools.ParamTotalCPIRebaseMethod
ParamTotalCPIRebase()

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.

source
InflationEvalTools.ParamWeightedMeanMethod
ParamWeightedMean()

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.

source
InflationEvalTools.absme_combination_weightsMethod
absme_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 es false, 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.
source
InflationEvalTools.add_onesMethod
add_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).

source
InflationEvalTools.average_matsMethod
average_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.

source
InflationEvalTools.combination_metricsMethod
combination_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.

source
InflationEvalTools.combination_weightsMethod
combination_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.

source
InflationEvalTools.crossvalidateFunction
crossvalidate(
    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 por eval_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 de tray_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 el ensemblefn de config contiene una InflationConstant 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.
source
InflationEvalTools.elastic_combination_weightsMethod
elastic_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 que tol 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.

source
InflationEvalTools.eval_absme_onlineMethod
eval_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.

source
InflationEvalTools.eval_absme_onlineMethod
eval_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.

source
InflationEvalTools.eval_corr_onlineMethod
eval_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.

source
InflationEvalTools.eval_corr_onlineMethod
eval_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.

source
InflationEvalTools.eval_metricsMethod
eval_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.

source
InflationEvalTools.eval_mse_onlineMethod
eval_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.

source
InflationEvalTools.eval_mse_onlineMethod
eval_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.

source
InflationEvalTools.eval_periodsFunction
eval_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.

source
InflationEvalTools.evalsimMethod
evalsim(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)
source
InflationEvalTools.gentrayinflMethod
gentrayinfl(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.

source
InflationEvalTools.get_param_functionMethod
get_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

source
InflationEvalTools.get_rangesMethod
get_ranges(cs::CountryStructure)

Función de ayuda para obtener tupla de rangos de índices para hacer slicing de los vectores de tendencia.

source
InflationEvalTools.lasso_combination_weightsMethod
lasso_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 que tol 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.

source
InflationEvalTools.makesimMethod
makesim(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)
source
InflationEvalTools.metric_combination_weightsMethod
metric_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én eval_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.

source
InflationEvalTools.param_gsbb_modMethod
param_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.

source
InflationEvalTools.param_sbbMethod
param_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.

source
InflationEvalTools.pargentrayinflMethod
pargentrayinfl(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.

source
InflationEvalTools.ridge_combination_weightsMethod
ridge_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 es true.

Ver también: combination_weights, lasso_combination_weights, share_combination_weights, elastic_combination_weights.

source
InflationEvalTools.run_batchMethod
run_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.
...
source
InflationEvalTools.share_combination_weightsMethod
function 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 es false, 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.
source