Estoy intentando calcular (en R) el PIB mundial real utilizando lo que asumo es el PIB nominal del Banco Mundial y lo que solo puedo identificar como la tasa de inflación, también del Banco Mundial.
Desafortunadamente, no logro obtener resultados razonables usando mi método de cálculo y no puedo identificar la causa específica:
- Los datos de inflación no están destinados a utilizarse de esta manera.
- He cometido un error lógico o matemático.
La forma más lógica (para mí) de hacer esto es calcular el producto acumulado de todas las tasas de inflación, luego normalizarlos en torno al año base elegido.
adjust_for_inflation <- function(nominal_gdp, inflation_rate, base_year) {
# Obtener los índices de tiempo
time_indices <- time(nominal_gdp)
# Calcular la tasa de inflación acumulada hasta cada año
cumulative_inflation <- cumprod(1 + inflation_rate / 100)
# Encontrar la tasa de inflación acumulada para el año base
base_year_index <- which(time_indices == base_year)
base_year_cumulative_inflation <- cumulative_inflation[base_year_index]
# Normalizar las tasas de inflación acumuladas para que la tasa del año base sea 1
normalized_cumulative_inflation <- cumulative_inflation / base_year_cumulative_inflation
# Ajustar el PIB nominal al PIB real en función de la inflación acumulada normalizada
real_gdp <- nominal_gdp / normalized_cumulative_inflation
# Declaraciones de impresión para depuración
print(data.frame(Año = time_indices, PIB_Nominal = nominal_gdp, Tasa_de_Inflación = inflation_rate, Inflación_Acumulada = cumulative_inflation, Inflación_Acumulada_Normalizada = normalized_cumulative_inflation, PIB_Real = real_gdp))
# Devolver el PIB real como un objeto ts con los mismos índices de tiempo
real_gdp_ts <- ts(real_gdp, start=start(nominal_gdp), frequency=frequency(nominal_gdp))
return(real_gdp_ts)
}
Esto parece estar bien, y al probarlo con algunos datos inventados, produce exactamente los resultados que pretendía.
PIB_nominal <- ts(c(100, 100, 100, 100, 100), start=2018, frequency=1)
tasa_de_inflación <- ts(c(10, 10, 10, 10, 10), start=2018, frequency=1)
año_base <- 2020
PIB_ajustado <- adjust_for_inflation(PIB_nominal, tasa_de_inflación, año_base)
Año PIB_Nominal Tasa_de_Inflación Inflación_Acumulada Inflación_Acumulada_Normalizada PIB_Real
1 2018 100 10 1.10000 0.8264463 121.00000
2 2019 100 10 1.21000 0.9090909 110.00000
3 2020 100 10 1.33100 1.0000000 100.00000
4 2021 100 10 1.46410 1.1000000 90.90909
5 2022 100 10 1.61051 1.2100000 82.64463
Sin embargo, al insertar los datos del Banco Mundial, el resultado indica básicamente que el PIB real se ha estancado durante las últimas 4 décadas
PIB_nominal_sin_procesar <- ts(t(read_excel('world_bank_nominal.xls', col_names = FALSE)), start=1960)[,1]
PIB_nominal <- window(PIB_nominal_sin_procesar , start = 1981)
tasa_de_inflación <- ts(t(read_excel("world_bank_inflation_rate.xlsx", col_names = FALSE))[,1], start=1981)
año_base <- 2022
PIB_ajustado <- adjust_for_inflation(PIB_nominal, tasa_de_inflación, año_base)
plot.ts(PIB_ajustado/10^9, ylim = c(0,max(PIB_ajustado/10^9))*1.1)
Obviamente, esto está mal y no sirve, sin embargo, sinceramente no puedo averiguar qué hice mal. También intenté un enfoque de suma acumulativa inflación_acumulada <- 1 + cumsum(tasa_de_inflación / 100)
y tiene resultados que parecen más racionales, pero no puedo justificar por qué sería una suma acumulativa en lugar de porcentajes que se van componiendo.