Análisis de Datos y Big data

Universidad Central

Dirección de Educación Continua.

Imágen1
Imágen1

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/"

Objetivos.

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.

¿Qué factores están impulsando la discriminación salarial entre hombres y mujeres en la empresa?

Introducción.

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:

  1. job_title: Cargo que ocupa (p.j. “Graphic Designer”, “Software Engineer”, etc)
  2. age_years: Edad
  3. performance_score: Puntaje en escala de 0 a 100, siendo 0 el más bajo y 100 el más alto.
  4. education: Nivel máximo de educación (p.j. “College”, “PhD”, “Masters”, “Highschool”)
  5. seniority_years: Años de antigüedad
  6. pay_yearly: Pago anual en dólares.
  7. male_female: Género: hombre o mujer.

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.

Ejercicio 1.

1.1

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.

1.2

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.

1.3

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.

Ejercicio 2.

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.

Ejercicio 3.

¿Cual de los siguientes enunciados son verdaderos?

    I. El salario promedio de los hombres es alrededor de USD \(7500\) más que el de las mujeres en esta organización.
    II. A los hombres se les paga significativamente más que a las mujeres debido únicamente a las diferencias de género.
# 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.

¿Cuáles son las variables que influyen en la remuneración?

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.

Ejercicio 4.

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.

Uso de modelos lineales para tener en cuenta las variables correlacionadas con el pago

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 \]

Interpretando la salida de un modelo lineal.

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.

Coeficientes.

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.

\(R^{2}\)

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.

En cuanto a la edad y el género.

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

Ejercicio 5.

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.

Ejercicio 6.

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

  1. Después de tener en cuenta la edad y el género, a los empleados con Masters se les paga en promedio USD \(\$4891\) más que a aquellos que solo tienen un título de college.

Respuesta.

Modelo integrado que contabiliza todas las variables.

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

Ejercicio 7.

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

La pregunta de la discriminación salarial…

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

Ejercicio 9.

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.

  1. Existe evidencia de que la discriminación salarial entre hombres y mujeres se debe únicamente al género.

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

Investigar la distribución de género a través de la antigüedad y los tipos de trabajo.

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:

  1. Las mujeres están subrepresentadas en los roles de Project Manager y Marketing associate.

  2. Las mujeres están desproporcionadamente sobrerrepresentadas en el trabajo de Dog trainer que es el de peor pago.

Conclusiones.

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:

  1. ¿Las mujeres eligen o se ven obligadas a aceptar trabajos con salarios más bajos?
  2. ¿Se discrimina a las mujeres en los procesos de contratación para trabajos mejor remunerados?

Comentarios.

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:

  1. Se aprendió que al observar la relación entre el resultado de interés y la variable de entrada de interés no es suficiente; puede haber varias variables de confusión.
  2. Es importante realizar EDA antes de construir cualquier modelo para descubrir y tener en cuenta estas variables de confusión que podrían estar impulsando la variación en el resultado de interés.
  3. \(R^2\) es una cantidad importante que explica qué tan bien su modelo explica la variación observada. Se puede utilizar para comparar diferentes modelos.
  4. Es extremadamente importante analizar los coeficientes de una regresión lineal para comprender cómo los diversos parámetros impactan en el resultado final; esta interpretabilidad es una parte clave de la traducción de datos en acciones comerciales.

Créditos.

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