Dirección de Educación Continua.
Ver la presentación acá
Primero, cargamos las librerías necesarias. Usaremos
tidyverse para la manipulación de datos y gráficos
(dplyr y ggplot2), y broom para
dar un formato limpio a los resultados de los modelos.
# Cargar librerías
library(tidyverse)
library(broom)
library(corrplot)
library(gridExtra)
# Suprimir advertencias para mantener la salida limpia
options(warn = -1)
# Establecer un tema de gráfico por defecto similar al de seaborn
theme_set(theme_minimal())
# Definir la URL base para los datos
url_base <- "https://raw.githubusercontent.com/lacamposm/Fundamentos_Analitica/main/data/"
Una comprensión básica de las estadísticas necesarias para la regresión lineal simple, luego introduciremos la regresión lineal comenzando con 2 parámetros. Se espera que se comprendan a fondo los componentes funcionales de un modelo de regresión lineal, como interpretar los coeficientes y comprender varias métricas para evaluar correctamente el rendimiento del modelo.
Contexto empresarial. Su empresa está pasando por una revisión interna de sus prácticas de contratación y compensación a los empleados. En los últimos años, su empresa ha tenido poco éxito en la conversión de candidatas de alta calidad que deseaba contratar. La gerencia plantea la hipótesis de que esto se debe a una posible discriminación salarial y quiere averiguar qué la está causando.
Problema empresarial. Como parte de la revisión interna, el departamento de recursos humanos se ha acercado a usted para investigar específicamente la siguiente pregunta: “En general, ¿se les paga más a los hombres que a las mujeres en su empresa? Si es así, ¿qué está impulsando esta brecha?”
Contexto analítico. El departamento de recursos
humanos le ha proporcionado información de empleados que contiene
información sobre varios atributos como desempeño, educación, ingresos,
antigüedad, etc. Usaremos técnicas de regresión lineal en este conjunto
de datos para resolver el problema comercial descrito anteriormente.
Veremos cómo la regresión lineal cuantifica la correlación entre la
variable objetivo (target) y las variables de entrada
(features) (por ejemplo, educación, ingresos, antigüedad,
etc.)
# Cargar el dataset
df <- read.csv(paste0(url_base, "dataset_company.csv"))
# Mostrar las primeras filas del dataframe
head(df)
# Ver la estructura del dataframe (similar a .info())
str(df)
## 'data.frame': 463 obs. of 7 variables:
## $ job_title : chr "Project Manager" "Marketing associate" "Marketing associate" "Sales representative" ...
## $ age_years : int 34 66 51 26 36 36 35 18 31 31 ...
## $ performance_score: num 33.3 16.7 50 16.7 50 ...
## $ education : chr "High School" "High School" "Masters" "Masters" ...
## $ seniority_years : int 4 3 8 3 4 6 7 0 4 3 ...
## $ pay_yearly : int 118503 129393 139440 118191 77717 53533 92030 79461 71262 113232 ...
## $ male_female : chr "M" "M" "M" "F" ...
Las variables son:
Asegurémonos de que las variables categóricas sean tratadas como factores en R.
# Convertir columnas de texto a factores
df <- df %>%
mutate(across(where(is.character), as.factor))
# Mostrar las variables que son factores (similar a select_dtypes("object"))
df %>%
select_if(is.factor) %>%
head()
# Mostrar los niveles únicos de cada variable factor
# El equivalente a df[column].unique() en Python
lapply(df[sapply(df, is.factor)], levels)
## $job_title
## [1] "Account executive" "Dog trainer" "Marketing associate"
## [4] "Project Manager" "Sales representative" "Web Designer"
##
## $education
## [1] "College" "High School" "Masters" "PhD"
##
## $male_female
## [1] "F" "M"
# Contar las ocurrencias de cada género (similar a value_counts())
table(df$male_female)
##
## F M
## 222 241
Hay 241 hombres y 222 mujeres en este conjunto de datos, para un total de 463 personas.
Este es un diagrama de caja que compara el salario entre hombres y mujeres. ¿Qué puedes concluir?
ggplot(df, aes(x = pay_yearly, y = male_female)) +
geom_boxplot() +
labs(
title = "Pago vs. Género",
x = "Pago Anual (USD)",
y = "Género"
)

Respuesta.
Realice una prueba \(t\) - sobre la diferencia en el salario promedio, dado el \(p\)-valor que puede concluir.
# Realizar una prueba t de dos muestras
# La sintaxis de fórmula es pay_yearly ~ male_female
t_test_result <- t.test(pay_yearly ~ male_female, data = df)
# Mostrar los resultados
print(t_test_result)
##
## Welch Two Sample t-test
##
## data: pay_yearly by male_female
## t = -3.147, df = 447.25, p-value = 0.00176
## alternative hypothesis: true difference in means between group F and group M is not equal to 0
## 95 percent confidence interval:
## -12290.220 -2840.959
## sample estimates:
## mean in group F mean in group M
## 96255.95 103821.54
# Imprimir los valores específicos de t y p
cat(paste("t =", t_test_result$statistic, "\n"))
## t = -3.14702247705589
cat(paste("p =", t_test_result$p.value, "\n"))
## p = 0.00175963583349005
Respuesta.
Inspeccione la gráfica de dispersión a continuación:
ggplot(df, aes(x = age_years, y = pay_yearly)) +
geom_point(color = "orange") +
labs(
title = "Pago vs. Edad",
x = "Edad (años)",
y = "Pago Anual (USD)"
)

y los box-plots de la varible pay_yearly con respecto a
las siguientes features: seniority_years,
education, job_title, and
performance_score. ¿Qué patrones observas?
p1 <- ggplot(df, aes(x = factor(seniority_years), y = pay_yearly)) +
geom_boxplot(color = "cyan") +
labs(x = "Años de Antigüedad")
p2 <- ggplot(df, aes(x = job_title, y = pay_yearly)) +
geom_boxplot(color = "cyan") +
theme(axis.text.x = element_text(angle = 30, hjust = 1)) +
labs(x = "Cargo")
p3 <- ggplot(df, aes(x = education, y = pay_yearly)) +
geom_boxplot(color = "cyan") +
labs(x = "Educación")
p4 <- ggplot(df, aes(x = factor(performance_score), y = pay_yearly)) +
geom_boxplot(color = "cyan") +
labs(x = "Puntaje de Desempeño")
# Organizar los gráficos en una cuadrícula de 2x2
grid.arrange(p1, p2, p3, p4, ncol = 2)
Respuesta.
Ahora, hagamos las mismas gráficas que en el Ejercicio 1.3, pero diferenciándolas adicionalmente por género. ¿Qué patrones observas?
p1_gender <- ggplot(df, aes(x = factor(seniority_years), y = pay_yearly, fill = male_female)) +
geom_boxplot() +
labs(x = "Años de Antigüedad", fill = "Género")
p2_gender <- ggplot(df, aes(x = job_title, y = pay_yearly, fill = male_female)) +
geom_boxplot() +
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5)) +
labs(x = "Cargo", fill = "Género")
p3_gender <- ggplot(df, aes(x = education, y = pay_yearly, fill = male_female)) +
geom_boxplot() +
labs(x = "Educación", fill = "Género")
p4_gender <- ggplot(df, aes(x = factor(performance_score), y = pay_yearly, fill = male_female)) +
geom_boxplot() +
labs(x = "Puntaje de Desempeño", fill = "Género")
grid.arrange(p1_gender, p2_gender, p3_gender, p4_gender, ncol = 2)
Respuesta.
¿Cual de los siguientes enunciados son verdaderos?
# Obtener estadísticas descriptivas por género (similar a groupby().describe())
df %>%
group_by(male_female) %>%
summarise(
count = n(),
mean = mean(pay_yearly),
std = sd(pay_yearly),
min = min(pay_yearly),
q25 = quantile(pay_yearly, 0.25),
median = median(pay_yearly),
q75 = quantile(pay_yearly, 0.75),
max = max(pay_yearly)
)
Respuesta.
En los ejercicios anteriores vimos el EDA, aunque existe una brecha salarial significativa entre los géneros, también hay otros factores en el trabajo que impulsan esta diferencia. Por lo tanto, ignorar estos factores al abordar la discriminación salarial podría conducir a conclusiones erróneas o engañosas.
¿Cómo tomamos en cuenta la influencia de las otras variables en el salario? ¿Cuáles son estas variables? Un buen lugar para comenzar es el EDA anterior. La única variable numérica en este conjunto de datos es la edad, así que revisemos de nuevo nuestro gráfico de dispersión de salario frente a la edad:
ggplot(df, aes(x = age_years, y = pay_yearly)) +
geom_point(color = "orange") +
labs(
title = "Pago vs. Edad",
x = "Edad (años)",
y = "Pago Anual (USD)"
)
Respuesta.
Detemine si es verdadera o falsa la siguiente afirmación y explique por qué:
“Si la correlación de Pearson entre dos variables es cero, entonces las dos variables no están relacionadas”
Respuesta.
Para encontrar las variables que tienen la mayor influencia en el pago, podemos calcular una matriz de correlación y trazarla como un mapa de calor:
# Seleccionar solo columnas numéricas para la matriz de correlación
numeric_df <- df %>%
select_if(is.numeric)
# Calcular la matriz de correlación
corr_mat <- cor(numeric_df)
# Visualizar la matriz de correlación con la librería corrplot
corrplot(corr_mat, method = "color", addCoef.col = "black", type = "upper")
Parece que las dos variables que se relacionan linealmente con la
remuneración son age_years y seniority_years.
Debemos asegurarnos de incluirlos en nuestro modelo.
Una vez que identificamos algunas variables que están correlacionadas con la variable de objetivo, podemos usar un modelo lineal para capturar esta relación cuantitativamente. Un modelo lineal encuentra la recta de mejor ajuste de los puntos dados.
ggplot(df, aes(x = age_years, y = pay_yearly)) +
geom_point(color = "orange") +
geom_smooth(method = "lm", se = FALSE, color = "blue") +
labs(
title = "Pago vs. Edad",
x = "Edad",
y = "Pago"
)
## `geom_smooth()` using formula = 'y ~ x'
Una recta tiene dos parámetros: intercepto (\(\beta_0\)) y pendiente (\(\beta_1\)), también conocidos como los coeficientes del modelo. Por lo tanto, un modelo lineal de salario frente a la edad se puede representar como:
\[ PAY\_YEARLY = \beta_0 + \beta_1 AGE\_YEARS + \varepsilon \]
La línea recta que dibujamos en el diagrama de dispersión de pago vs. edad se ajustó usando un modelo estadístico llamado regresión lineal, cuyos resultados se pueden ver a continuación:
# Modelo de regresión lineal simple.
# La sintaxis de fórmula en R es muy similar a la de statsmodels en Python.
formula1 <- "pay_yearly ~ age_years"
model1 <- lm(as.formula(formula1), data = df)
# Mostrar el resumen del modelo
summary(model1)
##
## Call:
## lm(formula = as.formula(formula1), data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -56800 -15149 -1003 13922 63660
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 63844.65 3209.74 19.89 <2e-16 ***
## age_years 873.50 72.84 11.99 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 22720 on 461 degrees of freedom
## Multiple R-squared: 0.2378, Adjusted R-squared: 0.2361
## F-statistic: 143.8 on 1 and 461 DF, p-value: < 2.2e-16
La tabla de salida anterior contiene mucha información, solo debemos centrarnos en una pequeña cantidad de cantidades. Estas son la variable de salida (también conocida como la variable dependiente), \(R^2\) y los coeficientes (las estimaciones de \(\beta_0\) y \(\beta_1\)) y sus \(p\)-valores.
El intercepto \(\beta_0\) es de
aproximadamente USD \(\$63 840.\) Esto
se puede considerar como el salario base; es decir, el salario esperado
de una persona de edad cero. Con frecuencia, el intercepto no tiene una
interpretación significativa (como en este caso), eso está bien siempre
que lo reconozcamos y tengamos una explicación sólida de por qué. La
pendiente (el coeficiente \(\beta_1\)
para age_years) es USD \(\$873,50\). La interpretación de este
coeficiente es:
Si un empleado aumenta un año su edad, se espera que su salario aumente en USD \(\$ 873,50\) en promedio.
Las variables de entrada como la age_years también se
denominan variables independientes en el contexto de un
modelo de regresión lineal.
Para el modelo de pago versus edad, \(R^2 = 0.238\). Dado que este modelo solo explica alrededor del 23,8% de la variación, esto nos motiva a investigar si se pueden utilizar otros factores además de la edad para explicar las diferencias salariales y así mejorar nuestras predicciones.
Un hecho matemático importante a tener en cuenta es que cuando tratamos con relaciones de dos variables, \(R^2 \equiv \rho^2\), donde \(\rho\) (rho) es el coeficiente de correlación. En el diagrama de dispersión de salario frente a edad, el coeficiente de correlación \(\rho\) fue 0,4876 y, por lo tanto, \(R^2=0,4876^2=0,238\). De esto se deduce que cuanto más fuerte sea la correlación lineal entre dos variables, mejor será la bondad de ajuste de la regresión lineal correspondiente.
Hay muchas líneas posibles que podemos ajustar a nuestros datos, pero como dijimos antes, la que queremos es la línea de mejor ajuste, que se define como la línea (entre todas las líneas posibles) que maximiza el \(R^2\). del modelo.
Ahora que hemos visto que la edad explica parte de la relación con el salario, consideremos un modelo en el que tengamos en cuenta la edad y el género simultáneamente. Pasaremos de ajustar una regresión lineal simple (una variable independiente, una variable dependiente) a ajustar una regresión lineal múltiple (varias variables independientes, una variable dependiente).
Las regresiones lineales pueden involucrar variables categóricas tan fácilmente como las variables numéricas. El truco consiste en codificar las categorías como números para que el modelo pueda interpretarlas. Hay muchas formas de codificar variables categóricas, pero una de los más comunes es transformarlos en conjuntos de unos y ceros. Lo importante es tener en cuenta la forma en que interpretamos los coeficientes de las variables categóricas en un modelo lineal que es ligeramente diferente a la de las variables numéricas:
En R, lm() crea automáticamente variables dummy para las
variables de tipo factor. F será la categoría de referencia
y se creará un coeficiente para M.
# Modelo con solo la variable male_female
# En R, al usar un factor, automáticamente se crea una variable dummy.
# El nivel base (F en este caso) se incluye en el intercepto.
model_MF <- lm(pay_yearly ~ male_female, data = df)
summary(model_MF)
##
## Call:
## lm(formula = pay_yearly ~ male_female, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -59974 -16794 -139 17086 87571
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 96256 1728 55.710 < 2e-16 ***
## male_femaleM 7566 2395 3.159 0.00169 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 25740 on 461 degrees of freedom
## Multiple R-squared: 0.02119, Adjusted R-squared: 0.01907
## F-statistic: 9.98 on 1 and 461 DF, p-value: 0.001686
\[ PAY\_YEARLY = \beta_0 + \beta_1{MALE\_FEMALE}\text{[T.M]}\]
intercepto <- coef(model_MF)[1]
coef_m <- coef(model_MF)[2]
media_F <- intercepto
media_M <- intercepto + coef_m
diferencia <- media_M - media_F
cat(paste("Media salarial de las mujeres (Intercepto):", round(media_F, 2), "\n"))
## Media salarial de las mujeres (Intercepto): 96255.95
cat(paste("Media salarial de los hombres:", round(media_M, 2), "\n"))
## Media salarial de los hombres: 103821.54
cat(paste("Diferencia salarial promedio (Coeficiente M):", round(diferencia, 2), "\n"))
## Diferencia salarial promedio (Coeficiente M): 7565.59
# Comprobamos con las medias reales
df %>%
group_by(male_female) %>%
summarise(mean_pay = mean(pay_yearly))
\[ PAY\_YEARLY = \beta_0 + \beta_1 AGE\_YEARS + \beta_2 {MALE\_FEMALE}\text{[M]} + \varepsilon \]
# Modelo de regresión lineal múltiple.
formula2 <- "pay_yearly ~ age_years + male_female"
model2 <- lm(as.formula(formula2), data = df)
summary(model2)
##
## Call:
## lm(formula = as.formula(formula2), data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -54128 -15678 -680 13488 67095
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 60063.88 3344.88 17.957 < 2e-16 ***
## age_years 871.81 71.95 12.118 < 2e-16 ***
## male_femaleM 7398.31 2087.36 3.544 0.000434 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 22440 on 460 degrees of freedom
## Multiple R-squared: 0.258, Adjusted R-squared: 0.2548
## F-statistic: 79.99 on 2 and 460 DF, p-value: < 2.2e-16
\[ PAY\_YEARLY = 60060 + 7398.3050 \times{MALE\_FEMALE}\text{[M]} + 871.8142 \times AGE\_YEARS \]
Donde: - \(PAY\_YEARLY\) es el pago
anual. - \(60060\) es el intercepto. -
\(7398.3050\) es el coeficiente para
male_femaleM. - \(871.8142\) es el coeficiente para
age_years. - \({MALE{\_FEMALE}\text{[M]}\) es una variable
indicadora que es 1 si el género es Masculino (M) y 0 si es Femenino
(F).
# Gráfico de dispersión de pago vs. edad, diferenciado por género, con rectas de ajuste
ggplot(df, aes(x = age_years, y = pay_yearly, color = male_female)) +
geom_point(alpha = 0.6) +
geom_smooth(method = "lm", se = FALSE, size = 1.5) +
labs(
title = "Pago vs. Edad por Género",
x = "Edad (Años)",
y = "Pago (Anual)",
color = "Género"
)
## `geom_smooth()` using formula = 'y ~ x'
La interpretación del coeficiente de edad es similar a la anterior:
Dentro de los grupos del mismo sexo, si la edad aumenta en un año, se espera que el salario aumente USD \(\$ 872\)
Observe que este valor es diferente del que obtuvimos en el anterior
regresión: esto se debe a que la variabilidad presente en
pay_yearly ahora tiene que dividirse entre más variables
explicativas.
Con respecto al coeficiente de la variable male_female.
Muestra masculino (M) solamente, porque la categoría
femenina se toma como categoría predeterminada (o referencia). Eso
significa que el coeficiente representa el pay_yearly
adicional o reducido que ocurre solo porque alguien es hombre en lugar
de mujer. En última instancia, la elección de la categoría
predeterminada no importa: podríamos haber optado fácilmente por hacer
de masculino la categoría predeterminada y, por lo tanto, el coeficiente
de género sería T.F. El coeficiente \(\$7398\) se interpreta de la siguiente
manera:
Para empleados de la MISMA EDAD, los hombres en promedio ganan \$7,398 USD más que las mujeres.
Aún no hemos contestado la pregunta principal. Solo hemos tenido en
cuenta la edad además del género para explicar las brechas salariales.
Todavía hay algunos factores más que podrían afectar el pago.
Consideramos education como una nueva varible explicativa.
El siguiente gráfico muestra que a los empleados con un doctorado se les
paga más:
ggplot(df, aes(x = education, y = pay_yearly)) +
geom_boxplot(fill = "cyan")
Haga un regresión múltiple de la forma:
\[ PAY\_YEARLY = \beta_0 + \beta_1 AGE\_YEARS + \beta_2 {MALE\_FEMALE} + \beta_3 EDUCATION + \varepsilon \]
Además, compare el \(R^2\) ajustado con el del modelo anterior. ¿Qué conclusiones puede sacar?
# Celda de código para probar.
formula3 <- "pay_yearly ~ age_years + male_female + education"
model3 <- lm(as.formula(formula3), data = df)
summary(model3)
##
## Call:
## lm(formula = as.formula(formula3), data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -60151 -14746 -447 13478 64220
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 56896.39 3658.39 15.552 < 2e-16 ***
## age_years 859.26 70.72 12.151 < 2e-16 ***
## male_femaleM 7271.64 2054.01 3.540 0.000441 ***
## educationHigh School -259.38 2851.53 -0.091 0.927563
## educationMasters 4890.64 2894.98 1.689 0.091834 .
## educationPhD 11555.74 3007.69 3.842 0.000139 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 22020 on 457 degrees of freedom
## Multiple R-squared: 0.2903, Adjusted R-squared: 0.2825
## F-statistic: 37.38 on 5 and 457 DF, p-value: < 2.2e-16
El modelo de regresión lineal múltiple se puede escribir como:
\[ PAY\_YEARLY = \beta_0 + \beta_1 AGE\_YEARS + \beta_2 {MALE\_FEMALE}\text{[M]} + \beta_3 EDUCATION\text{[High School]} + \beta_4 EDUCATION\text{[Masters]} + \beta_5 EDUCATION\text{[PhD]} + \varepsilon \]
Donde: - \(PAY{\\_}YEARLY\) es el
pago anual. - \(\beta_0\) es el
intercepto. - \(\beta_1\) es el
coeficiente para age_years. - \(\beta_2\) es el coeficiente para
male_female[M]. - \(\beta_3\) es el coeficiente para
education[High School]. - \(\beta_4\) es el coeficiente para
education[Masters]. - \(\beta_5\) es el coeficiente para
education[PhD]. - \({MALE{\\_}FEMALE}\\text{[M]}\) es una
variable indicadora que es 1 si el género es Masculino (M) y 0 si es
Femenino (F). - Las variables de educación con [X] son
variables indicadoras que son 1 si la educación corresponde a esa
categoría (High School, Masters, PhD) y 0 de lo contrario. La categoría
de referencia es “College”. - \(\varepsilon\) representa el término de
error.
Sustituyendo los coeficientes estimados del output, obtenemos:
\[ PAY\_YEARLY = 56900 + 859.26 \times AGE\_YEARS + 7271.64 \times MALE\_FEMALE\text{[M]} - 259.38 \times EDUCATION\text{[High School]} + 4890.64 \times EDUCATION\text{[Masters]} + 11560 \times EDUCATION\text{[PhD]} \]
Respuesta.
¿Cuál de las siguientes afirmaciones es verdadera con respecto al modelo anterior? Seleccione todas las que correspondan.
I. Después de tener en cuenta la edad y el sexo, los empleados con
college education ganan en promedio $$\(11560\) USD menos que los que tienen un
doctorado.
Masters se les paga en promedio USD \(\$4891\) más que a aquellos que solo tienen
un título de college.Respuesta.
Consideremos todos los demás factores que podrían explicar las
brechas salariales a la vez. Agregar job_title,
performance_score y seniority_years:
formula4 <- "pay_yearly ~ age_years + job_title + education + male_female +
performance_score + seniority_years"
model4 <- lm(as.formula(formula4), data = df)
summary(model4)
##
## Call:
## lm(formula = as.formula(formula4), data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -55953 -12902 1116 12308 58701
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 44097.67 4251.09 10.373 < 2e-16 ***
## age_years 666.17 62.98 10.578 < 2e-16 ***
## job_titleDog trainer -10951.91 2778.46 -3.942 9.38e-05 ***
## job_titleMarketing associate 13372.48 3368.69 3.970 8.38e-05 ***
## job_titleProject Manager 13729.92 2899.20 4.736 2.93e-06 ***
## job_titleSales representative -1207.96 2816.89 -0.429 0.668252
## job_titleWeb Designer -1455.61 3307.95 -0.440 0.660123
## educationHigh School -278.31 2404.79 -0.116 0.907918
## educationMasters 4937.76 2446.58 2.018 0.044160 *
## educationPhD 9838.92 2537.77 3.877 0.000122 ***
## male_femaleM 3709.85 1853.78 2.001 0.045967 *
## performance_score 83.81 31.41 2.668 0.007904 **
## seniority_years 3613.33 356.54 10.134 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 18510 on 450 degrees of freedom
## Multiple R-squared: 0.506, Adjusted R-squared: 0.4928
## F-statistic: 38.41 on 12 and 450 DF, p-value: < 2.2e-16
Teniendo en cuenta todos los factores, ¿cuál de los siguientes trabajos paga más?
A. Marketing associate.
B. Sales representative.
C. Proyect Manager.
D. Web Designer.
Respuesta..
Ahora que hemos analizado y tenido en cuenta varios atributos que están correlacionados con el salario, volvamos a examinar la cuestión de qué está impulsando la discriminación salarial. Nuestro último modelo, que tiene en cuenta todas las variables del conjunto de datos, tiene un \(R\) al cuadrado del 50,6 %. Esta es definitivamente una gran mejora con respecto al modelo simplista (pago versus edad) que tenía un \(R\) al cuadrado de 23,8%.
Según el análisis que hemos hecho hasta ahora, ¿cuál de las siguientes afirmaciones es correcta? Seleccione todas las que correspondan.
I. Después de tener en cuenta el cargo, la educación, el desempeño y la edad, la proporción de la diferencia salarial atribuible únicamente al género es pequeña.
Existe evidencia de que la discriminación salarial entre hombres y mujeres se debe únicamente al género.
Hay razones para creer que podría haber una cantidad
desproporcionada de mujeres en trabajos peor pagados, mientras que
podría haber más hombres en trabajos mejor pagados, como
Proyect Manager o
Marketing associate.
Respuesta.
Motivados por el ejercicio anterior, veamos cómo se distribuyen las mujeres en varios factores. El siguiente gráfico muestra que hombres y mujeres están distribuidos de manera similar por antigüedad:
# Crear tablas de contingencia y normalizarlas por fila (género)
ct_seniority <- table(df$male_female, df$seniority_years)
ct_seniority_prop <- prop.table(ct_seniority, 1) %>% as.data.frame()
colnames(ct_seniority_prop) <- c("male_female", "seniority_years", "proportion")
# Gráfico de barras para la distribución por antigüedad
p_seniority_m <- ggplot(ct_seniority_prop %>% filter(male_female == "M"),
aes(x = seniority_years, y = proportion)) +
geom_bar(stat = "identity", fill = "grey") +
labs(title = "Distribución de Hombres por Antigüedad", y = "Proporción")
p_seniority_f <- ggplot(ct_seniority_prop %>% filter(male_female == "F"),
aes(x = seniority_years, y = proportion)) +
geom_bar(stat = "identity", fill = "grey") +
labs(title = "Distribución de Mujeres por Antigüedad", y = "Proporción")
grid.arrange(p_seniority_m, p_seniority_f, ncol = 2)
Sin embargo, observar la distribución de las mujeres en varios roles de trabajo:
ggplot(df, aes(x = job_title, fill = male_female)) +
geom_bar(position = "dodge") +
labs(
title = "Distribución de hombres vs. mujeres en varios roles",
x = "Cargo",
y = "Conteo",
fill = "Género"
) +
theme(axis.text.x = element_text(angle = 40, hjust = 1))
Se observa que:
Las mujeres están subrepresentadas en los roles de
Project Manager y
Marketing associate.
Las mujeres están desproporcionadamente sobrerrepresentadas en el
trabajo de Dog trainer que es el de peor pago.
Utilizamos las técnicas de regresión lineal para determinar si existía o no discriminación salarial basada en el género dentro de su organización. Modelamos el efecto de varias variables de entrada (en este caso, antigüedad, edad, desempeño y cargo) para explicar la variación observada de una variable de salida (en este caso, salario). Observamos el coeficiente \(R^2\) de nuestros modelos lineales para ayudarnos a medir qué porcentaje de la variación observada en el salario se explica por las variables de entrada.
Vimos que la diferencia en el salario medio entre hombres y mujeres es estadísticamente significativa. Una exploración más profunda de los datos sugirió que un gran impulsor de esta diferencia se debía a que las mujeres estaban sobrerrepresentadas en los trabajos peor pagados y subrepresentadas en los trabajos mejor pagados.
Por lo tanto, se justifica una investigación sobre las prácticas de contratación, promoción y colocación laboral de hombres y mujeres. En su informe al departamento de recursos humanos, debe pedirles que examinen las siguientes preguntas:
En esta lectura se aprendió a aprovechar el análisis exploratorio de datos (EDA) para construir un modelo lineal eficaz que tuviera en cuenta varios factores relacionados con el resultado de interés (pago).
Resumiendo:
“R2values.svg”, 6 de abril de 2018, Debenben, CC BY-SA 4.0, https://de.wikipedia.org/wiki/Datei:R2values.svg Notas de Julio Zainea ```