Banco de la república en Colombia se ha caracterizado por contralar bien la inflación vía tasa de interés, mantener la inflación baja y estable. Es su principal objetivo, contribuye a mantener un crecimiento sostenido y sin fluctuaciones considerables. El primero de estos aspectos es que, al estar en un entorno de precios bajos, se preserva el poder adquisitivo de las personas. El segundo, es que, al estar la inflación bajo control, los recursos de una economía se asignan de la mejor manera para lograr mayor bienestar y crecimiento. El tercer aspecto, es que con precios bajos a las autoridades económicas les resulta más sencillo adoptar las medidas económicas correctas. Y de esta manera en Colombia podemos decir que no existen choches drásticos en la economía derivados por la tasa interés. Pero surge una pregunta ¿Cuáles son los mecanismos de transmisión que determinan a la tasa de interés que sirve de referencia para establecer la postura de política monetaria del Banco de la república? En la literatura se analiza el papel de la tasa de desocupación, la demanda real, la demanda de dinero, el producto interno bruto, y la inflación en la determinación de la tasa de interés.
En este ejercicio vamos a revisar las relaciones de dependencia temporal entre la Tasa de interés del Banco de la República y la Tasa de Inflación usando modelos de series de tiempo multivariadas, específicamente a través de un modelo Vectorial Autorregresivo.
Verificar de forma emperica para el caso colombiano la relación de dependencia entre la Inflación y la tasa de interés del banco de la república. Tomando series de tiempo de tasas de crecimiento trimestral de la Tasa de interés y la Tasa de Inflación para el periodo comprendido entre 2001-2019.
Identificar un modelo de serie de tiempo vectorial autogresivo que nos permita entender la dependencia dinámica entre las Tasa de inflación y la Tasa de interés.
Librerias
library(MTS)
library(vars)
library(dygraphs)
library(forecast)
library(urca)
library(readxl) # importar excel
library(TSstudio)
Datos
#print(getwd())
datos <- read_excel("Inflacion.xlsx", sheet = "datos1")
attach(datos)
The following objects are masked from datos (pos = 3):
Desem, Feha, Infla, Int
The following objects are masked from datos (pos = 4):
Desem, Feha, Infla, Int
The following objects are masked from datos (pos = 5):
Desem, Feha, Infla, Int
The following objects are masked from datos (pos = 6):
Desem, Feha, Infla, Int
Encabezados
head(datos)
Grafico de las series de tiempo
gdp=ts(cbind(Inflacion=datos[,2],Interes=datos[,4]))
head(gdp)
Time Series:
Start = 1
End = 6
Frequency = 1
Infla Int
1 8.120000 11.892473
2 7.926667 11.500000
3 8.030000 10.583513
4 7.813333 8.983333
5 6.653333 7.994624
6 5.913333 6.096595
Grafico
options(repr.plot.width=15, repr.plot.height=8) # tamaño
plot.ts(gdp,type="o",col="darkblue")
Modelar las tasa de crecimiento
tc_gdp=diffM(log(gdp))
Gráfico de las tasa de crecimiento
options(repr.plot.width=15, repr.plot.height=8) # tamaño
plot.ts(tc_gdp,col="darkblue")
pairs(tc_gdp,col="darkblue")
Relacion contemporanea de las series
p=round(length(Infla)^(1/3))
ru_Infla = ur.df(diff(log(Infla)), type="drift", lags=p, selectlags=c("AIC"))
summary(ru_Infla)
###############################################
# Augmented Dickey-Fuller Test Unit Root Test #
###############################################
Test regression drift
Call:
lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
Residuals:
Min 1Q Median 3Q Max
-0.34759 -0.06768 0.00860 0.07924 0.26186
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.004329 0.014828 -0.292 0.771248
z.lag.1 -0.696063 0.144450 -4.819 9.03e-06 ***
z.diff.lag1 0.188350 0.145464 1.295 0.199963
z.diff.lag2 0.103045 0.128014 0.805 0.423783
z.diff.lag3 0.412678 0.112788 3.659 0.000509 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.1232 on 65 degrees of freedom
Multiple R-squared: 0.4145, Adjusted R-squared: 0.3785
F-statistic: 11.5 on 4 and 65 DF, p-value: 4.03e-07
Value of test-statistic is: -4.8187 11.6396
Critical values for test statistics:
1pct 5pct 10pct
tau2 -3.51 -2.89 -2.58
phi1 6.70 4.71 3.86
ru_Int=ur.df(diff(log(Int)), type="drift", lags=p, selectlags=c("AIC"))
summary(ru_Int)
###############################################
# Augmented Dickey-Fuller Test Unit Root Test #
###############################################
Test regression drift
Call:
lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
Residuals:
Min 1Q Median 3Q Max
-0.255227 -0.024814 0.000258 0.032720 0.157973
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.0002578 0.0077198 -0.033 0.973456
z.lag.1 -0.3884690 0.0769482 -5.048 3.65e-06 ***
z.diff.lag 0.3742039 0.1058730 3.534 0.000746 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.06426 on 67 degrees of freedom
Multiple R-squared: 0.302, Adjusted R-squared: 0.2811
F-statistic: 14.49 on 2 and 67 DF, p-value: 5.887e-06
Value of test-statistic is: -5.0485 12.851
Critical values for test statistics:
1pct 5pct 10pct
tau2 -3.51 -2.89 -2.58
phi1 6.70 4.71 3.86
No hay Raiz Unitaria
Vamor a Modelar un modelo Estacionario, AR(P). Multivariado se llama VAR(P)
VARselect(data.frame(tc_gdp), lag.max = 13)
$selection
AIC(n) HQ(n) SC(n) FPE(n)
4 1 1 4
$criteria
1 2 3 4 5 6 7
AIC(n) -9.547470e+00 -9.582426e+00 -9.641289e+00 -9.676313e+00 -9.5564526925 -9.486346e+00 -9.445992e+00
HQ(n) -9.466647e+00 -9.447722e+00 -9.452703e+00 -9.433845e+00 -9.2601032448 -9.136115e+00 -9.041879e+00
SC(n) -9.341618e+00 -9.239340e+00 -9.160968e+00 -9.058758e+00 -8.8016630720 -8.594322e+00 -8.416733e+00
FPE(n) 7.139246e-05 6.897794e-05 6.511504e-05 6.301219e-05 0.0000712823 7.684503e-05 8.056725e-05
8 9 10 11 12 13
AIC(n) -9.502645e+00 -9.470207e+00 -9.437117e+00 -9.411463e+00 -9.328574e+00 -9.400609e+00
HQ(n) -9.044651e+00 -8.958331e+00 -8.871359e+00 -8.791824e+00 -8.655053e+00 -8.673206e+00
SC(n) -8.336152e+00 -8.166480e+00 -7.996155e+00 -7.833267e+00 -7.613143e+00 -7.547944e+00
FPE(n) 7.683512e-05 8.031808e-05 8.427553e-05 8.808969e-05 9.790656e-05 9.364794e-05
var_p= vars::VAR(tc_gdp,p=4)
summary(var_p)
VAR Estimation Results:
=========================
Endogenous variables: Infla, Int
Deterministic variables: const
Sample size: 71
Log Likelihood: 158.869
Roots of the characteristic polynomial:
0.8311 0.8311 0.8089 0.8089 0.6435 0.6435 0.363 0.363
Call:
vars::VAR(y = tc_gdp, p = 4)
Estimation results for equation Infla:
======================================
Infla = Infla.l1 + Int.l1 + Infla.l2 + Int.l2 + Infla.l3 + Int.l3 + Infla.l4 + Int.l4 + const
Estimate Std. Error t value Pr(>|t|)
Infla.l1 0.416209 0.130814 3.182 0.00229 **
Int.l1 0.220360 0.260712 0.845 0.40124
Infla.l2 -0.151735 0.138992 -1.092 0.27920
Int.l2 0.227660 0.312574 0.728 0.46915
Infla.l3 0.269565 0.137359 1.962 0.05420 .
Int.l3 -0.368027 0.312692 -1.177 0.24371
Infla.l4 -0.314838 0.138184 -2.278 0.02616 *
Int.l4 0.022056 0.228406 0.097 0.92338
const -0.005503 0.014712 -0.374 0.70962
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.1223 on 62 degrees of freedom
Multiple R-Squared: 0.3867, Adjusted R-squared: 0.3076
F-statistic: 4.887 on 8 and 62 DF, p-value: 0.0001053
Estimation results for equation Int:
====================================
Int = Infla.l1 + Int.l1 + Infla.l2 + Int.l2 + Infla.l3 + Int.l3 + Infla.l4 + Int.l4 + const
Estimate Std. Error t value Pr(>|t|)
Infla.l1 0.231265 0.068470 3.378 0.00127 **
Int.l1 0.758654 0.136461 5.559 6.09e-07 ***
Infla.l2 0.007224 0.072751 0.099 0.92122
Int.l2 -0.277996 0.163607 -1.699 0.09430 .
Infla.l3 -0.007653 0.071896 -0.106 0.91557
Int.l3 -0.005043 0.163669 -0.031 0.97552
Infla.l4 0.037890 0.072328 0.524 0.60225
Int.l4 -0.080983 0.119552 -0.677 0.50068
const -0.002883 0.007700 -0.374 0.70938
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.06403 on 62 degrees of freedom
Multiple R-Squared: 0.6811, Adjusted R-squared: 0.64
F-statistic: 16.56 on 8 and 62 DF, p-value: 8.079e-13
Covariance matrix of residuals:
Infla Int
Infla 0.014966 0.003188
Int 0.003188 0.004100
Correlation matrix of residuals:
Infla Int
Infla 1.000 0.407
Int 0.407 1.000
#plot(var_p)
Varianza
sigma2_Infla=sum(var_p$varresult$Infla$residuals^2)/var_p$varresult$Infla$df.residual
sigma2_Int=sum(var_p$varresult$Int$residuals^2)/var_p$varresult$Int$df.residual
Residuales Estandarizados Para Ver Observaciones Atipicas
res_est_Infla=var_p$varresult$Infla$residuals/sigma2_Infla^0.5
res_est_Int=var_p$varresult$Int$residuals/sigma2_Int^0.5
plot.ts(res_est_Infla)
abline(a=-2.7,b=0, col="blue")
abline(a=2.7, b=0, col="blue")
plot.ts(res_est_Int)
abline(a=-2.7, b=0, col="blue")
abline(a=2.7, b=0, col="blue")
shapiro.test(res_est_Infla)
Shapiro-Wilk normality test
data: res_est_Infla
W = 0.98814, p-value = 0.7452
shapiro.test(res_est_Int)
Shapiro-Wilk normality test
data: res_est_Int
W = 0.92241, p-value = 0.0003041
Inflacion
out_Infla=(abs(res_est_Infla)>2.7)
sum(out_Infla)
[1] 0
subset(res_est_Infla, out_Infla==1)
named numeric(0)
Interes
out_Int=(abs(res_est_Int)>2.7)
sum(out_Int)
[1] 2
subset(res_est_Int, out_Int==1)
1 29
-2.967656 -3.792508
length(diff(Infla))
[1] 75
length(res_est_Infla)
[1] 71
Series dummies
out5=as.matrix((seq(tc_gdp[,1])==5))
out33=as.matrix((seq(tc_gdp[,1])==33))
OUT=cbind(out5,out33)
#OUT
var_pn= vars::VAR(tc_gdp,p=4,exogen=as.matrix(OUT))
No column names supplied in exogen, using: exo1, exo2 , instead.
summary(var_pn)
VAR Estimation Results:
=========================
Endogenous variables: Infla, Int
Deterministic variables: const
Sample size: 71
Log Likelihood: 180.58
Roots of the characteristic polynomial:
0.8326 0.8326 0.8161 0.8161 0.674 0.674 0.4358 0.4358
Call:
vars::VAR(y = tc_gdp, p = 4, exogen = as.matrix(OUT))
Estimation results for equation Infla:
======================================
Infla = Infla.l1 + Int.l1 + Infla.l2 + Int.l2 + Infla.l3 + Int.l3 + Infla.l4 + Int.l4 + const + exo1 + exo2
Estimate Std. Error t value Pr(>|t|)
Infla.l1 0.394080 0.128806 3.059 0.00331 **
Int.l1 0.100453 0.261028 0.385 0.70172
Infla.l2 -0.109573 0.137836 -0.795 0.42977
Int.l2 0.254375 0.311971 0.815 0.41808
Infla.l3 0.329575 0.138004 2.388 0.02010 *
Int.l3 -0.383909 0.306350 -1.253 0.21500
Infla.l4 -0.303167 0.135481 -2.238 0.02896 *
Int.l4 -0.007494 0.224097 -0.033 0.97343
const -0.001274 0.014575 -0.087 0.93061
exo1 -0.046595 0.125677 -0.371 0.71213
exo2 -0.277623 0.127332 -2.180 0.03317 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.1197 on 60 degrees of freedom
Multiple R-Squared: 0.4322, Adjusted R-squared: 0.3376
F-statistic: 4.568 on 10 and 60 DF, p-value: 8.135e-05
Estimation results for equation Int:
====================================
Int = Infla.l1 + Int.l1 + Infla.l2 + Int.l2 + Infla.l3 + Int.l3 + Infla.l4 + Int.l4 + const + exo1 + exo2
Estimate Std. Error t value Pr(>|t|)
Infla.l1 0.1913982 0.0522680 3.662 0.000531 ***
Int.l1 0.6417156 0.1059227 6.058 9.82e-08 ***
Infla.l2 0.0710467 0.0559323 1.270 0.208908
Int.l2 -0.3341294 0.1265945 -2.639 0.010568 *
Infla.l3 0.0809206 0.0560005 1.445 0.153661
Int.l3 0.0002168 0.1243136 0.002 0.998614
Infla.l4 0.0617469 0.0549768 1.123 0.265850
Int.l4 -0.1298701 0.0909362 -1.428 0.158435
const 0.0036129 0.0059143 0.611 0.543597
exo1 -0.2257959 0.0509982 -4.428 4.10e-05 ***
exo2 -0.2876563 0.0516698 -5.567 6.40e-07 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.04855 on 60 degrees of freedom
Multiple R-Squared: 0.8226, Adjusted R-squared: 0.793
F-statistic: 27.82 on 10 and 60 DF, p-value: < 2.2e-16
Covariance matrix of residuals:
Infla Int
Infla 0.014316 0.002023
Int 0.002023 0.002357
Correlation matrix of residuals:
Infla Int
Infla 1.0000 0.3483
Int 0.3483 1.0000
#plot(var_pn)
normalitytest = normality.test(var_pn)
normalitytest
$JB
JB-Test (multivariate)
data: Residuals of VAR object var_pn
Chi-squared = 2.8434, df = 4, p-value = 0.5844
$Skewness
Skewness only (multivariate)
data: Residuals of VAR object var_pn
Chi-squared = 1.1573, df = 2, p-value = 0.5607
$Kurtosis
Kurtosis only (multivariate)
data: Residuals of VAR object var_pn
Chi-squared = 1.6861, df = 2, p-value = 0.4304
Se cumple la normalidad
Eliminar los coeficientes no significativos
summary(var_p.rest)
VAR Estimation Results:
=========================
Endogenous variables: Infla, Int
Deterministic variables: const
Sample size: 71
Log Likelihood: 173.664
Roots of the characteristic polynomial:
0.8105 0.8105 0.7872 0.7872 0.5297 0.5297 0 0
Call:
vars::VAR(y = tc_gdp, p = 4, exogen = as.matrix(OUT))
Estimation results for equation Infla:
======================================
Infla = Infla.l1 + Infla.l3 + Infla.l4 + exo2
Estimate Std. Error t value Pr(>|t|)
Infla.l1 0.42858 0.09814 4.367 4.47e-05 ***
Infla.l3 0.31629 0.10844 2.917 0.00481 **
Infla.l4 -0.40707 0.10700 -3.805 0.00031 ***
exo2 -0.28633 0.12004 -2.385 0.01990 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.1172 on 67 degrees of freedom
Multiple R-Squared: 0.3932, Adjusted R-squared: 0.357
F-statistic: 10.86 on 4 and 67 DF, p-value: 7.634e-07
Estimation results for equation Int:
====================================
Int = Infla.l1 + Int.l1 + Int.l2 + exo1 + exo2
Estimate Std. Error t value Pr(>|t|)
Infla.l1 0.22195 0.04849 4.578 2.14e-05 ***
Int.l1 0.70269 0.09278 7.574 1.53e-10 ***
Int.l2 -0.28063 0.08174 -3.433 0.001035 **
exo1 -0.19944 0.04990 -3.997 0.000164 ***
exo2 -0.25486 0.05017 -5.080 3.32e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.04895 on 66 degrees of freedom
Multiple R-Squared: 0.803, Adjusted R-squared: 0.7881
F-statistic: 53.82 on 5 and 66 DF, p-value: < 2.2e-16
Covariance matrix of residuals:
Infla Int
Infla 0.015343 0.002101
Int 0.002101 0.002621
Correlation matrix of residuals:
Infla Int
Infla 1.0000 0.3313
Int 0.3313 1.0000
#plot(var_p.rest)
var_p.estabil = stability(var_p.rest, type = "OLS-CUSUM")
plot(var_p.estabil)
Funcion Impulso Respuesta
var_p.irf = irf(var_p.rest, impulse = "Infla", response = c("Int"), n.ahead = 12,
ortho = TRUE, boot = TRUE, runs=1000)
plot(var_p.irf)
h=4
var_p.rest_pred = predict(var_p.rest, n.ahead = h, ci = 0.95, dumvar=OUT[(length(diff(Int))-h+1):length(diff(Int)),])
var_p.rest_pred
$Infla
fcst lower upper CI
[1,] 0.042948184 -0.1867983 0.2726946 0.2297464
[2,] 0.032972957 -0.2169845 0.2829304 0.2499575
[3,] -0.034308551 -0.2878033 0.2191862 0.2534948
[4,] -0.006105874 -0.2753561 0.2631444 0.2692503
$Int
fcst lower upper CI
[1,] 0.0027185765 -0.09322043 0.09865758 0.0959390
[2,] 0.0114426387 -0.12500738 0.14789266 0.1364500
[3,] 0.0145960125 -0.13753248 0.16672450 0.1521285
[4,] -0.0005694822 -0.15652982 0.15539085 0.1559603
P_Inflacion=as.data.frame(var_p.rest_pred$fcst$Infla)
P_Inflacion$Variable="Inflacion"
p_Interes=as.data.frame(var_p.rest_pred$fcst$Int)
p_Interes$Variable="Interes"
Pronostico=rbind(P_Inflacion,p_Interes)
library("writexl")
write_xlsx("Pronostico.xlsx")
Error in write_xlsx("Pronostico.xlsx") :
Argument x must be a data frame or list of data frames