## Cargando paquete requerido: carData
## Cargando paquete requerido: fit.models
## Cargando paquete requerido: zoo
##
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
##
## Adjuntando el paquete: 'dplyr'
## The following object is masked from 'package:car':
##
## recode
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
##
## Please cite as:
## Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
## R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
## corrplot 0.95 loaded
Taller 2 sobre Multicolinealidad, Validación Cruzada y Selección de Modelos.
Este conjunto de datos Salary Prediction dataset contiene información sobre los salarios de empleados en una empresa. Cada fila representa un empleado diferente, y las columnas incluyen información como edad, género, nivel educativo, título del trabajo, años de experiencia y salario.
Edad: Esta columna representa la edad de cada empleado en años. Los valores en esta columna son numéricos.
Género: Esta columna contiene el género de cada empleado, que puede ser masculino o femenino. Los valores en esta columna son categóricos.
Nivel Educativo: Esta columna contiene el nivel educativo de cada empleado, que puede ser secundaria, licenciatura, maestría o doctorado. Los valores en esta columna son categóricos.
Título del Trabajo: Esta columna contiene el título del trabajo de cada empleado. Los títulos de trabajo pueden variar según la empresa e incluir posiciones como gerente, analista, ingeniero o administrador. Los valores en esta columna son categóricos.
Años de Experiencia: Esta columna representa el número de años de experiencia laboral de cada empleado. Los valores en esta columna son numéricos.
Salario: Esta columna representa el salario anual de cada empleado en dólares estadounidenses. Los valores en esta columna son numéricos y pueden variar según factores como el título del trabajo, los años de experiencia y el nivel educativo.
Este conjunto de datos fue creado exclusivamente con fines educativos y cualquier uso comercial está estrictamente prohibido. Este conjunto de datos fue generado por modelos de lenguaje a gran escala y no fue recopilado de fuentes de datos reales.
## Age Gender Education.Level Job.Title Years.of.Experience Salary
## 1 32 Male Bachelor's Software Engineer 5 90000
## 2 28 Female Master's Data Analyst 3 65000
## 3 45 Male PhD Senior Manager 15 150000
## 4 36 Female Bachelor's Sales Associate 7 60000
## 5 52 Male Master's Director 20 200000
## 6 29 Male Bachelor's Marketing Analyst 2 55000
Se revisa la variable \(Job.Title\) para ver el contenido y número de observaciones por categoría
## Número de categorías únicas en Job.Title: 175
## Job.Title Conteo
## 2 Account Manager 1
## 3 Accountant 1
## 6 Business Development Manager 1
## 7 Business Intelligence Analyst 1
## 8 CEO 1
## 9 Chief Data Officer 1
## 10 Chief Technology Officer 1
## 11 Content Marketing Manager 1
## 12 Copywriter 1
## 13 Creative Director 1
## 15 Customer Service Rep 1
## 16 Customer Service Representative 1
## 17 Customer Success Manager 1
## 18 Customer Success Rep 1
## 20 Data Entry Clerk 1
## 21 Data Scientist 1
## 22 Digital Content Producer 1
## 23 Digital Marketing Manager 1
## 24 Director 1
## 25 Director of Business Development 1
## 28 Director of HR 1
## 29 Director of Human Capital 1
## 33 Director of Product Management 1
## 34 Director of Sales 1
## 35 Director of Sales and Marketing 1
## 37 Financial Advisor 1
## 38 Financial Analyst 1
## 39 Financial Manager 1
## 40 Graphic Designer 1
## 41 Help Desk Analyst 1
## 44 Human Resources Director 1
## 45 IT Manager 1
## 46 IT Support 1
## 47 IT Support Specialist 1
## 50 Junior Advertising Coordinator 1
## 54 Junior Copywriter 1
## 55 Junior Customer Support Specialist 1
## 56 Junior Data Analyst 1
## 57 Junior Data Scientist 1
## 58 Junior Designer 1
## 59 Junior Developer 1
## 60 Junior Financial Advisor 1
## 69 Junior Operations Coordinator 1
## 73 Junior Recruiter 1
## 74 Junior Research Scientist 1
## 76 Junior Social Media Manager 1
## 77 Junior Social Media Specialist 1
## 79 Junior Software Engineer 1
## 80 Junior UX Designer 1
## 81 Junior Web Designer 1
## 82 Junior Web Developer 1
## 85 Marketing Manager 1
## 86 Marketing Specialist 1
## 87 Network Engineer 1
## 88 Office Manager 1
## 89 Operations Analyst 1
## 90 Operations Director 1
## 92 Principal Engineer 1
## 93 Principal Scientist 1
## 94 Product Designer 1
## 96 Product Marketing Manager 1
## 97 Project Engineer 1
## 99 Public Relations Manager 1
## 101 Research Director 1
## 102 Research Scientist 1
## 104 Sales Director 1
## 105 Sales Executive 1
## 107 Sales Operations Manager 1
## 108 Sales Representative 1
## 109 Senior Account Executive 1
## 110 Senior Account Manager 1
## 114 Senior Consultant 1
## 122 Senior Graphic Designer 1
## 123 Senior HR Generalist 1
## 125 Senior HR Specialist 1
## 126 Senior Human Resources Coordinator 1
## 128 Senior Human Resources Specialist 1
## 130 Senior IT Project Manager 1
## 131 Senior IT Support Specialist 1
## 135 Senior Marketing Director 1
## 142 Senior Product Development Manager 1
## 144 Senior Product Marketing Manager 1
## 147 Senior Quality Assurance Analyst 1
## 148 Senior Research Scientist 1
## 149 Senior Researcher 1
## 153 Senior Software Architect 1
## 156 Senior Training Specialist 1
## 158 Social Media Manager 1
## 159 Social Media Specialist 1
## 160 Software Developer 1
## 161 Software Engineer 1
## 162 Software Manager 1
## 163 Software Project Manager 1
## 164 Strategy Consultant 1
## 165 Supply Chain Analyst 1
## 166 Supply Chain Manager 1
## 167 Technical Recruiter 1
## 168 Technical Support Specialist 1
## 169 Technical Writer 1
## 170 Training Specialist 1
## 171 UX Designer 1
## 172 UX Researcher 1
## 173 VP of Finance 1
## 174 VP of Operations 1
## 175 Web Developer 1
## 1 2
## 4 Administrative Assistant 2
## 5 Business Analyst 2
## 14 Customer Service Manager 2
## 19 Data Analyst 2
## 26 Director of Engineering 2
## 27 Director of Finance 2
## 30 Director of Human Resources 2
## 36 Event Coordinator 2
## 42 HR Generalist 2
## 43 HR Manager 2
## 48 Junior Account Manager 2
## 53 Junior Business Operations Analyst 2
## 62 Junior HR Coordinator 2
## 63 Junior HR Generalist 2
## 78 Junior Software Developer 2
## 83 Marketing Analyst 2
## 91 Operations Manager 2
## 95 Product Manager 2
## 98 Project Manager 2
## 100 Recruiter 2
## 103 Sales Associate 2
## 111 Senior Accountant 2
## 118 Senior Engineer 2
## 127 Senior Human Resources Manager 2
## 129 Senior IT Consultant 2
## 132 Senior Manager 2
## 138 Senior Operations Analyst 2
## 150 Senior Sales Manager 2
## 151 Senior Sales Representative 2
## 49 Junior Accountant 3
## 64 Junior Marketing Analyst 3
## 66 Junior Marketing Manager 3
## 70 Junior Operations Manager 3
## 84 Marketing Coordinator 3
## 106 Sales Manager 3
## 115 Senior Data Analyst 3
## 119 Senior Financial Advisor 3
## 124 Senior HR Manager 3
## 134 Senior Marketing Coordinator 3
## 152 Senior Scientist 3
## 154 Senior Software Developer 3
## 157 Senior UX Designer 3
## 71 Junior Product Manager 4
## 75 Junior Sales Representative 4
## 113 Senior Business Development Manager 4
## 116 Senior Data Engineer 4
## 137 Senior Marketing Specialist 4
## 139 Senior Operations Coordinator 4
## 67 Junior Marketing Specialist 5
## 68 Junior Operations Analyst 5
## 72 Junior Project Manager 5
## 121 Senior Financial Manager 5
## 140 Senior Operations Manager 5
## 141 Senior Product Designer 5
## 145 Senior Project Coordinator 5
## 65 Junior Marketing Coordinator 6
## 143 Senior Product Manager 6
## 155 Senior Software Engineer 6
## 52 Junior Business Development Associate 7
## 61 Junior Financial Analyst 7
## 117 Senior Data Scientist 7
## 120 Senior Financial Analyst 7
## 146 Senior Project Manager 7
## 51 Junior Business Analyst 8
## 133 Senior Marketing Analyst 9
## 136 Senior Marketing Manager 9
## 112 Senior Business Analyst 10
## 32 Director of Operations 11
## 31 Director of Marketing 12
## n frecuencia
## 1 1 105
## 2 2 30
## 3 3 13
## 4 4 6
## 5 5 7
## 6 6 3
## 7 7 5
## 8 8 1
## 9 9 2
## 10 10 1
## 11 11 1
## 12 12 1
Dado que la variable profesión (título de trabajo) contiene muchos niveles siendo que cada nivel está desbalanceado, es decir, hay 105 niveles que aparecen sólo una vez, 30 que aparece sólo 2 veces, 13 que aparecen sólo 3 veces y así sucesivamente como se muestra en la tabla anterior. Ésto es un problema ya que el modelo no va a predecir bien dichas valores puesto que cuando se divide el dataset sea en 70-30 o en K-pliegues muchos de los valores no van a estar en ambas particiones del dataset produciendo errores futuros y resultados erróneos.
## Age Gender Education.Level Years.of.Experience Salary
## 370 33 Male Bachelor's 4 60
## 371 35 Female Bachelor's 8 85
## 372 43 Male Master's 19 170
## 373 29 Female Bachelor's 2 40
## 374 34 Male Bachelor's 7 90
## 375 44 Female PhD 15 150
## 'data.frame': 375 obs. of 5 variables:
## $ Age : int 32 28 45 36 52 29 42 31 26 38 ...
## $ Gender : chr "Male" "Female" "Male" "Female" ...
## $ Education.Level : chr "Bachelor's" "Master's" "PhD" "Bachelor's" ...
## $ Years.of.Experience: num 5 3 15 7 20 2 12 4 1 10 ...
## $ Salary : num 90 65 150 60 200 55 120 80 45 110 ...
Se procede a revisar si hay datos faltantes en los datos y a correr el primer modelo
## [1] 375 5
## [1] 373 5
Por lo anterior se concluye que no hay datos faltantes en el set de datos.
## Age Gender Education.Level Years.of.Experience Salary
## 1 32 Male Bachelor's 5 90
## 2 28 Female Master's 3 65
## 3 45 Male PhD 15 150
## 4 36 Female Bachelor's 7 60
## 5 52 Male Master's 20 200
## 6 29 Male Bachelor's 2 55
## Age GenderMale Education.LevelMaster.s Education.LevelPhD Years.of.Experience
## 1 32 1 0 0 5
## 2 28 0 1 0 3
## 3 45 1 0 1 15
## 4 36 0 0 0 7
## 5 52 1 1 0 20
## 6 29 1 0 0 2
## Salary
## 1 90
## 2 65
## 3 150
## 4 60
## 5 200
## 6 55
##
## Call:
## lm(formula = Salary ~ ., data = salario_matrix)
##
## Residuals:
## Min 1Q Median 3Q Max
## -47.335 -7.050 -0.481 8.495 74.302
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -48.7200 15.0630 -3.234 0.00133 **
## Age 2.8803 0.5542 5.197 0.000000336 ***
## GenderMale 8.5661 1.5829 5.412 0.000000113 ***
## Education.LevelMaster.s 18.4049 2.0881 8.814 < 0.0000000000000002 ***
## Education.LevelPhD 24.6354 2.7977 8.806 < 0.0000000000000002 ***
## Years.of.Experience 2.8735 0.6139 4.681 0.000004032 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 15.13 on 367 degrees of freedom
## Multiple R-squared: 0.903, Adjusted R-squared: 0.9017
## F-statistic: 683.1 on 5 and 367 DF, p-value: < 0.00000000000000022
Con los resultados del modelo se concluye que hay un buen poder predictivo (\(R^2\) de 90.3%) es decir que éste modelo es capaz de explicar la variación o diferencia entre los salarios a través de las variables (y categorías) que contiene la base de datos. Por el coeficiente de variación tan alto podría inferirse problemas de multicolinealidad es decir que pueden haber variables que están autocorrelacionadas sin embargo se probará lo anterior a través del uso de la función \(vif()\).
Con respecto a algunos de los coeficientes obtenidos se empiezan a ver algunas diferencias, por ejemplo la variable educación y propiamente PhD devenga en promedio más que educación tipo Máster y los hombres ganan en promedio más que las mujeres manteniendo todo lo demás constante.
A continuación la ecuación del modelo estimado
## y = -48.72 + 2.88*Age + 8.57*GenderMale + 18.4*Education.LevelMaster.s + 24.64*Education.LevelPhD
## + 2.87*Years.of.Experience
A continuación se calcula el vif para anañlizar la multicolinealidad
## Age GenderMale Education.LevelMaster.s
## 24.944574 1.019220 1.376524
## Education.LevelPhD Years.of.Experience
## 1.505690 26.338080
Por los valores observados se concluye multicolinealidad, un problema presente en la mayoría de ejercicios. Acá una pregunta que se haría es si vale la pena o no eliminar variables para tratar el tema de la multicolinealidad sin embargo por la temática y datos disponibles no es posible ya que para calcular salario las variables planteadas son las que, primero, obedecen a trabajos literarios y, segundo, naturalmente el salario de las persona varía en términos de su edad, eduación y años de experiencia siendo que la profesión o título de trabajo ha sido removida.
## Start: AIC=2032.52
## Salary ~ Age + GenderMale + Education.LevelMaster.s + Education.LevelPhD +
## Years.of.Experience
##
## Df Sum of Sq RSS AIC
## <none> 83995 2032.5
## - Years.of.Experience 1 5014.0 89009 2052.1
## - Age 1 6182.6 90177 2057.0
## - GenderMale 1 6702.6 90697 2059.2
## - Education.LevelPhD 1 17746.0 101741 2102.0
## - Education.LevelMaster.s 1 17780.0 101775 2102.1
##
## Call:
## lm(formula = Salary ~ Age + GenderMale + Education.LevelMaster.s +
## Education.LevelPhD + Years.of.Experience, data = salario_matrix)
##
## Residuals:
## Min 1Q Median 3Q Max
## -47.335 -7.050 -0.481 8.495 74.302
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -48.7200 15.0630 -3.234 0.00133 **
## Age 2.8803 0.5542 5.197 0.000000336 ***
## GenderMale 8.5661 1.5829 5.412 0.000000113 ***
## Education.LevelMaster.s 18.4049 2.0881 8.814 < 0.0000000000000002 ***
## Education.LevelPhD 24.6354 2.7977 8.806 < 0.0000000000000002 ***
## Years.of.Experience 2.8735 0.6139 4.681 0.000004032 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 15.13 on 367 degrees of freedom
## Multiple R-squared: 0.903, Adjusted R-squared: 0.9017
## F-statistic: 683.1 on 5 and 367 DF, p-value: < 0.00000000000000022
Se evidencia que no hay cambio entre el modelo planteado inicialmente (modelo uno) y el modelo resultado de la selección de modelos aplicando el proceso de selección hacia adelante y hacia atrás y la combinanción de ambos procesos. Como se vio en clase la selección se basa en criterios como la información del AIC (Akaike) y así el modelo con menor AIC es el que finalmente se selecciona.
## Age GenderMale Education.LevelMaster.s
## 24.944574 1.019220 1.376524
## Education.LevelPhD Years.of.Experience
## 1.505690 26.338080
Se obtienen los mismos valores puesto que ambos modelos son iguales. Una vez más se evidencia problemas de multicolinealidad.
## Cargando paquete requerido: ggplot2
## Cargando paquete requerido: lattice
## Modelo Completo:
## MAPE: 13.22677
## MSE: 224.6691
El modelo presenta un rendimiento aceptable, aunque reducir los errores mejoraría su precisión. Este nivel de error indica que el modelo es confiable para la mayoría de las aplicaciones, pero podría no ser adecuado si se requiere alta precisión en cada estimación individual de salario. Los resultados sugieren que aún existe variabilidad en los salarios que no está completamente explicada por las variables empleadas en el modelo. En futuros análisis, sería útil explorar posibles interacciones entre variables, aplicar transformaciones o considerar modelos más complejos, lo que podría mejorar la capacidad del modelo para predecir salarios de manera más precisa y reducir el margen de error.
## MAPE: 13.02135
## MSE: 218.957
Al comparar los resultados obtenidos entre la validación del 70-30 y la validación cruzada con K-pliegues, se encuentran diferencias de 0.20 en el MAPE (Mean Absolute Percentage Error) y de 6.3 en el MSE (Mean Squared Error). En particular, el MAPE fue de 13.02 en la validación cruzada y de 13.22 en el enfoque de 70-30.
Esta ligera diferencia en el MAPE sugiere que el modelo presenta una capacidad de predicción similar en ambas configuraciones, pero con un leve ajuste más preciso en el contexto de K-pliegues. El hecho de que el MAPE sea más bajo en la validación cruzada podría indicar que, al utilizar todos los datos en múltiples iteraciones, el modelo logra una mejor generalización, lo cual es fundamental para su rendimiento en situaciones del mundo real.
## Cargando paquete requerido: Matrix
## Loaded glmnet 4.1-8
## Warning: from glmnet C++ code (error code -99733); Number of nonzero
## coefficients along the path exceeds pmax=5 at 89733th lambda value; solutions
## for larger lambdas returned
## Warning: from glmnet C++ code (error code -99682); Number of nonzero
## coefficients along the path exceeds pmax=5 at 89682th lambda value; solutions
## for larger lambdas returned
## Warning: from glmnet C++ code (error code -99735); Number of nonzero
## coefficients along the path exceeds pmax=5 at 89735th lambda value; solutions
## for larger lambdas returned
## Warning: from glmnet C++ code (error code -99801); Number of nonzero
## coefficients along the path exceeds pmax=5 at 89801th lambda value; solutions
## for larger lambdas returned
## Warning: from glmnet C++ code (error code -99728); Number of nonzero
## coefficients along the path exceeds pmax=5 at 89728th lambda value; solutions
## for larger lambdas returned
## Warning: from glmnet C++ code (error code -99720); Number of nonzero
## coefficients along the path exceeds pmax=5 at 89720th lambda value; solutions
## for larger lambdas returned
## Warning: from glmnet C++ code (error code -99715); Number of nonzero
## coefficients along the path exceeds pmax=5 at 89715th lambda value; solutions
## for larger lambdas returned
## Warning: from glmnet C++ code (error code -99766); Number of nonzero
## coefficients along the path exceeds pmax=5 at 89766th lambda value; solutions
## for larger lambdas returned
## Warning: from glmnet C++ code (error code -99735); Number of nonzero
## coefficients along the path exceeds pmax=5 at 89735th lambda value; solutions
## for larger lambdas returned
## Warning: from glmnet C++ code (error code -99704); Number of nonzero
## coefficients along the path exceeds pmax=5 at 89704th lambda value; solutions
## for larger lambdas returned
## Warning: from glmnet C++ code (error code -99739); Number of nonzero
## coefficients along the path exceeds pmax=5 at 89739th lambda value; solutions
## for larger lambdas returned
## Mejor lambda: 2.69
Como ya se sabe que el mejor lambda es 2.69 entonces no se procede a graficar todos los valores si no en un menor rango por el costo del procesamiento
## 6 x 1 sparse Matrix of class "dgCMatrix"
## s0
## (Intercept) -23.468274
## Age 2.193058
## GenderMale 2.506543
## Education.LevelMaster.s 9.818336
## Education.LevelPhD 13.873026
## Years.of.Experience 3.606453
Se observa pues que cuando los años de experiencia aumentan el salario aumenta en promedio 3,606 dólares, manteniendo todo lo demás constante.
Age (Edad): Un aumento de un año en la edad está asociado con un aumento de aproximadamente 2,193.06 dólares en el salario, manteniendo constantes todas las demás variables. Esto sugiere que, en general, la experiencia que se adquiere con la edad puede contribuir a un aumento en el salario.
GenderMale (Género Masculino): Ser hombre (en comparación con ser mujer) está asociado con un aumento de 2,506.54 dólares en el salario. Este coeficiente puede indicar una diferencia de salario basada en el género, lo que sugiere que, en promedio, los hombres ganan más que las mujeres en las mismas condiciones laborales.
Education.LevelMaster.s (Nivel de Educación - Maestría): Tener un título de maestría se asocia con un aumento de 9,818.34 dólares en el salario en comparación con aquellos con pregrado. Este coeficiente sugiere que los trabajadores con un grado de maestría tienden a recibir salarios significativamente más altos.
Education.LevelPhD (Nivel de Educación - Doctorado): Tener un doctorado se asocia con un aumento de 13,873.03 dólares en el salario en comparación con aquellos con posgrado. Este es el coeficiente más alto en el modelo, lo que indica que los individuos con un doctorado tienen los salarios más altos en comparación con los demás grupos educativos.
Years.of.Experience (Años de Experiencia): Cada año adicional de experiencia laboral se asocia con un aumento de 3,606.45 dólares en el salario. Esto sugiere que la experiencia tiene un impacto positivo y significativo en los ingresos.
## [1] 14.17089
## MAPE para el modelo final en el pliegue 2 : 9.661473
La métrica del MAPE (Mean Absolute Percentage Error) varía significativamente según el pliegue utilizado en la validación cruzada. Al observar los resultados obtenidos de los cinco pliegues, podemos notar lo siguiente:
Pliegue 1: Un MAPE de 25.27%, lo que indica un error relativamente alto en las predicciones. Esto sugiere que el modelo tuvo dificultades para ajustarse a los datos de este pliegue específico.
Pliegue 2: Un MAPE considerablemente más bajo de 9.66%, lo que indica que las predicciones fueron más precisas. Esto puede deberse a una mejor representación de las características del conjunto de datos en este pliegue.
Pliegue 3: Un MAPE de 3.06%, lo que indica una excelente precisión en las predicciones. Este resultado sugiere que el modelo se ajustó bien a los datos en este pliegue específico.
Pliegue 4: Un MAPE de 34.32%, que es el más alto de todos los pliegues. Este resultado sugiere que el modelo tuvo un rendimiento deficiente, posiblemente debido a una distribución atípica de los datos en este pliegue o la presencia de valores extremos.
Pliegue 5: Finalmente, un MAPE de 12.70%, que, aunque mejor que el pliegue 1 y el pliegue 4, aún indica un margen de error considerable. Esto podría sugerir una variabilidad en la calidad de los datos de prueba utilizados en este pliegue.
La variabilidad en los valores del MAPE entre los diferentes pliegues resalta la importancia de una selección cuidadosa de los datos de entrenamiento y prueba. Estos resultados sugieren que el modelo puede no generalizar bien en todos los subconjuntos de datos, y pueden existir características específicas en algunos pliegues que afectan negativamente el rendimiento del modelo