El presente trabajo se elabora con una base de datos de 1470 entradas y 24 variables cuantitativas y cualitativas. Se estudia el ingreso mensual de los trabajadores de una empresa colombiana y demás características.
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
Se realiza un análisis exploratiorio o univariado de los datos.
promedio=mean(base3_ingreso$Ingreso_Mensual) #promedio / media
desviación=sd(base3_ingreso$Ingreso_Mensual) #desviación estandar
Ingreso <- base3_ingreso$Ingreso_Mensual
data.frame(promedio,desviación)
## promedio desviación
## 1 6502931 4707957
el promedio de ingresos en la compañia es de 6.502.931 millones de pesos; la desviación estandar tan alta indica una gran variabilidad en los ingresos mensuales que van desde 1.090.000 hasta 20.299.655 pesos.
g1=ggplot(data = base3_ingreso,mapping = aes(x=Ingreso))+geom_histogram(fill="purple")+theme_bw()
ggplotly(g1)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
g2=ggplot(data=base3_ingreso,mapping = aes(x=Años_Experiencia,y=Ingreso))+geom_point()+theme_bw()+
geom_smooth()
ggplotly(g2)
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
cor(base3_ingreso$Ingreso_Mensual,base3_ingreso$Años_Experiencia)
## [1] 0.7728932
Se puede evidenciar una relación positiva entre la variable ingresos mensuales y los años de experiencia con un coeficiente de correlación de 0.77 (alto). Es decir que a mayor número de años de experiencia, mayor número de ingresos.
g3=ggplot(data=base3_ingreso,mapping = aes(x=Edad,y=Ingreso))+geom_point()+theme_bw()+
geom_smooth()
ggplotly(g3)
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
cor(base3_ingreso$Ingreso_Mensual,base3_ingreso$Edad)
## [1] 0.4978546
Se puede observar que se evidencia una relación positiva entre la variable ingresos mensuales y edad con un coeficiente de correlación de 0.49 (alto).
g4=ggplot(data=base3_ingreso,mapping = aes(x=Antigüedad,y=Ingreso))+geom_point()+theme_bw()+
geom_smooth()
ggplotly(g4)
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
cor(base3_ingreso$Ingreso_Mensual,base3_ingreso$Antigüedad)
## [1] 0.5142848
Se puede observar que se evidencia una relación entre la variable ingresos mensuales y antigüedad con un coeficiente de correlación de 0.51 (alto).
Modelo 1 Ingresos - Años de experiencia
modelo1<- lm(Ingreso_Mensual~Años_Experiencia, data=base3_ingreso)
modelo1
##
## Call:
## lm(formula = Ingreso_Mensual ~ Años_Experiencia, data = base3_ingreso)
##
## Coefficients:
## (Intercept) Años_Experiencia
## 1227935 467658
ingreso=1227935 +(467658*Años_Experiencia)
summary(modelo1)
##
## Call:
## lm(formula = Ingreso_Mensual ~ Años_Experiencia, data = base3_ingreso)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11271297 -1750781 -87495 1398604 11539481
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1227935 137299 8.944 <2e-16 ***
## Años_Experiencia 467658 10021 46.669 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2988000 on 1468 degrees of freedom
## Multiple R-squared: 0.5974, Adjusted R-squared: 0.5971
## F-statistic: 2178 on 1 and 1468 DF, p-value: < 2.2e-16
En el modelo 1 de regresion lineal simple se propone como variable exploratoria los ingresos mensuales y van en función de los años de experiencia laboral. Los años de experiencia son significativos para estimar el ingreso mensual de una persona en la empresa colombiana estudiada. Además, el intercepto hace inferencia a que si un trabajador ingresa a la empresa con 0 años de experiencia, entraría ganando el equivalente a 1.227.935 pesos colombianos, cercano al salario mínimo vigente legal (SMVL). También dice que por cada año de experiencia laboral que aumente un trabajador, ganará en promedio 467.658 pesos más en sus ingresos mensuales. Su bondad de ajuste es de 0,5971, es decir que la variable explicativa ayuda a estimar al rededor del 60% los salarios mensuales de los trabajadores en la empresa y que hay aproximadamente un 40% que falta por incluir para que se estime de manera más precisa.
modelo2<- lm(Ingreso_Mensual~Edad, data=base3_ingreso)
modelo2
##
## Call:
## lm(formula = Ingreso_Mensual ~ Edad, data = base3_ingreso)
##
## Coefficients:
## (Intercept) Edad
## -2970671 256572
ingreso=-2970671 +(256572*Edad)
summary(modelo2)
##
## Call:
## lm(formula = Ingreso_Mensual ~ Edad, data = base3_ingreso)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9990056 -2592657 -677908 1810522 12540805
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2970671 443702 -6.695 3.06e-11 ***
## Edad 256572 11665 21.995 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4084000 on 1468 degrees of freedom
## Multiple R-squared: 0.2479, Adjusted R-squared: 0.2473
## F-statistic: 483.8 on 1 and 1468 DF, p-value: < 2.2e-16
En el modelo 2 se puede interpretar que la edad es una variable muy significativa para explicar los ingresos mensuales de los trabajadores con un nivel de confianza del 95%. En este caso, la bondad de ajuste es deel 0,2473, es decir que más del 75% está sin explicar a la variable por lo que se considera un R2 bajo. Además, los estimadores dicen que por cada año que aumente, los trabajadores de la empresa en promdio recibirán 256.572 pesos más en sus ingresos mensuales. El intercepto no tiene sentido en este caso.
modelo3<- lm(Ingreso_Mensual~Cargo, data=base3_ingreso)
modelo3
##
## Call:
## lm(formula = Ingreso_Mensual ~ Cargo, data = base3_ingreso)
##
## Coefficients:
## (Intercept) CargoDirector_Manofactura
## 16033550 -8738412
## CargoEjecutivo_Ventas CargoGerente
## -9109271 1148126
## CargoInvestigador_Cientifico CargoRecursos_Humanos
## -12793577 -11797800
## CargoRepresentante_Salud CargoRepresentante_Ventas
## -8504787 -13407550
## CargoTecnico_Laboratorio
## -12796380
ingreso=16033550 -8738412(CargoDirector_Manofactura)-9109271(CargoEjecutivo_Ventas) +1148126(CargoGerente)-12793577(CargoInvestigador_Cientifico)-11797800(CargoRecursos_Humanos)-8504787(CargoRepresentante_Salud)-13407550(CargoRepresentante_Ventas)-12796380(CargoTecnico_Laboratorio)
summary(modelo3)
##
## Call:
## lm(formula = Ingreso_Mensual ~ Cargo, data = base3_ingreso)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5937676 -1209252 -350986 1165379 6947721
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 16033550 226367 70.830 < 2e-16 ***
## CargoDirector_Manofactura -8738412 281982 -30.989 < 2e-16 ***
## CargoEjecutivo_Ventas -9109271 252620 -36.059 < 2e-16 ***
## CargoGerente 1148126 302378 3.797 0.000152 ***
## CargoInvestigador_Cientifico -12793577 255502 -50.072 < 2e-16 ***
## CargoRecursos_Humanos -11797800 360661 -32.712 < 2e-16 ***
## CargoRepresentante_Salud -8504787 287289 -29.604 < 2e-16 ***
## CargoRepresentante_Ventas -13407550 317226 -42.265 < 2e-16 ***
## CargoTecnico_Laboratorio -12796380 258979 -49.411 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2025000 on 1461 degrees of freedom
## Multiple R-squared: 0.8161, Adjusted R-squared: 0.8151
## F-statistic: 810.2 on 8 and 1461 DF, p-value: < 2.2e-16
El modelo 3 presenta una bondad de ajuste del 0.8151, es decir que aproximadamente el 81% de la variable cargo explica el ingreso mensual de un trabajador en la empresa. Es un R2 alto que contribuye a la estimación de los ingresos mensuales. los estimadores todos son significativos, y para su interpretación, al ser una variable categórica se toma como base el cargo “Director de investigación” y se comparan los estimadores con respecto a el. Por ejemplo, un ejecutivo en ventas en promedio gana al mes 9.109.271 de pesos menos que un director de investigación. Así, con los demás cargos, el director de investigación siempre gana en promedio más que ellos con excepción del gerente. El gerente de la empresa ingresa al mes en promedio 1.148.126 pesos más que el director de investigación.
El modelo escogido de los 3 para pronosticar es el modelo 1 (Ingresos - Años de exp)
predict(modelo1,list(Años_Experiencia=15),interval = "confidence",level = 0.95)
## fit lwr upr
## 1 8242811 8073330 8412293
El promedio esperado de ingresos para una eventual persona con 15 años de experiencia sería de 8.242.811 de pesos. El intervalo de confianza para la predicción de los ingresos nos indica que el promedio de ingresos estaría entre los 8.073.330 y 8.412.293 de pesos con un 95% de confianza.
##Paso 1 - Segmentar los Datos
id_modelar=sample(1:1470,size = 1029)
ingresos_modelar=base3_ingreso[id_modelar,]
ingresos_validar=base3_ingreso[-id_modelar,]
##Paso 2 - Estimar el Modelo Set de Modelar
modelo1_modelar=lm(Ingreso~Años_Experiencia,data=base3_ingreso)
##Paso 3 - Predeccir Set de Validación
ingresos_pred=predict(modelo1_modelar,list(Años_Experiencia=base3_ingreso$Años_Experiencia))
##Paso 4 - Comparar Ventas del Modelo y Reales
ingresos_real=base3_ingreso$Ingreso_Mensual
error=ingresos_real-ingresos_pred
res=data.frame(ingresos_real,ingresos_pred,error)
##Paso 5 - Calcular Indicador de Evaluación de la Predicción
MAE=mean(abs(error)) #Mean Absolut Error (Error Medio Absoluto)
MAE
## [1] 2216305
La validación cruzada en un primer paso, segmentamos los datos dejando 70% para el modelo y 30% aleteatorios para validar. Luego se ajusta el modelo con el 70%. Posteriormente predecimos los ingresos del 30% y finalmente se comparan los resultados del modelo contra los reales por medio de la metrica MAE. En este caso nos da alrededor de 2.216.305 de pesos como error de predicción (ingresos).
Ingreso ~ Años de Experiencia + Edad
modelo1rm<- lm(Ingreso~Años_Experiencia+Edad, data = base3_ingreso)
summary(modelo1rm)
##
## Call:
## lm(formula = Ingreso ~ Años_Experiencia + Edad, data = base3_ingreso)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11310803 -1690752 -91443 1428343 11461502
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1978076 352365 5.614 2.36e-08 ***
## Años_Experiencia 489126 13653 35.824 < 2e-16 ***
## Edad -26874 11629 -2.311 0.021 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2984000 on 1467 degrees of freedom
## Multiple R-squared: 0.5988, Adjusted R-squared: 0.5983
## F-statistic: 1095 on 2 and 1467 DF, p-value: < 2.2e-16
En el modelo 1 se elijen las dos variables cuantitativas anteriormente planteadas en la regresión simple, los años de experiencia y la edad evidenciaban ser variables significativas para la estimación de los ingresos medios y en conjunto pueden ser variables explicativas para un buen modelo multivariado. La bondad de ajuste en este modelo es del 0,5983 y la significancia de las variables son: años de experiencia significativa al 95% y edad significativa al 90%. Los estimadores se intepretan de la siguiente manera:
Cuando un trabajador aumenta un año de experiencia laboral y mantiene su edad constante, sus ingresos medios llegarán a ser en promedio 489.126 mayores. Caso contrario, cuando un trabajador aumenta un año de edad pero mantiene constante sus años de experiencia en promedio llegará a ganar -26.874 pesos al mes.
Ingreso~Años de Experiencia + Edad +Cargo
modelo2rm<- lm(Ingreso~Años_Experiencia+Edad+Cargo, data = base3_ingreso)
summary(modelo2rm)
##
## Call:
## lm(formula = Ingreso ~ Años_Experiencia + Edad + Cargo, data = base3_ingreso)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4856552 -1077316 -109896 972130 5441092
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 12046131 297816 40.448 <2e-16 ***
## Años_Experiencia 206078 9129 22.573 <2e-16 ***
## Edad -9606 6484 -1.481 0.1387
## CargoDirector_Manofactura -7018087 239767 -29.270 <2e-16 ***
## CargoEjecutivo_Ventas -7055224 220685 -31.970 <2e-16 ***
## CargoGerente 525740 248758 2.113 0.0347 *
## CargoInvestigador_Cientifico -10067346 232701 -43.263 <2e-16 ***
## CargoRecursos_Humanos -9153674 311590 -29.377 <2e-16 ***
## CargoRepresentante_Salud -7034226 241778 -29.094 <2e-16 ***
## CargoRepresentante_Ventas -10091845 287812 -35.064 <2e-16 ***
## CargoTecnico_Laboratorio -10059254 235431 -42.727 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1658000 on 1459 degrees of freedom
## Multiple R-squared: 0.8768, Adjusted R-squared: 0.8759
## F-statistic: 1038 on 10 and 1459 DF, p-value: < 2.2e-16
Se decide añadir una variable más en este caso, y es la variable categórica para aumentar la bondad de ajuste del modelo 1. En este caso el modelo 2 que incluye la variable “cargo” tiene una bondad de ajuste del 0.8759, aumentó con respecto al anterior modelo planteado. Además, las variables son significativas, con la exepción de la “edad” que pasó a ser no significativa ni al 90%.
Algunas de las interpretaciones de los estimadores son las siguientes, en primera instancia por cada año de experiencia que aumente un trabajador de su oficina y mantenga las demás variables constantes, en promedio ingresará mensualmente 206.078 pesos más. Por su parte, la edad al ser no significativa, se considera erróneo intepretar las estimaciones dentro de este modelo, sin embargo, por fines académicos se puede decir que un año de edad adicional significa que un trabajador mantenindo su cargo y sus años de experiencia constantes ingrese -9.606 pesos.
Un gerente que mantenga sus años de experiencia y su edad constantes en promedio ganará 525.740 pesos más que un director de investigación.
Ingreso ~ Años de Experiencia + Edad + Cargo + Genero + Antigüedad
modelo3rm<- lm(Ingreso~Años_Experiencia+Edad+Cargo+Genero+Antigüedad, data = base3_ingreso)
summary(modelo3rm)
##
## Call:
## lm(formula = Ingreso ~ Años_Experiencia + Edad + Cargo + Genero +
## Antigüedad, data = base3_ingreso)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5195433 -1090519 -93925 993261 5544990
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 11852804 305825 38.757 <2e-16 ***
## Años_Experiencia 195378 10668 18.315 <2e-16 ***
## Edad -6797 6616 -1.027 0.3044
## CargoDirector_Manofactura -7018999 239647 -29.289 <2e-16 ***
## CargoEjecutivo_Ventas -7083644 220811 -32.080 <2e-16 ***
## CargoGerente 495696 249041 1.990 0.0467 *
## CargoInvestigador_Cientifico -10083261 232417 -43.384 <2e-16 ***
## CargoRecursos_Humanos -9185996 311242 -29.514 <2e-16 ***
## CargoRepresentante_Salud -7057781 241585 -29.214 <2e-16 ***
## CargoRepresentante_Ventas -10077864 287360 -35.071 <2e-16 ***
## CargoTecnico_Laboratorio -10084097 235176 -42.879 <2e-16 ***
## GeneroM 167181 88635 1.886 0.0595 .
## Antigüedad 18330 9312 1.968 0.0492 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1655000 on 1457 degrees of freedom
## Multiple R-squared: 0.8774, Adjusted R-squared: 0.8764
## F-statistic: 868.9 on 12 and 1457 DF, p-value: < 2.2e-16
El modelo 3 incluye las variables Genero (M para masculino, F para femenino) y Antigüedad. Se decide incluirlas puesto que se tiene que en algunas industrias las mujeres llegan a ganar menos que los hombres y al tener la variable incluida en la base de datos, es pertinente hacer el análisis. La antiguedad en la empresa también es un factor a tener en cuenta, en general se esperaría que la fidelidad de mantenerse en la misma empresa se premie con mayores ingresos.
En este modelo la bondad de ajuste se aumenta en comparación con los dos modelos anteriormente planteados. Esto es de esperar, entre más variables significativas se incluyan las estimaciones serán más precisas. El R2 es de 0,8764 lo que quiere decir que cerca al 87% de la estimación de los ingresos mensuales pueden explicarse por las variables incluidas en el modelo.
Además, de las 5 variables incluidas todas son singificativas al 90% con la exepción de la edad, lo que plantea una sospecha sobre si debe incluirse en el modelo o no.
Algunas de las estimaciones de los betas pueden interpretarse de la siguiente manera, un hombre en promedio ingresa 167.181 pesos más que una mujer con las mismas caracteristicas laborales y manteniendo todo constante.
Por cada año que aumente la antiguedad de un empleado en la empresa en promedio aumentará 18.330 pesos a sus ingresos mensuales si mantiene su cargo, su edad, sus años de experiencia, y si es mujer constantes. Aqui se identifica una problematica y es que años de experiencia, antiguedad y edad al aumentar uno, automaticamente aumentan las demas, por lo que algunas interpretaciones de los estimadores pueden estar sesgadas.
La cargo, se interptreta con base a Director de investigación.
modelo3aic<- step(modelo3rm, direction = "both")
## Start: AIC=42112.16
## Ingreso ~ Años_Experiencia + Edad + Cargo + Genero + Antigüedad
##
## Df Sum of Sq RSS AIC
## - Edad 1 2.8916e+12 3.9948e+15 42111
## <none> 3.9919e+15 42112
## - Genero 1 9.7475e+12 4.0017e+15 42114
## - Antigüedad 1 1.0615e+13 4.0026e+15 42114
## - Años_Experiencia 1 9.1901e+14 4.9110e+15 42415
## - Cargo 8 9.0408e+15 1.3033e+16 43835
##
## Step: AIC=42111.22
## Ingreso ~ Años_Experiencia + Cargo + Genero + Antigüedad
##
## Df Sum of Sq RSS AIC
## <none> 3.9948e+15 42111
## + Edad 1 2.8916e+12 3.9919e+15 42112
## - Genero 1 9.8475e+12 4.0047e+15 42113
## - Antigüedad 1 1.3619e+13 4.0085e+15 42114
## - Años_Experiencia 1 1.3332e+15 5.3280e+15 42533
## - Cargo 8 9.0698e+15 1.3065e+16 43837
summary(modelo3aic)
##
## Call:
## lm(formula = Ingreso ~ Años_Experiencia + Cargo + Genero + Antigüedad,
## data = base3_ingreso)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5206138 -1093729 -82388 992650 5487063
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 11671516 249780 46.727 <2e-16 ***
## Años_Experiencia 188839 8561 22.058 <2e-16 ***
## CargoDirector_Manofactura -7029877 239418 -29.362 <2e-16 ***
## CargoEjecutivo_Ventas -7095851 220496 -32.181 <2e-16 ***
## CargoGerente 490615 248996 1.970 0.0490 *
## CargoInvestigador_Cientifico -10094863 232147 -43.485 <2e-16 ***
## CargoRecursos_Humanos -9203690 310771 -29.616 <2e-16 ***
## CargoRepresentante_Salud -7072179 241183 -29.323 <2e-16 ***
## CargoRepresentante_Ventas -10078605 287364 -35.073 <2e-16 ***
## CargoTecnico_Laboratorio -10095004 234940 -42.968 <2e-16 ***
## GeneroM 168030 88633 1.896 0.0582 .
## Antigüedad 20312 9111 2.229 0.0259 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1655000 on 1458 degrees of freedom
## Multiple R-squared: 0.8773, Adjusted R-squared: 0.8764
## F-statistic: 947.8 on 11 and 1458 DF, p-value: < 2.2e-16
El mejor modelo por medio del criterio de selección de predictores Akaike con menor AIC fue el modelo Ingreso ~ Años_Experiencia + Cargo + Genero + Antigüedad
Su bondad de ajuste es de 0,8764 y se considera alta, es decir que las variables saben explicar bien la estimación de los ingresos mensuales dentro de la empresa. Todas las variables son significativas al 90%. Algunas de las interpretaciones son las siguientes.
Un empleado mujer de la empresa que aumente un año de experiencia y mantenga las otras variables constantes aumentará sus ingresos en promedio en 188.839 pesos.
Un gerente de la empresa mujer que mantenga las demás variables constantes en promedio ganará 490.615 pesos más que un director de investigación.
Un hombre que mantenga las demás variables constantes en promedio ganará 168.030 pesos más que una mujer.
##Paso 1 - Segmentar los Datos
id_modelar=sample(1:1470,size = 1029)
ingresos_modelar=base3_ingreso[id_modelar,]
ingresos_validar=base3_ingreso[-id_modelar,]
##Paso 2 - Estimar el Modelo Set de Modelar
modelo1_modelar=lm(Ingreso ~ Años_Experiencia + Cargo + Genero + Antigüedad,data=base3_ingreso)
##Paso 3 - Predeccir Set de Validación
ingresos_pred=predict(modelo1_modelar,list(Años_Experiencia=base3_ingreso$Años_Experiencia, Cargo=base3_ingreso$Cargo, Genero=base3_ingreso$Genero, Antigüedad=base3_ingreso$Antigüedad))
##Paso 4 - Comparar Ventas del Modelo y Reales
ingresos_real=base3_ingreso$Ingreso_Mensual
error=ingresos_real-ingresos_pred
res=data.frame(ingresos_real,ingresos_pred,error)
##Paso 5 - Calcular Indicador de Evaluación de la Predicción
MAE=mean(abs(error)) #Mean Absolut Error (Error Medio Absoluto)
MAE
## [1] 1295652
La validación cruzada en un primer paso, segmentamos los datos dejando 70% para el modelo y 30% aleteatorios para validar. Luego se ajusta el modelo con el 70%. Posteriormente predecimos los ingresos del 30% y finalmente se comparan los resultados del modelo contra los reales por medio de la metrica MAE. En este caso nos da 1.295.652 de pesos como error de predicción en los ingresos.
predict(modelo1rm,list(Años_Experiencia=15, Edad = 48),interval = "confidence",level = 0.95)
## fit lwr upr
## 1 8025019 7774391 8275648
En un caso hipotético donde los años de experiencia sean 15 y la edad sea de 48 se espera que genere un ingreso medio de 8.025.019 pesos con un nivel de confianza del 95%
shapiro.test(modelo3aic$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo3aic$residuals
## W = 0.99416, p-value = 1.577e-05
residuos <- residuals(modelo3aic)
# Crear un gráfico Q-Q para los residuos
qqnorm(residuos)
qqline(residuos, col = "red", lwd = 2)
Se cumple el supuesto de normalidad, significa que los errores del
modelo se distribuyen normalmente. Por lo cual, las interpretaciones en
los estimadores se pueden hacer con confianza. Además de que el modelo
estaría bien especificado.
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(ggplot2)
bptest(modelo3aic)
##
## studentized Breusch-Pagan test
##
## data: modelo3aic
## BP = 279.57, df = 11, p-value < 2.2e-16
# Extraer los valores ajustados
valores_ajustados <- fitted(modelo3aic)
# Extraer los residuos estandarizados
residuos_estandarizados <- rstandard(modelo3aic)
# Crear un dataframe con los valores ajustados y los residuos estandarizados
residuos_df <- data.frame(valores_ajustados = valores_ajustados,
residuos_estandarizados = residuos_estandarizados)
# Crear el gráfico de dispersión usando ggplot2
ggplot(residuos_df, aes(x = valores_ajustados, y = residuos_estandarizados)) +
geom_point() +
geom_hline(yintercept = 0, color = "red", linetype = "dashed") +
theme_minimal() +
labs(title = "Gráfico de Homocedasticidad",
x = "Valores Ajustados",
y = "Residuos Estandarizados")
Hipótesis nula (H0): No hay heterocedasticidad (la varianza de los
errores es constante). Hipótesis alternativa (H1): Existe
heterocedasticidad (la varianza de los errores no es constante).
En este caso, se concluye que hay heterocedasticidad en los residuos de tu modelo. Por lo cual, los estimadores pueden ser ineficientes y poco confiables.
base3_ingreso$Log_Ingreso <- log(base3_ingreso$Ingreso_Mensual)
modelo_log <- lm(Log_Ingreso ~ Años_Experiencia + Cargo + Genero + Antigüedad, data = base3_ingreso)
valores_ajustados_log <- fitted(modelo_log)
residuos_estandarizados_log <- rstandard(modelo_log)
residuos_df_log <- data.frame(valores_ajustados_log = valores_ajustados_log,
residuos_estandarizados_log = residuos_estandarizados_log)
ggplot(residuos_df_log, aes(x = valores_ajustados_log, y = residuos_estandarizados_log)) +
geom_point() +
geom_hline(yintercept = 0, color = "red", linetype = "dashed") +
theme_minimal() +
labs(title = "Gráfico de Homocedasticidad después de la Transformación Logarítmica",
x = "Valores Ajustados (Log)",
y = "Residuos Estandarizados")
Se comprueba por medio de la prueba Breush-Pagan
bptest(modelo_log)
##
## studentized Breusch-Pagan test
##
## data: modelo_log
## BP = 125.78, df = 11, p-value < 2.2e-16
Sigue sin cumplir con el supuesto de varianza constante
base3_ingreso$Log_Ingreso <- log(base3_ingreso$Ingreso_Mensual)
base3_ingreso$Log_Años_Experiencia <- log(base3_ingreso$Años_Experiencia)
base3_ingreso$Log_Antiguedad <- log(base3_ingreso$Antigüedad)
Al hacer transformaciones logarítmicas a las variables independientes algunos valores tienden a - infinito por lo cual hace imposible la estimación de un modelo de regresión lineal multivariado, por ello se busca otra solución al problema de heterocedasticidad.
library(sandwich)
# Ajustar el modelo de regresión lineal
modelo <- lm(Ingreso ~ Años_Experiencia + Cargo + Genero + Antigüedad, data = base3_ingreso)
# Calcular errores estándar robustos
errores_robustos <- vcovHC(modelo, type = "HC1")
# Resumir el modelo con errores estándar robustos
summary(modelo, robust = TRUE)
##
## Call:
## lm(formula = Ingreso ~ Años_Experiencia + Cargo + Genero + Antigüedad,
## data = base3_ingreso)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5206138 -1093729 -82388 992650 5487063
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 11671516 249780 46.727 <2e-16 ***
## Años_Experiencia 188839 8561 22.058 <2e-16 ***
## CargoDirector_Manofactura -7029877 239418 -29.362 <2e-16 ***
## CargoEjecutivo_Ventas -7095851 220496 -32.181 <2e-16 ***
## CargoGerente 490615 248996 1.970 0.0490 *
## CargoInvestigador_Cientifico -10094863 232147 -43.485 <2e-16 ***
## CargoRecursos_Humanos -9203690 310771 -29.616 <2e-16 ***
## CargoRepresentante_Salud -7072179 241183 -29.323 <2e-16 ***
## CargoRepresentante_Ventas -10078605 287364 -35.073 <2e-16 ***
## CargoTecnico_Laboratorio -10095004 234940 -42.968 <2e-16 ***
## GeneroM 168030 88633 1.896 0.0582 .
## Antigüedad 20312 9111 2.229 0.0259 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1655000 on 1458 degrees of freedom
## Multiple R-squared: 0.8773, Adjusted R-squared: 0.8764
## F-statistic: 947.8 on 11 and 1458 DF, p-value: < 2.2e-16
coeftest(modelo, vcov = errores_robustos)
##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 11671516 320682 36.3959 < 2e-16 ***
## Años_Experiencia 188839 10781 17.5154 < 2e-16 ***
## CargoDirector_Manofactura -7029877 318104 -22.0993 < 2e-16 ***
## CargoEjecutivo_Ventas -7095851 293180 -24.2030 < 2e-16 ***
## CargoGerente 490615 314471 1.5601 0.11895
## CargoInvestigador_Cientifico -10094863 289175 -34.9092 < 2e-16 ***
## CargoRecursos_Humanos -9203690 397982 -23.1259 < 2e-16 ***
## CargoRepresentante_Salud -7072179 311255 -22.7215 < 2e-16 ***
## CargoRepresentante_Ventas -10078605 316823 -31.8115 < 2e-16 ***
## CargoTecnico_Laboratorio -10095004 292098 -34.5603 < 2e-16 ***
## GeneroM 168030 89605 1.8752 0.06096 .
## Antigüedad 20312 11493 1.7674 0.07738 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
La interpretación de este modelo es igual a la previamente mencionada ya que el ajustar el modelo con errores robustos no cambian los coeficientes estimados.
modelo_log <- lm(Log_Ingreso ~ Años_Experiencia + Cargo + Genero + Antigüedad, data = base3_ingreso)
modelo <- lm(Ingreso ~ Años_Experiencia + Cargo + Genero + Antigüedad, data = base3_ingreso)
summary(modelo_log)
##
## Call:
## lm(formula = Log_Ingreso ~ Años_Experiencia + Cargo + Genero +
## Antigüedad, data = base3_ingreso)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.91136 -0.19016 -0.00042 0.19026 0.95805
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 15.947645 0.042399 376.135 <2e-16 ***
## Años_Experiencia 0.026863 0.001453 18.486 <2e-16 ***
## CargoDirector_Manofactura -0.587824 0.040640 -14.464 <2e-16 ***
## CargoEjecutivo_Ventas -0.585701 0.037428 -15.649 <2e-16 ***
## CargoGerente -0.023663 0.042266 -0.560 0.5757
## CargoInvestigador_Cientifico -1.252444 0.039406 -31.783 <2e-16 ***
## CargoRecursos_Humanos -1.075067 0.052752 -20.380 <2e-16 ***
## CargoRepresentante_Salud -0.587282 0.040939 -14.345 <2e-16 ***
## CargoRepresentante_Ventas -1.358701 0.048778 -27.855 <2e-16 ***
## CargoTecnico_Laboratorio -1.249595 0.039880 -31.334 <2e-16 ***
## GeneroM 0.009571 0.015045 0.636 0.5248
## Antigüedad 0.004199 0.001546 2.715 0.0067 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.281 on 1458 degrees of freedom
## Multiple R-squared: 0.8225, Adjusted R-squared: 0.8212
## F-statistic: 614.3 on 11 and 1458 DF, p-value: < 2.2e-16
summary(modelo)
##
## Call:
## lm(formula = Ingreso ~ Años_Experiencia + Cargo + Genero + Antigüedad,
## data = base3_ingreso)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5206138 -1093729 -82388 992650 5487063
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 11671516 249780 46.727 <2e-16 ***
## Años_Experiencia 188839 8561 22.058 <2e-16 ***
## CargoDirector_Manofactura -7029877 239418 -29.362 <2e-16 ***
## CargoEjecutivo_Ventas -7095851 220496 -32.181 <2e-16 ***
## CargoGerente 490615 248996 1.970 0.0490 *
## CargoInvestigador_Cientifico -10094863 232147 -43.485 <2e-16 ***
## CargoRecursos_Humanos -9203690 310771 -29.616 <2e-16 ***
## CargoRepresentante_Salud -7072179 241183 -29.323 <2e-16 ***
## CargoRepresentante_Ventas -10078605 287364 -35.073 <2e-16 ***
## CargoTecnico_Laboratorio -10095004 234940 -42.968 <2e-16 ***
## GeneroM 168030 88633 1.896 0.0582 .
## Antigüedad 20312 9111 2.229 0.0259 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1655000 on 1458 degrees of freedom
## Multiple R-squared: 0.8773, Adjusted R-squared: 0.8764
## F-statistic: 947.8 on 11 and 1458 DF, p-value: < 2.2e-16
El modelo LOG-LIN tiene un R2 de 0.8212 mientras que el modelo LIN-LIN tiene un R2 de 0,8764. Se procede a calcular el poder predictivo de ambos y se comparan.
# Paso 1 - Segmentar los Datos
set.seed(123) # Para reproducibilidad
id_modelar <- sample(1:nrow(base3_ingreso), size = 1029)
ingresos_modelar <- base3_ingreso[id_modelar, ]
ingresos_validar <- base3_ingreso[-id_modelar, ]
# Paso 2 - Estimar el Modelo con el Set de Modelar
modelo1_modelar <- lm(Log_Ingreso ~ Años_Experiencia + Cargo + Genero + Antigüedad, data = ingresos_modelar)
# Paso 3 - Predecir con el Set de Validación
ingresos_pred <- predict(modelo1_modelar, newdata = ingresos_validar)
exponencial_ingresospred <- exp(ingresos_pred)
# Paso 4 - Comparar Ingresos del Modelo y Reales
ingresos_real <- ingresos_validar$Log_Ingreso
exponencial_ingresos <- exp(ingresos_real)
error <- exponencial_ingresos - exponencial_ingresospred
# Crear el data frame `res` para visualizar los resultados
res <- data.frame(
ingresos_real = ingresos_real,
ingresos_pred = ingresos_pred,
exponencial_ingresos = exponencial_ingresos,
exponencial_ingresospred = exponencial_ingresospred,
error = error
)
# Paso 5 - Calcular Indicador de Evaluación de la Predicción
MAE <- mean(abs(error)) # Mean Absolute Error (Error Medio Absoluto)
print(MAE)
## [1] 1282557
##Paso 1 - Segmentar los Datos
id_modelar=sample(1:1470,size = 1029)
ingresos_modelar=base3_ingreso[id_modelar,]
ingresos_validar=base3_ingreso[-id_modelar,]
##Paso 2 - Estimar el Modelo Set de Modelar
modelo1_modelar=lm(Ingreso ~ Años_Experiencia + Cargo + Genero + Antigüedad,data=base3_ingreso)
##Paso 3 - Predeccir Set de Validación
ingresos_pred=predict(modelo1_modelar,list(Años_Experiencia=base3_ingreso$Años_Experiencia, Cargo=base3_ingreso$Cargo, Genero=base3_ingreso$Genero, Antigüedad=base3_ingreso$Antigüedad))
##Paso 4 - Comparar Ventas del Modelo y Reales
ingresos_real=base3_ingreso$Ingreso_Mensual
error=ingresos_real-ingresos_pred
res=data.frame(ingresos_real,ingresos_pred,error)
##Paso 5 - Calcular Indicador de Evaluación de la Predicción
MAE=mean(abs(error)) #Mean Absolut Error (Error Medio Absoluto)
MAE
## [1] 1295652
Como conslusión se tiene que el modelo con mejor poder predictivo es el modelo con transformación logarítmica. Es decir el modelo LOG-LIN. ya que tiene un menor error, MAElog (1.282.557) < MAElin (1.295.652)
Modeloemp <- lm(Ingreso~Años_Experiencia + Capacitaciones + Trabajos_Anteriores + Equilibrio_Trabajo_Vida , data=base3_ingreso)
summary(Modeloemp)
##
## Call:
## lm(formula = Ingreso ~ Años_Experiencia + Capacitaciones + Trabajos_Anteriores +
## Equilibrio_Trabajo_Vida, data = base3_ingreso)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11169069 -1716353 -52085 1399296 11393659
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 777744 378803 2.053 0.0402 *
## Años_Experiencia 472844 10302 45.899 <2e-16 ***
## Capacitaciones 10743 60546 0.177 0.8592
## Trabajos_Anteriores -67376 32139 -2.096 0.0362 *
## Equilibrio_Trabajo_Vida 196681 110232 1.784 0.0746 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2984000 on 1465 degrees of freedom
## Multiple R-squared: 0.5995, Adjusted R-squared: 0.5984
## F-statistic: 548.2 on 4 and 1465 DF, p-value: < 2.2e-16
Se plantea este modelo con fines de presentar la importancia y utilidad de los modelos de regresion lineal que permiten identificar variables significativas las cuales provocan resultados favorables o no favorables en el ámbito empresarial. Con el fin de identificar de que dependen los ingresos mensuales de los trabajadores dentro de una empresa, se plantea cuáles variables son importantes. Por ejemplo, el equilibrio entre trabajo y vida cuantificado entre 1-5 siendo 1 el más bajo y 5 el más alto es significativo para un ingreso medio mayor. Es decir, por cada nivel que aumente entre el equilibrio de trabajo-vida los ingresos medios en promedio aumentarán en 196.681 pesos, con esto la importancia de orientar a los trabajadores a tener una mejor relación extra laboral e invitarlos a ganar más en sus vidas personales ya que al final se retribuirá en mayores ingresos medios.