DATOS INGRESOS DE UNA EMPRESA

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

Regresión Lineal Simple

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`.

Exploración Bivariada - (Relaciones entre ingresos y años xp)

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")'

Correlación

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.

Exploración Bivariada - (Relaciones entre ingresos y edad)

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).

Exploración Bivariada - (Relaciones entre ingresos y antiguedad)

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).

Proponer tres modelos de regresión lineal simple

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

El modelo es el siguiente

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.

Modelo 2 Ingresos - Edad

modelo2<- lm(Ingreso_Mensual~Edad, data=base3_ingreso)
modelo2
## 
## Call:
## lm(formula = Ingreso_Mensual ~ Edad, data = base3_ingreso)
## 
## Coefficients:
## (Intercept)         Edad  
##    -2970671       256572

El modelo es el siguiente

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.

Modelo 3 Ingresos - Edad

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

El modelo es el siguiente

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.

Predicció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.

Validación cruzada

##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).

Regresión Lineal Múltiple

Modelo 1

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.

Modelo 2

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.

Modelo 3

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.

Selección de predictores

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.

Poder predictivo

##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.

Pronóstico

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%

Validación de supuestos

Normalidad

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.

Varianza constante (Homocedasticidad)

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.

Transformaciones

Variable dependiente

base3_ingreso$Log_Ingreso <- log(base3_ingreso$Ingreso_Mensual)
modelo_log <- lm(Log_Ingreso ~ Años_Experiencia + Cargo + Genero + Antigüedad, data = base3_ingreso)

Verificar la homocedasticidad con un gráfico de dispersión

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

Tranformación dependientes e independientes

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.

Ajustar modelo con errores robustos

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.

Comparación del poder predictivo de los modelos LOG-LIN y LIN-LIN

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.

MAE LOG-LIN

# 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

MAE LIN-LIN

##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)

Caso hipotético para sustentarle a una empresa

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.