Para el propósito del presente informe, se va a trabajar con un set de datos que contiene información de la tasa de inflación en Colombia por periodos mensuales, para los años 2019 al 2023. Adicional, se relacionan los datos correspondientes a la TRM (Tasa Representativa del Mercado) e IPC (Índice de Precios al Consumidor) para los mismos periodos y, por último, una categorización del nivel inflación como de “un digito” (con el código 0) y “dos dígitos” (con el código 1).
Con el set de datos, se va a realizar los siguientes análisis:
A la hora de analizar datos, uno de los objetivos de estudio es determinar el grado de dependencia o asociación entre variables. Para ello, los estadísticos denominados coeficientes de correlación indican si existe o no esta asociación y permiten también saber el sentido en que se da esa asociación o correlación entre variables (positiva o negativa).
Para empezar el análisis, se carga el set de datos a R:
library(readxl)
DataSET <- read_excel("G:/Mi unidad/3_Formación_Académica/13_Postgrados-Universidades/Especialización en estadistica/6-Modelos_de_Regresión/DataSET.xlsx")
Se crea el data frame para considerar unicamente los datos de los periodos mensuales de los años 2022 y 2023
Tasa_Inflacion <- head(DataSET$`Inflacion (Y)`,24)
TRM <- head(DataSET$TRM,24)
dataf <- data.frame(Tasa_Inflacion,TRM)
head(dataf)
## Tasa_Inflacion TRM
## 1 9.28 3948.207
## 2 10.15 4038.805
## 3 10.48 4222.433
## 4 10.99 4004.521
## 5 11.43 4070.725
## 6 11.78 4069.234
Se realiza el gráfico de dispersión para visualizar el comportamiento de los datos:
Al observar el gráfico de dispersión, se puede inferir por el comportamiento de los puntos, que existe cierto nivel de correlación entre la tasa de inflación y la TRM, y que esta es positiva.
Para determinar qué coeficiente de correlación utilizar, es decir, si el Coeficiente de Pearson o el coeficiente de Spearman, es necesario realizar una prueba de normalidad a los datos. Realizando la gráfica Q-Q Plot se obtiene:
Q-Q Plot Tasa de Inflación
Se observa cierto nivel de ajuste a la linea diagonal, lo que sugiere que probablemente la tasa de inflación para los últimos dos años (2022 y 2023) se distribuye normalmente.
Q-Q Plot Tasa Representativa del Mercado
Para la el caso del la TRM, se obseva que los puntos no se ajustan perfectamente a la línea diagonal trazada, lo que sugiere que los datos no se distribuyen normalmente.
Para contrastar las inferencias obtenidas de los gráficos qq-plot, se realiza la prueba de Shapiro-Wilk, obteniendo:
shapiro.test(Tasa_Inflacion)
##
## Shapiro-Wilk normality test
##
## data: Tasa_Inflacion
## W = 0.94964, p-value = 0.2661
shapiro.test(TRM)
##
## Shapiro-Wilk normality test
##
## data: TRM
## W = 0.91639, p-value = 0.04863
Para interpretar el resultado de la prueba de Shapiro-Wilk, se parte de que si el valor p es mayor que el nivel de significancia (se va a tomar por defecto un valor de 0.05), los datos presentan una distribución normal. Para el caso de los datos de la TRM, se observa que el valor p obtenido de 0.04863 es inferior al nivel de significancia de 0.05, por lo que se rechaza la normalidad y se concluye que los datos no se distribuyen normalmente, tal como se había visualizado previamente con el grafico Q-Q Plot. Para el caso de la tasa de inflación, el valor p de 0.2661 es mayor al nivel de significacia de 0.05, lo que sugiere normalidad en la distribución de la variable tasa de inflación.
Dado que una de las variables no sigue una distribución normal, no se puede aplicar la prueba de correlación de Pearson, por lo que se decide aplicar la Prueba de correlación de Spearman, la cual evalúa la relación monotónica entre dos variables, especialmente cuando las relaciones no son lineales.
El coeficiente de correlación de Spearman es un método no paramétrico, para el cual no es necesario hacer ninguna hipótesis acerca de la distribución que siguen los datos. El rango de valores que toma va desde -1 a 1, presentando un grado más fuerte de asociación entre más cerca se esté de los extremos y el signo indica si la relación funcional entre ambas variables es creciente o decreciente. Al aplicar la prueba se obtiene:
resultado_correlacion <- cor.test(Tasa_Inflacion, TRM, method = "spearman")
print(resultado_correlacion)
##
## Spearman's rank correlation rho
##
## data: Tasa_Inflacion and TRM
## S = 256, p-value = 2.696e-06
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.8886957
El coeficiente Rho obtenido es de 0.8886957, el cual es un valor alto con signo positivo. Esto permite ver que existe una relación significativa entre la tasa de inflación y la TRM, con signo positivo, es decir, que conforme una variable crece, es probable que la otra variable también crezca y viceversa.
El Modelo de regresión lineal simple permite explicar la relación lineal que existe entre dos variables. Se establece Y como la variable dependiente y X como la variable independiente. Este se describe de acuerdo con la siguiente ecuación:
Siendo \(\beta_0\) la ordenada en el origen, \(\beta_1\) la pendiente y \(\epsilon\) el error aleatorio.
El modelo lineal entre la variable Tasa de Inflación (Dependiente) y TRM (Independiente) se determina a continuación:
regresion <- lm(Tasa_Inflacion ~ TRM, data = dataf)
regresion
##
## Call:
## lm(formula = Tasa_Inflacion ~ TRM, data = dataf)
##
## Coefficients:
## (Intercept) TRM
## -7.230503 0.004241
summary(regresion)
##
## Call:
## lm(formula = Tasa_Inflacion ~ TRM, data = dataf)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.78990 -0.42039 0.09387 0.40366 1.75489
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -7.2305035 2.6164789 -2.763 0.0113 *
## TRM 0.0042405 0.0006079 6.976 5.3e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.038 on 22 degrees of freedom
## Multiple R-squared: 0.6887, Adjusted R-squared: 0.6745
## F-statistic: 48.67 on 1 and 22 DF, p-value: 5.299e-07
Se muestran los errores estándar, el valor del estadistico t y el p-value de cada uno de los dos parámetros (\(\beta_0\), \(\beta_1\)).Para el modelo generado, se puede concluir que tanto la ordenada en el origen como la pendiente son significativas (p-value < 0.05)
El valor de \(R^2\) indica que el modelo calculado explica el 68.87% de la variabilidad presente en la variable respuesta mediante la variable independiente.
El p-value obtenido en el test F (5.299e-07) determina que sí es significativamente superior la varianza explicada por el modelo en comparación a la varianza total. Es el parámetro que determina si el modelo es significativo y por lo tanto se puede aceptar.
La ecuación que se obtiene para el modelo es la siguiente:
Donde el valor de \(-7.2305035\) corresponde al intercepto y el valor \(0.0042405\) a la pendiente de la recta. El intercepto es el valor que toma la variable dependiente \(Y\) cuando la variable independiente \(X\) es igual a cero, y la pendiente, que para este caso es positiva, indica que por cada unidad de variación en la variable dependiente, la variable independiente variará en una tasa igual a \(0.0042405\).
Representación gráfica del modelo
## `geom_smooth()` using formula = 'y ~ x'
Verificación de condiciones para aceptar un modelo lineal
Relación lineal entre la variable dependiente e independiente:
Se calculan los residuos para cada observación y se grafican.
Se observa que los residuos se distribuyen de forma aleatoria entorno a 0 por lo que se puede aceptar linealidad.
Distribución normal de los residuos:
Realizando el gráfico de normalidad de QQ-Plot se obtiene:
qqnorm(regresion$residuals)
qqline(regresion$residuals)
Se observa que graficamente, los residuos no se ajustan a la linea diagonal, sugiriendo que estos no se distribuyen normalmente. Para contrastar, se hace la prueba de normalidad de Shapiro-Wilk, la cual arroja como resultado:
shapiro.test(regresion$residuals)
##
## Shapiro-Wilk normality test
##
## data: regresion$residuals
## W = 0.95883, p-value = 0.4154
En conclusión, a pesar de que el gráfico qq-plot sugiere que no hay normalidad; el contraste de hipotesis de Shapiro (p-value = 0.4154 > 0.05) sugiere normalidad en los residuos.
Prueba de Homocedasticidad:
library(car)
## Loading required package: carData
ncvTest(regresion)
## Non-constant Variance Score Test
## Variance formula: ~ fitted.values
## Chisquare = 2.404355, Df = 1, p = 0.121
La varianza de los residuos debe ser constante, supuesto que se demuestra con la prueba al obtener un valor p = 0.121 > 0.05.
Autocorrelación de residuos:
Se observa que la distribución de los residuos no muestra ninguna tendencia.
En conclusión, validadas las condiciones de linealidad, distribución normal de los residuos, de homocedasticidad (varianza constante) y de independencia (acutocorrelación) de los residuos, se determina que si es posible determinar linealidad en el modelo. Adicional a lo anterior, el valor de \(R^2\) no es lo suficientemente alto, por lo que no se puede establecer que la TRM sea muy confiable como predictora de la tasa de Inflación.
El modelo de regresión lineal multiple busca explicar la relación lineal entre una variable dependiente y dos o más variables independientes. Para el caso del presente ejercicio, se va a trabajar en estimar un modelo a partir de la posible relación entre las variables inflación, TRM y el IPC, a través de la siguiente ecuación:
Donde:
\(Y\) : Es la variable dependiente, que para los propósitos del modelo es la Tasa de Inflación.
\(X_i\): Hace referencia a las variables predictoras, que para el modelo a plantear son la TRM y el IPC.
\(\beta_0\): Es el intercepto (valor que asume \(Y\) cuando \(X_i\) es igual a cero).
\(\beta_i\): Es la pendiente, o el cambio de la variable en \(Y\), por cada unidad que cambie la variable en \(X_i\)
El modelo de regresión lineal multiple se estima a continuación:
#Establecer el set de datos
Tasa_Inflacion <- head(DataSET$`Inflacion (Y)`,24)
TRM <- head(DataSET$TRM,24)
IPC <- head(DataSET$IPC,24)
dataf2 <- data.frame(Tasa_Inflacion,TRM, IPC)
head(dataf2)
## Tasa_Inflacion TRM IPC
## 1 9.28 3948.207 176.32
## 2 10.15 4038.805 192.85
## 3 10.48 4222.433 199.12
## 4 10.99 4004.521 208.81
## 5 11.43 4070.725 217.17
## 6 11.78 4069.234 223.82
#Modelo de regresión
multiple <- lm(Tasa_Inflacion ~ TRM + IPC)
multiple
##
## Call:
## lm(formula = Tasa_Inflacion ~ TRM + IPC)
##
## Coefficients:
## (Intercept) TRM IPC
## -1.1805967 0.0007559 0.0437966
summary(multiple)
##
## Call:
## lm(formula = Tasa_Inflacion ~ TRM + IPC)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.37385 -0.17056 0.02855 0.13276 0.33789
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.1805967 0.5797557 -2.036 0.054520 .
## TRM 0.0007559 0.0001923 3.932 0.000764 ***
## IPC 0.0437966 0.0018843 23.243 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2056 on 21 degrees of freedom
## Multiple R-squared: 0.9884, Adjusted R-squared: 0.9872
## F-statistic: 890.9 on 2 and 21 DF, p-value: < 2.2e-16
Interprestación del \(R^2\)
El modelo obtenido presenta un valor de \(R^2 = 0.9884\), esto indica que el modelo de regresión lineal multiple obtenido explica el \(98.84\) % de la variabilidad total en la Tasa de Inflación, utilizando las variables independientes TRM y IPC. Esto es, el modelo explica el \(98.84\) % de las variaciones en la Tasa de Inflación, mientras que el \(1.16\) % restante se debe a factores no incluidos en el modelo o a errores aleatorios.
En terminos generales, un \(R^2\) de \(0.9884\) sugiere que el modelo tiene un muy buen ajuste a los datos.
Interpretación de los coeficientes de regresión y valores -p
TRM: para esta variable el coeficiente de regresión es 0.0007559, lo que indica que al mantenerse constantes todas las variables predictorias, un incremento en la TRM de $1 se asocia con un incremento de 0.0007559 en la tasa de inflación. El valor P obtenido para este coeficiente es de 0.000764 el cual es menor a un nivel de significacia de 0.05, lo que permite concluir que la TRM es estadisticamente significativa para el modelo.
IPC: para esta variable el coeficiente de regresión es 0.0437966, lo que significa que al mantenerse constantes todas las variables predictorias, un incremento en el IPC de 1 punto se asocia con un incremento de 0.0437966 en la tasa de inflación. El valor P obtenido para este coeficiente es de 2e-16 el cual es significativamente menor a un nivel de significancia de 0.05., lo que indica que esta variable es importante para predecir la Tasa de Inflación y aporta información valiosa al modelo.
Intercepto: el valor obtenido para el intercepto es de -1.1805967, que es el valor que tomaria la tasa de inflación si los valores para la TRM y el IPC se igualan a cero. El valor P obtenido para el intercepto es de 0.054520 el cual es mayor a un nivel de significancia de 0.05, en consecuencia, no se puede afirmar que el valor para el intercepto sea estadisticamente significativo para el modelo.
Análisis de supuestos
El análisis de supuestos permite determinar si el modelo es valido y confiable. Los supuestos a verificar son la linealidad de la relación entre las variables, la normalidad de los residuos, la homogeneidad de varianzas y la independencia de los errores. Si alguno de estos supuestos no se cumple, no se puede confiar en los resultados arrojados por el modelo.
Supuesto de linealidad
Este supuesto establece que la relación entre la variable dependiente y las variables independientes debe ser lineal. En el gráfico de residuos que se presenta a continuación, se observa que estos parecen estar distribuidos aleatoriamente al rededor de cero, lo que podría sugerir que el modelo se ajusta bien a los datos ya que no se presentan formas no aleatorias en la distribución de los residuos, lo que permitiría concluir linealidad.
Supuesto de normalidad:
Realizando el gráfico de normalida de QQ-Plot para los residuos se obtiene:
qqnorm(multiple$residuals)
qqline(multiple$residuals)
Se observa que los puntos de la distribución de los residuos no sigue perfectamente la linea diagonal, lo que da indicios de no normalidad; sin embargo, para tener certeza, se aplica la prueba de Shapiro-Wilk
La hipótesis a probar:
Se rechaza \(H_o\) si:
Donde \(Alpha\) es el nivel de significancia, con valor igual a 5% (0.05). Realizando la prueba se obtiene:
shapiro.test(multiple$residuals)
##
## Shapiro-Wilk normality test
##
## data: multiple$residuals
## W = 0.96116, p-value = 0.4621
Por lo tanto: En consecuencia, no rechazo la hipótesis nula, lo que implica que hay normalidad en la distribución de los residuos y se satisface así el supuesto de normalidad.
Supuesto de homocedasticidad:
Este supuesto se cumple cuando los errores tienen una varianza constante a lo largo del rando de los valores de las variables independientes. Para probarlo, se parte de la hipótesis:
Se rechaza \(H_o\) si:
library(car)
ncvTest(multiple)
## Non-constant Variance Score Test
## Variance formula: ~ fitted.values
## Chisquare = 0.5085372, Df = 1, p = 0.47577
La varianza de los residuos debe ser constante, supuesto que se demuestra con la prueba al obtener un valor p = 0.47577 > 0.05. Se concluye entonces que se acepta \(H_0\) y se rechaza \(H_1\), por lo tanto, se cumple el supuesto de homocedasticidad.
Autocorrelación de residuos:
Se observa que la distribución de los residuos no muestra ninguna tendencia.
En conclusión, validadas las condiciones de linealidad, distribución normal de los residuos, de homocedasticidad (varianza constante) y de independencia (acutocorrelación) de los residuos, se determina que si es posible determinar linealidad en el modelo. Adicional a lo anterior, el valor de \(R^2\) es lo suficientemente alto, por lo que se puede establecer que la TRM y el IPC son muy confiables como predictoras de la tasa de Inflación.
Grafica de cajas y bigotes para ambos niveles de inflación en un mismo plano
ggplot(data = DataSET, aes(x = factor(`Nivel de Inflacion`), y = TRM, fill = factor(`Nivel de Inflacion`))) +
geom_boxplot(outlier.shape = NA) +
geom_jitter(width = 0.1) +
theme_bw() +
labs(title = "Cajas de Bigotes para Nivel de Inflación") +
scale_fill_manual(values = c("lightblue", "lightgreen"), name = "Nivel de Inflación") +
theme(legend.position = "top")
0 = nivel de inflación de un dígito 1= nivel de inflación de dos dígitos
El promedio de la TRM cuando el nivel de inflación es de dos digitos es mayor a la TRM promedio cuando el nivel de inflación es de 1 digito.Esto se puede observar debido a que las cajas en el diagrama de box plot no se traslapan.
Se observa en el ancho de las cajas que la variabilidad de la TRM cuando el nivel de inflación es de un digito, es aproximadamente igual a la variabilidad de la TRM cuando el nivel es de dos dígitos. Esto indica que hay homogeneidad de las varianzas.
En el Modelo de regresión logística, la variable Y está en función de x, donde Y es una variable categórica, en este caso el nivel de inflación, que tomará solo dos valores: cero y uno y x será una variable numérica, para este caso la TRM. En este sentido, el modelo de regresión actúa como un problema de clasificación: cero cuando aumente un dígito y uno cuando la tasa de inflación aumente dos dígitos .por esta razón, se considera la función binomial, codificando el nivel de inflación con cero y uno.
Teniendo en cuenta que es un modelo de regresión, también se obtienen los coeficientes, donde y (nivel de inflación) es una variable categórica.
Se calcularon los residuos para dar cuenta de los errores del pronóstico, los cuales como son muy cercanos a cero, es bueno para el modelo.
Generacion del modelo de regresión logistica
modelo<-glm(`Nivel de Inflacion` ~ TRM, data=DataSET, family="binomial")
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(modelo)
##
## Call:
## glm(formula = `Nivel de Inflacion` ~ TRM, family = "binomial",
## data = DataSET)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -337.37543 233.21577 -1.447 0.148
## TRM 0.08402 0.05813 1.445 0.148
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 71.5289 on 59 degrees of freedom
## Residual deviance: 5.1114 on 58 degrees of freedom
## AIC: 9.1114
##
## Number of Fisher Scoring iterations: 12
residuos <- residuals(modelo)
summary(residuos)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -1.3183886 -0.0001501 0.0000000 -0.0048286 0.0000000 1.5745417
odds_predichos <- exp(predict(modelo, type = "link"))
odds_predichos
## 1 2 3 4 5 6
## 3.590211e-03 7.263730e+00 3.647659e+07 4.074648e-01 1.061651e+02 9.365926e+01
## 7 8 9 10 11 12
## 1.206694e+07 1.424637e+19 1.770294e+19 2.562480e+27 5.646593e+28 3.498499e+25
## 13 14 15 16 17 18
## 1.652781e+28 1.820649e+33 2.634974e+25 1.860529e+15 1.631052e+11 7.359636e+12
## 19 20 21 22 23 24
## 8.292909e-04 1.384702e+00 7.776031e-09 2.561726e-08 1.269648e-03 2.698466e-01
## 25 26 27 28 29 30
## 1.258399e-02 7.977210e-05 1.498330e-09 8.566293e-08 1.286328e-05 1.660960e-07
## 31 32 33 34 35 36
## 8.951704e-13 6.298314e-11 5.028850e-14 2.063096e-15 1.543063e-17 7.634180e-20
## 37 38 39 40 41 42
## 9.191373e-21 9.401922e-13 2.397940e-07 2.138673e-10 3.368550e-09 9.124743e-14
## 43 44 45 46 47 48
## 3.599675e-12 1.863567e-06 4.170394e-02 9.087705e-06 8.987591e-23 2.039354e-26
## 49 50 51 52 53 54
## 5.615023e-24 4.018509e-23 5.833094e-22 3.392332e-23 8.746415e-23 3.110981e-30
## 55 56 57 58 59 60
## 2.886621e-28 1.161954e-26 4.343578e-32 4.463056e-33 1.516625e-33 9.587558e-32
Graficacion del modelo
plot(`Nivel de Inflacion` ~ TRM, DataSET, col = "darkblue",
main = "Modelo regresión logística",
ylab = "P(Inflacion=1|trm)",
xlab = "TRM", pch = "I")
# type = "response" devuelve las predicciones en forma de probabilidad en lugar de en log_ODDs
curve(predict(modelo, data.frame(TRM = x), type = "response"),
col = "firebrick", lwd = 2.5, add = TRUE)
La gráfica muestra el modelo de regresión logística, indicando las tasas representativas del mercado para el nivel de cero con un dígito y para el nivel uno con dos dígitos. La curva a su vez está indicando el pronóstico, porque los puntos pasan por la la curva.
Evaluación del modelo
anova(modelo, test="Chisq")
## Analysis of Deviance Table
##
## Model: binomial, link: logit
##
## Response: Nivel de Inflacion
##
## Terms added sequentially (first to last)
##
##
## Df Deviance Resid. Df Resid. Dev Pr(>Chi)
## NULL 59 71.529
## TRM 1 66.418 58 5.111 3.648e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
El modelo logístico creado para predecir la probabilidad de que haya una inflacion de dos digitos considerando la TRM es en conjunto significativo acorde al Likelihood ratio (p-value = 3.648e-16 ). Sin embargo el p-value del predictor TRM no es significativo (p-value = 0.148).
Comparacion de clasificación - Review Treshold concep
library(vcd)
## Loading required package: grid
predicciones <- ifelse(test = modelo$fitted.values > 0.5, yes = 1, no = 0)
matriz_confusion <- table(modelo$model$`Nivel de Inflacion`, predicciones,
dnn = c("observaciones", "predicciones"))
matriz_confusion
## predicciones
## observaciones 0 1
## 0 42 1
## 1 1 16
El modelo indica que si el valor ajustado es mayor a cero, asigna el dato con el valor de 1, de lo contrario, si no se cumple, lo asigna con el valor de cero. Se espera que si la observación pertenece al grupo 1, se mantenga allí. De 43 observaciones en el grupo cero , al clasificarla quedó una en el grupo uno y de las 17 observaciones en el grupo uno, al clasificarlas, quedó una en el grupo cero. Observando las diagonales 42 y 16 quedaron bien clasificadas; solamente una de cada grupo quedó mal clasificada, lo que indica que la tasa de error es muy baja, esto a su vez es muy bueno para el modelo.
Grafica comparacion de clasificación
mosaic(matriz_confusion, shade = T, colorize = T,
gp = gpar(fill = matrix(c("green3", "red2", "red2", "green3"), 2, 2)))
El gráfico tipo mosaico, está indicando con el color verde que ocupa la mayor parte del área y estas son las predicciones correctas, mientras que el color rojo que corresponde a las clasificaciones incorrectas, tienen un área muy pequeña.
Del total de clasificaciones correctas (42+16) sobre el total de observaciones (43+17) se obtiene la tasa de clasificación del 96%. Lo que indica que en un 96% las tasas de inflación observadas coinciden con las tasas de inflación en el modelo.
El modelo logístico para predecir la probabilidad del nivel de inflación de dos o de un dígito, considerando la tasa representativa del mercado es significativo, es decir, que el modelo hace una buena predicción. Aunque el modelo en general es bueno, el TRM como predictor podría ser mejor.