Mediante un modelo se busca determinar el comportamiento de estas dos variables tomando como variable dependiente SALARIO MINIMO LEGAL MENSUAL (SMLM) y como variable independiente INFLACION en Colombia:
Los siguientes datos corresponden a la INFLACION y al SALARIO MINIMO LEGAL MENSUAL (SMLM) desde el año 1999 para Colombia.
library(readxl)
require(ggplot2)
require(lmtest)
require(plotly)
inflacion_salario <- read_excel("C:/Users/pocho/Desktop/R/inflacion_salario.xlsx")
inflacion_salario
## # A tibble: 17 × 3
## año inflacion SMLM
## <dbl> <dbl> <dbl>
## 1 1999 9.23 236460
## 2 2000 8.75 260100
## 3 2001 7.65 286000
## 4 2002 6.99 309000
## 5 2003 6.49 332000
## 6 2004 5.5 358000
## 7 2005 4.85 381500
## 8 2006 4.48 408000
## 9 2007 5.69 433700
## 10 2008 7.67 461500
## 11 2009 2 496900
## 12 2010 3.17 515000
## 13 2011 3.73 535600
## 14 2012 2.44 566700
## 15 2013 1.94 589500
## 16 2014 3.66 616027
## 17 2015 6.77 644350
## Análisis Bivariado
g2=ggplot(data = inflacion_salario, mapping = aes(x=inflacion,y=SMLM))+geom_point()+theme_bw()+geom_smooth(method = "lm")
ggplotly(g2)
## `geom_smooth()` using formula 'y ~ x'
Para continuar deseamos conocer que tanta correlación tienen estas dos variables y estan se explican en un 70%.
## Correlación de Pearson
cor(inflacion_salario$inflacion,inflacion_salario$SMLM)
## [1] -0.7086581
Modelo1
Ahora, se realizará el primero modelo de regresión lineal simple para determinar su el r\(^2\)
mod_inf=lm(SMLM~inflacion, data = inflacion_salario)
mod_inf
##
## Call:
## lm(formula = SMLM ~ inflacion, data = inflacion_salario)
##
## Coefficients:
## (Intercept) inflacion
## 648486 -39489
La ecacuación de regresión es \[y=648486 + (-39489x)\]
ESto quiere decir que el promedio de el salario mínimo sin estimar la inflacion es de 648.486 y cuando aumenta la inflación disminuye el salario mínimo en 39.489.
Ahora, para poder determinar que tanto el salario mínimo es explicado por la inflación se encontrara el r\(^2\) y determinar la significancia de los de los supuestos
summary(mod_inf)
##
## Call:
## lm(formula = SMLM ~ inflacion, data = inflacion_salario)
##
## Residuals:
## Min 1Q Median 3Q Max
## -75463 -63456 -42854 17623 263207
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 648486 58947 11.00 1.4e-08 ***
## inflacion -39489 10151 -3.89 0.00145 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 94130 on 15 degrees of freedom
## Multiple R-squared: 0.5022, Adjusted R-squared: 0.469
## F-statistic: 15.13 on 1 and 15 DF, p-value: 0.00145
p1= 0.00145
El valor de r\(^2\):0.469, es decir que la variable explica en un 46,9% el modelo con un p-value: 0.00145
Partiendo de este resultado es necesario realizar otro modelo utilizando la trasnformación para poder encontrar un el r\(^2\) más alto.
Modelo2
Ahora, se realizará el primero modelo de regresión lineal simple para determinar su el r\(^2\)
mod_inf2=lm(SMLM~log(inflacion), data = inflacion_salario)
mod_inf2
##
## Call:
## lm(formula = SMLM ~ log(inflacion), data = inflacion_salario)
##
## Coefficients:
## (Intercept) log(inflacion)
## 712980 -175481
La ecacuación de regresión es \[y=712980 + (-175481x)\]
ESto quiere decir que el promedio de el salario mínimo sin estimar la inflacion es de 712.980 y cuando aumenta la inflación disminuye el salario mínimo en 175.481.
Ahora, para poder determinar que tanto el salario mínimo es explicado por la inflación se encontrara el r\(^2\) y determinar la significancia de los de los supuestos
summary(mod_inf2)
##
## Call:
## lm(formula = SMLM ~ log(inflacion), data = inflacion_salario)
##
## Residuals:
## Min 1Q Median 3Q Max
## -94445 -62759 -41824 25832 266979
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 712980 80886 8.815 2.56e-07 ***
## log(inflacion) -175482 49169 -3.569 0.0028 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 98110 on 15 degrees of freedom
## Multiple R-squared: 0.4592, Adjusted R-squared: 0.4232
## F-statistic: 12.74 on 1 and 15 DF, p-value: 0.002798
p2= 0.002798
El valor de r\(^2\):0.4232, es decir que la variable explica en un 42,32% el modelo con un p-value: 0.002798, lo cual no mejora la significancia con respecto al modelo1 mod_inf
Continuaremos haciendo un tercer modelo utilizando la trasnformación en x para poder encontrar un el r\(^2\) más alto.
Modelo3
Ahora, se realizará el primero modelo de regresión lineal simple para determinar su el r\(^2\)
mod_inf3=lm(log(SMLM)~inflacion, data = inflacion_salario)
mod_inf3
##
## Call:
## lm(formula = log(SMLM) ~ inflacion, data = inflacion_salario)
##
## Coefficients:
## (Intercept) inflacion
## 13.4855 -0.1012
La ecacuación de regresión es \[y=13.4855 + (-0.1012x)\]
ESto quiere decir que el promedio de el salario mínimo sin estimar la inflacion es de 13.48 y cuando aumenta la inflación disminuye el salario mínimo en 0.1012 lo cual no parece correcto
Ahora, para poder determinar que tanto el salario mínimo es explicado por la inflación se encontrara el r\(^2\) y determinar la significancia de los de los supuestos
summary(mod_inf3)
##
## Call:
## lm(formula = log(SMLM) ~ inflacion, data = inflacion_salario)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.17778 -0.14056 -0.11307 0.07049 0.57569
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 13.48553 0.13378 100.806 < 2e-16 ***
## inflacion -0.10121 0.02304 -4.393 0.000524 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2136 on 15 degrees of freedom
## Multiple R-squared: 0.5627, Adjusted R-squared: 0.5335
## F-statistic: 19.3 on 1 and 15 DF, p-value: 0.0005238
p3= 0.0005238
El valor de r\(^2\):0.5335, es decir que la variable explica en un 53,35% el modelo con un p-value: 0.0005238, lo cual mejora la significancia con respecto al modelo1 mod_inf2
Continuaremos haciendo un ultimo modelo utilizando la trasnformación en x para poder encontrar un el r\(^2\) más alto.
Modelo4
Ahora, se realizará el primero modelo de regresión lineal simple para determinar su el r\(^2\)
mod_inf4=lm(log(SMLM)~log(inflacion), data = inflacion_salario)
mod_inf4
##
## Call:
## lm(formula = log(SMLM) ~ log(inflacion), data = inflacion_salario)
##
## Coefficients:
## (Intercept) log(inflacion)
## 13.6383 -0.4418
La ecacuación de regresión es \[y=13.6383 + (-0.4418x)\]
ESto quiere decir que el promedio de el salario mínimo sin estimar la inflacion es de 13.6383 y cuando aumenta la inflación disminuye el salario mínimo en 0.4418 lo cual no parece correcto
Ahora, para poder determinar que tanto el salario mínimo es explicado por la inflación se encontrara el r\(^2\) y determinar la significancia de los de los supuestos
summary(mod_inf4)
##
## Call:
## lm(formula = log(SMLM) ~ log(inflacion), data = inflacion_salario)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.2829 -0.1381 -0.0585 0.1100 0.5827
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 13.6383 0.1890 72.165 < 2e-16 ***
## log(inflacion) -0.4418 0.1149 -3.846 0.00159 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2292 on 15 degrees of freedom
## Multiple R-squared: 0.4965, Adjusted R-squared: 0.4629
## F-statistic: 14.79 on 1 and 15 DF, p-value: 0.001588
p4= 0.001588
El valor de r\(^2\):0.4629, es decir que la variable explica en un 46.29% el modelo con un p-value: 0.001588, lo cual no mejora la significancia con respecto al modelo1 mod_inf3
Analizaremos cada uno de los modelos para validar el mas optimo junto con sus p-value
library(memisc)
memisc::mtable(mod_inf,mod_inf2,mod_inf3,mod_inf4)
##
## Calls:
## mod_inf: lm(formula = SMLM ~ inflacion, data = inflacion_salario)
## mod_inf2: lm(formula = SMLM ~ log(inflacion), data = inflacion_salario)
## mod_inf3: lm(formula = log(SMLM) ~ inflacion, data = inflacion_salario)
## mod_inf4: lm(formula = log(SMLM) ~ log(inflacion), data = inflacion_salario)
##
## =======================================================================
## mod_inf mod_inf2 mod_inf3 mod_inf4
## ------------- -------------- --------- ---------
## SMLM SMLM log(SMLM) log(SMLM)
## -----------------------------------------------------------------------
## (Intercept) 648485.931*** 712979.637*** 13.486*** 13.638***
## (58946.792) (80885.492) (0.134) (0.189)
## inflacion -39489.329** -0.101***
## (10151.411) (0.023)
## log(inflacion) -175481.461** -0.442**
## (49168.933) (0.115)
## -----------------------------------------------------------------------
## R-squared 0.502 0.459 0.563 0.496
## N 17 17 17 17
## =======================================================================
## Significance: *** = p < 0.001; ** = p < 0.01; * = p < 0.05
pvalores=data.frame(p1,p2,p3,p4)
names(pvalores)=c("pvalor modelo1","pvalor modelo2","pvalor modelo3","pvalor modelo4")
pvalores
## pvalor modelo1 pvalor modelo2 pvalor modelo3 pvalor modelo4
## 1 0.00145 0.002798 0.0005238 0.001588
Con lo anterior se utilizará el modelo3 mod_inf para las pruebas de hipótesis teniendo en cuenta su r\(^2\) y su p_value, es decir que no se tuvo en cuenta el modelo con la transformación lineal-logaritmica (log-lin) ya que las predicciones no eran correctas
Hipotesis a: Que sucede cuando la inflación es de 5,1
*R* Se podría estimar el comportamiento de salario de 447.090.4 y se moverá entre un rango entre 398.119.2 y 496061.5
ph3=predict(mod_inf,list(inflacion=5.1),interval = "confidence",level = 0.95)
ph3
## fit lwr upr
## 1 447090.4 398119.2 496061.5
Hipotesis b: Que sucede cuando la inflación es de 8,31
R Se podría estimar el comportamiento de salario de 332571.3 y se moverá entre un rango entre 257424.5 y 407718.1
ph4=predict(mod_inf,list(inflacion=8,31),interval = "confidence",level = 0.95)
ph4
## fit lwr upr
## 1 332571.3 257424.5 407718.1
Los estimados hacen alusión a la fórmula \[y=\hat{\beta}_{0} + (\hat{\beta}_{1} x_{1})\]
summary(mod_inf)
##
## Call:
## lm(formula = SMLM ~ inflacion, data = inflacion_salario)
##
## Residuals:
## Min 1Q Median 3Q Max
## -75463 -63456 -42854 17623 263207
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 648486 58947 11.00 1.4e-08 ***
## inflacion -39489 10151 -3.89 0.00145 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 94130 on 15 degrees of freedom
## Multiple R-squared: 0.5022, Adjusted R-squared: 0.469
## F-statistic: 15.13 on 1 and 15 DF, p-value: 0.00145
El estimado \(\hat{\beta}_{0}\) manifiesta que el salario sin estimar la inflación es de 648486.
El estimado \(\hat{\beta}_{1}\) expresa que, por cada 1% de inflación disminuye la pryección de salarios -39489. Ademias de ello su significancia es buena (0.00145 **)
e=mod_inf$residuals
summary(e)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -75463 -63456 -42854 0 17623 263207
barplot(e)
Se puede evidenciar que se cumple el supuesto que la media de los errores es 0
Otro supuesto que se puede comprobar es \(\delta^2\) de los errores, que para el modelo tiene un p-value = 3.171e-06
require(lmtest)
lmtest::gqtest(mod_inf)
##
## Goldfeld-Quandt test
##
## data: mod_inf
## GQ = 140.68, df1 = 7, df2 = 6, p-value = 3.171e-06
## alternative hypothesis: variance increases from segment 1 to 2
Ahora, vamos a verificar la covarianza de los errores, en el cual p-value = 0.0002714
dwtest(mod_inf)
##
## Durbin-Watson test
##
## data: mod_inf
## DW = 0.68432, p-value = 0.0002714
## alternative hypothesis: true autocorrelation is greater than 0
Se realizará una validacion cruzada para poder evaluar el poder predictivo del modelo.
## segmentación de datos
id_modelo2 = sample(1:17, size = 13)
inf_modelar = inflacion_salario[id_modelo2,]
inf_validar = inflacion_salario[id_modelo2,]
##estimar el modelo set de modelar
mod_inf_modelar = lm(SMLM~inflacion, data= inflacion_salario)
## predecir el set de validacion
inf_pred = predict(mod_inf_modelar,list(inflacion=inf_validar$inflacion))
## comparar datos de modelo y reales
inflacion_real = inf_validar$SMLM
error = inflacion_real - inf_pred
res2 = data.frame(inflacion_real,inf_pred,error)
res2
## inflacion_real inf_pred error
## 1 236460 283999.4 -47539.425
## 2 260100 302954.3 -42854.303
## 3 332000 392200.2 -60200.186
## 4 566700 552132.0 14568.031
## 5 644350 381143.2 263206.826
## 6 461500 345602.8 115897.222
## 7 589500 571876.6 17623.367
## 8 535600 501190.7 34409.266
## 9 381500 456962.7 -75462.686
## 10 433700 423791.6 9908.351
## 11 616027 503955.0 112072.013
## 12 515000 523304.8 -8304.758
## 13 496900 569507.3 -72607.273
residual= mod_inf$residuals
residuales=data.frame(residual)
residuales
## residual
## 1 -47539.425
## 2 -42854.303
## 3 -60392.564
## 4 -63455.522
## 5 -60200.186
## 6 -73294.622
## 7 -75462.686
## 8 -63573.737
## 9 9908.351
## 10 115897.222
## 11 -72607.273
## 12 -8304.758
## 13 34409.266
## 14 14568.031
## 15 17623.367
## 16 112072.013
## 17 263206.826
barplot(residuales$residual)