Salaries dataset: The 2008-09 nine-month academic salary for Assistant Professors, Associate Professors and Professors in a college in the U.S. The data were collected as part of the on-going effort of the college’s administration to monitor salary differences between male and female faculty members. * rank a factor with levels AssocProf , AsstProf , Prof * Discipline: a factor with levels A (“theoretical”) or B (“applied”). * yrs.since.phd: years since PhD. * yrs.service: years of service. * sex: a factor with levels Female Male * salary: nine-month salary, in dollars.
#------------------------------------------------------------------------------#
# Universidad del Valle #
# Maestría en Analítica e inteligencia de Negocios #
# Asignatura: Métodos Cuantitativos para el análisis de la información #
# Estadístico - Jaime Mosquera Restrepo #
#------------------------------------------------------------------------------#
#------------------------------------------------------------------------------#
# Análisis Exploratorio de Datos #
# Situación 5 – Discriminación por género en el salario de los profesores #
#------------------------------------------------------------------------------#
#------------------------------------------------------------------------------#
# Estudiantes #
# Camilo Andrés Jaramillo - 2402218 #
# Diego León Peña - 2402176 #
#------------------------------------------------------------------------------#
# Recomendaciones, Configuración y Limpieza del espacio de trabajo #
objects(); ls() #Listado de los objetos cargados en la sesión activa
## character(0)
## character(0)
wd=getwd()# Define la ruta del directorio de trabajo
setwd(wd) # Establece el directorio de trabajo
#sink()
##### Cargar las librerías requeridas
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(tidyr)
library(corrplot)
## corrplot 0.94 loaded
library(e1071)
library(gridExtra)
##
## Adjuntando el paquete: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
library(reshape2)
##
## Adjuntando el paquete: 'reshape2'
## The following object is masked from 'package:tidyr':
##
## smiths
Salaries <- read.csv("Salaries.csv", sep = ";")
### Ver los primeros registros
head(Salaries)
## rank discipline yrs.since.phd yrs.service sex salary
## 1 Prof B 19 18 Male 139750
## 2 Prof B 20 16 Male 173200
## 3 AsstProf B 4 3 Male 79750
## 4 Prof B 45 39 Male 115000
## 5 Prof B 40 41 Male 141500
## 6 AssocProf B 6 6 Male 97000
attach(Salaries)
summary(salary)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 57800 91000 107300 113706 134185 231545
mean_salary <- mean(salary) # 113706.5
median_salary <- median(salary) # 107300
sd_salary <- sd(salary) # 30289.04
Mujeres: 101002.4 Hombres: 115090.4.
print(mean_salary)
## [1] 113706.5
Mediana del Salario general: 107300
print(median_salary)
## [1] 107300
La diferencia promedio es de 14088, con los hombres ganando más que las mujeres. El Salario pormedio de las mujeres esta por debajo del promedio general en 12704,1 y por debajo de la mediana de los datos totales en 6297.6.
print(sd_salary)
## [1] 30289.04
Rango entre el primer y el tercer cuartil (los bordes de la caja).
iqr_salary <- IQR(salary) # 43185
print(iqr_salary)
## [1] 43185
Valores en salary que corresponden a los percentiles 0%, 25%, 50%, 75% y 100%.
quantile(salary, probs = seq(0, 1, 0.25))
## 0% 25% 50% 75% 100%
## 57800 91000 107300 134185 231545
histograma_salary <- ggplot(Salaries, aes(x = salary)) +
geom_histogram(binwidth = 10000, fill = "lightsalmon", color = "darksalmon") +
labs(
title = "Histograma de Salarios",
x = "Salario ($)",
y = "Frecuencia"
) +
theme_minimal() +
theme(plot.title = element_text(size = 14, face = "bold", hjust = 0.5))
# Boxplot de 'salary'
boxplot_salary <- ggplot(Salaries, aes(x = "", y = salary)) +
geom_boxplot(fill = "lightblue", color = "darkblue", outlier.color = "red", outlier.shape = 16) +
labs(
title = "Distribución de Salarios",
x = "",
y = "Salario ($)"
) +
theme_minimal() +
theme(plot.title = element_text(size = 14, face = "bold", hjust = 0.5)) +
# Agrega el texto con la mediana
geom_text(aes(x = 1, y = median_salary), label = paste("Mediana:", median_salary), vjust = -0.5)
# Mostrar los gráficos
grid.arrange(histograma_salary, boxplot_salary, ncol = 2)
## Warning in geom_text(aes(x = 1, y = median_salary), label = paste("Mediana:", : All aesthetics have length 1, but the data has 397 rows.
## ℹ Please consider using `annotate()` or provide this layer with data containing
## a single row.
attach(Salaries)
## The following objects are masked from Salaries (pos = 3):
##
## discipline, rank, salary, sex, yrs.service, yrs.since.phd
summary(yrs.since.phd)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 12.00 21.00 22.31 32.00 56.00
histograma_yrs_since_phd <- ggplot(Salaries, aes(x = yrs.since.phd)) +
geom_histogram(binwidth = 5, fill = "lightsalmon", color = "darksalmon") +
labs(
title = "Histograma de Años desde el PhD",
x = "Años desde PhD",
y = "Frecuencia"
) +
theme_minimal() +
theme(plot.title = element_text(size = 14, face = "bold", hjust = 0.5))
# Boxplot de 'yrs.since.phd'
boxplot_yrs_since_phd <- ggplot(Salaries, aes(x = "", y = yrs.since.phd)) +
geom_boxplot(fill = "lightblue", color = "darkblue", outlier.color = "red", outlier.shape = 16) +
labs(
title = "Distribución de Años desde PhD",
x = "",
y = "Años desde PhD"
) +
theme_minimal() +
theme(plot.title = element_text(size = 14, face = "bold", hjust = 0.5))
# Mostrar los gráficos
grid.arrange(histograma_yrs_since_phd, boxplot_yrs_since_phd, ncol = 2)
attach(Salaries)
## The following objects are masked from Salaries (pos = 3):
##
## discipline, rank, salary, sex, yrs.service, yrs.since.phd
## The following objects are masked from Salaries (pos = 4):
##
## discipline, rank, salary, sex, yrs.service, yrs.since.phd
summary(yrs.service)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 7.00 16.00 17.61 27.00 60.00
histograma_yrs_service <- ggplot(Salaries, aes(x = yrs.service)) +
geom_histogram(binwidth = 5, fill = "lightsalmon", color = "darksalmon") +
labs(
title = "Histograma de Años de Servicio",
x = "Años de Servicio",
y = "Frecuencia"
) +
theme_minimal() +
theme(plot.title = element_text(size = 14, face = "bold", hjust = 0.5))
# Boxplot de 'yrs.service'
boxplot_yrs_service <- ggplot(Salaries, aes(x = "", y = yrs.service)) +
geom_boxplot(fill = "lightblue", color = "darkblue", outlier.color = "red", outlier.shape = 16) +
labs(
title = "Distribución de Años de Servicio",
x = "",
y = "Años de Servicio"
) +
theme_minimal() +
theme(plot.title = element_text(size = 14, face = "bold", hjust = 0.5))
# Mostrar los gráficos
grid.arrange(histograma_yrs_service, boxplot_yrs_service, ncol = 2)
histograma_sex <- ggplot(Salaries, aes(x = sex, fill = sex)) +
geom_bar() +
labs(
title = "Conteo de Profesores por Sexo",
x = "Sexo",
y = "Frecuencia"
) +
theme_minimal() +
theme(
plot.title = element_text(size = 14, face = "bold", hjust = 0.5),
legend.position = "none"
) +
# Agrega el texto con el conteo de cada barra
geom_text(stat = "count", aes(label = ..count..), vjust = -0.5)
print(histograma_sex)
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
skewness_salary <- skewness(salary) #Valor positivo= Datos están sesgados a la derecha #Valor negativo= Sesgo a la izquierda kurtosis_salary <- kurtosis(salary) #Valor alto= Datos concentrados en la medio #Valor bajo= Datos menos concentrados en la madia, valores atipicos
skewness_salary #El 0.709 Esto significa que hay más valores bajos y un menor número #de valores altos. En otras palabras, la mayoría de los salarios son relativamente #bajos, pero hay algunos salarios muy altos que alargan la cola derecha #de la distribución.
kurtosis_salary #El 0.18 Indica que los salarios estan menos concentrados en la media. #La distribución tiene una forma similar a la normal con pocos datos atipicos.
# ---------------------------------------------------------------------------
# Boxplot del salario por sexo
box_plot_salary_sex <-
ggplot(Salaries, aes(x = sex, y = salary, fill = sex)) +
geom_boxplot() +
labs(title = "Distribución de Salarios por Sexo", x = "Sexo", y = "Salario") +
theme_minimal()
# ---------------------------------------------------------------------------
# Boxplot del salario por rango de profesor
box_plot_salary_rank <-
ggplot(Salaries, aes(x = rank, y = salary, fill = rank)) +
geom_boxplot() +
labs(title = "Distribución de Salarios por Rango de Profesor", x = "Rango", y = "Salario") +
theme_minimal()
# ---------------------------------------------------------------------------
# Boxplot del salario por disciplina
box_plot_salary_disc <-
ggplot(Salaries, aes(x = discipline, y = salary, fill = discipline)) +
geom_boxplot() +
labs(title = "Distribución de Salarios por Disciplina", x = "Disciplina", y = "Salario") +
theme_minimal() +
theme(
plot.title = element_text(size = 14, face = "bold", hjust = 0.5)
)
# Mostrar los gráficos
print(box_plot_salary_sex)
print(box_plot_salary_rank)
print(box_plot_salary_disc)
grafico_disp_servicio <- ggplot(Salaries, aes(x = yrs.service, y = salary)) +
geom_point(alpha = 0.6) + # Añadir puntos con un poco de transparencia
geom_smooth(method = "lm", se = FALSE, color = "blue") + # Línea de tendencia
labs(title = "Relación entre Salario y Años de Servicio",
x = "Años de Servicio",
y = "Salario ($)") +
theme_minimal() +
theme(
plot.title = element_text(size = 14, face = "bold", hjust = 0.5)
)
# Gráfico de dispersión de salario vs. años desde el doctorado
grafico_disp_phd <- ggplot(Salaries, aes(x = yrs.since.phd, y = salary)) +
geom_point(alpha = 0.6) + # Añadir puntos con un poco de transparencia
geom_smooth(method = "lm", se = FALSE, color = "red") + # Línea de tendencia
labs(title = "Relación entre Salario y Años Desde el Doctorado",
x = "Años Desde el Doctorado",
y = "Salario ($)") +
theme_minimal() +
theme(
plot.title = element_text(size = 14, face = "bold", hjust = 0.5)
)
# Mostrar ambos gráficos
print(grafico_disp_servicio)
## `geom_smooth()` using formula = 'y ~ x'
print(grafico_disp_phd)
## `geom_smooth()` using formula = 'y ~ x'
# Seleccionar las variables numéricas para calcular la correlación
variables_numericas <- Salaries[, c("salary", "yrs.since.phd", "yrs.service")]
# Calcular la matriz de correlación
correlation_matrix <- cor(variables_numericas)
# Convertir la matriz de correlación en un formato largo para ggplot
correlation_matrix_melted <- melt(correlation_matrix)
# Graficar el mapa de calor
ggplot(correlation_matrix_melted, aes(Var1, Var2, fill = value)) +
geom_tile() +
scale_fill_gradient2(low = "blue", high = "red", mid = "white", midpoint = 0, limit = c(-1, 1), name = "Correlación") +
labs(title = "Mapa de Calor de la Correlación entre Variables",
x = "Variables",
y = "Variables") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
geom_text(aes(label = round(value, 2)), color = "black", size = 5)
# Filtrar datos para el grupo de hombres
data_male <- subset(Salaries, sex == "Male")
# Filtrar datos para el grupo de mujeres
data_female <- subset(Salaries, sex == "Female")
# Seleccionar las columnas relevantes para el cálculo de la matriz de correlación
columns_to_correlate <- c("yrs.since.phd", "yrs.service", "salary")
# Calcular la matriz de correlación para hombres
correlation_matrix_male <- cor(data_male[ , columns_to_correlate], use="complete.obs")
# Calcular la matriz de correlación para mujeres
correlation_matrix_female <- cor(data_female[ , columns_to_correlate], use="complete.obs")
# Convertir las matrices de correlación a formato largo para ggplot
correlation_matrix_male_melted <- melt(correlation_matrix_male)
correlation_matrix_female_melted <- melt(correlation_matrix_female)
# Graficar el mapa de calor para hombres
cm_hombres <-
ggplot(correlation_matrix_male_melted, aes(Var1, Var2, fill = value)) +
geom_tile() +
scale_fill_gradient2(low = "blue", high = "red", mid = "white", midpoint = 0, limit = c(-1, 1), name = "Correlación") +
labs(title = "Mapa de Calor de la Correlación entre Variables (Hombres)",
x = "Variables",
y = "Variables") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
geom_text(aes(label = round(value, 2)), color = "black", size = 5)
# Graficar el mapa de calor para mujeres
cm_mujeres <-
ggplot(correlation_matrix_female_melted, aes(Var1, Var2, fill = value)) +
geom_tile() +
scale_fill_gradient2(low = "blue", high = "red", mid = "white", midpoint = 0, limit = c(-1, 1), name = "Correlación") +
labs(title = "Mapa de Calor de la Correlación entre Variables (Mujeres)",
x = "Variables",
y = "Variables") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
geom_text(aes(label = round(value, 2)), color = "black", size = 5)
print(cm_hombres)
print(cm_mujeres)
# Boxplot de salario por rango y sexo
boxplot_salario_rango_sexo <-
ggplot(Salaries, aes(x = rank, y = salary, fill = sex)) +
geom_boxplot() +
labs(title = "Distribución de Salarios por Rango y Sexo", x = "Rango de Profesor", y = "Salario ($)") +
theme_minimal()
# Boxplot de salario por disciplina y sexo
boxplot_salario_disc_sexo <-
ggplot(Salaries, aes(x = discipline, y = salary, fill = sex)) +
geom_boxplot() +
labs(title = "Distribución de Salarios por Disciplina y Sexo", x = "Disciplina", y = "Salario ($)") +
theme_minimal() +
scale_fill_brewer(palette = "Set2")
# Mostrar ambos gráficos
print(boxplot_salario_rango_sexo)
print(boxplot_salario_disc_sexo)
Análisis de la Prueba T (t de Student): Se utiliza para comparar las medias de dos grupos y estalbecer las diferencias y si son significativas.
Hipotesis Nula: No hay diferencia en los salarios promedio entre hombres y mujeres
Valor t = -3.1615: Este valor t indica que la diferencia observada entre los salarios promedio de hombres y mujeres es de -3.1615 desviaciones estándar de la media bajo la hipótesis nula. El valor t negativo sugiere que el salario promedio de las mujeres es menor que el de los hombres, lo cual ha sido evidente a lo largo del analisis.
Valor p = 0.002664: Este p-valor es muy pequeño (menor que el umbral típico de 0.05), lo que se convierte en una fuerte evidencia en contra de la hipótesis nula. Esto significa que la diferencia observada en los salarios promedio entre hombres y mujeres no se debe al azar o que hay poca probailidad de esto.
t_test_result <- t.test(salary ~ sex, data = Salaries)
print(t_test_result)
##
## Welch Two Sample t-test
##
## data: salary by sex
## t = -3.1615, df = 50.122, p-value = 0.002664
## alternative hypothesis: true difference in means between group Female and group Male is not equal to 0
## 95 percent confidence interval:
## -23037.916 -5138.102
## sample estimates:
## mean in group Female mean in group Male
## 101002.4 115090.4
Sí, los salarios son diferentes entre hombres y mujeres. La prueba t arrojó un p-valor de 0.002664, que es mucho menor que el umbral típico de 0.05. Esto significa que hay una diferencia significativa en los salarios promedio entre los dos grupos. Además, las diferencias observadas en los salarios no se deben al azar.
El gráfico de Distribucion de salarios por rango y sexo, muestra un menor salario recibido por el grupo de mujeres frente al grupo de hombres, para cada uno de los rangos definidos para los docentes. Por otra parte, cuando se hace el análisis en el gráfico de Distribución de salarios por disciplina y sexo, esta tendencia permanece, con un menor salario para las mujeres vinculadas tanto a disciplinas teóricas como aplicadas. Lo anterior sugiere que el ingreso de las mujeres es menor de manera consistente, independiente del rango o disciplina a las que esten vinculadas.
Salario promedio general: 113706.5 Mediana del Salario general: 107300
Salario promedio Mujeres: 101002.4 Salario promedio Hombres: 115090.4
La diferencia promedio es de 14088, con los hombres ganando más que las mujeres. El Salario pormedio de las mujeres está por debajo del promedio general en 12704,1 y por debajo de la mediana de los datos totales en 6297.6.
Desviación estandar del conjunto de salarios: La variación de los datos con respecto al valor promedio es de 30289.04. Esto equivale al 32.9% del valor del salario mas frecuente en el conjunto de datos.
Desviación estándar Mujeres: 25952.13 Desviación estándar Hombres: 30436.93
Existe más variabilidad en los salarios de los hombres comparado con los salarios de las mujeres.
Rango intercuartilico: Este indicador mide la diferencia entre los cuartiles 75% y el 25%. El valor obtenido de 43185 correspomde a esta diferencia ente los salarios de los dos cuartiles. Esto indica una amplia variabilidad en este rango.
Al comparar con la desviación estándar del conjunto de datos que dio 30289.04, se puede asegurar que hay una gran variabilidad en los salarios, que se evidencia en el rangointercuartílico.
Cuartiles de salarios: Presenta la distribución de los datos de salarios:
quantile(salary, probs = seq(0, 1, 0.25))
## 0% 25% 50% 75% 100%
## 57800 91000 107300 134185 231545
Existe una diferencia importante entre el salario mínimo (57800) y el máximo (231545) lo que confirma la alta variabilidad en los salarios. En el extremo superior se puede ver que existen algunos valores altos dada la difenrencia entre los cuartiles 75% y 100% (134185) y (231545) que equivale a 97360.
El salario mínimo corresponde a la categoria de profesor en la disciplina teórica y para un profesor de sexo masculino.
rank discipline yrs.since.phd yrs.service sex salary Prof A 51 51 Male 57800
Por otra parte, el hecho de que la mediana que calculamos previamente (107300) sea menor que el tercer cuartil (134185) y mayor que el primer cuartil (91000), nos indica que existe un sesgo hacia la derecha, como lo sugirió la asimetría positiva calculada anteriormente.
Asimetria: Si el valor es positivo indica sesgo a la derecha es decir unos pocos valores de salario muy altos y una concentracion de valores de salarios bajos. El valor de la asimetría obtenido fue de 0.7091778, lo que se interpreta como que la distribución de los datos no es simétrica. Es decir que los salarios altos no son frecuentes pero logran alargar la cola hacia la derecha. En esta situación, la media debe ser mayor que la mediana, como efectivamente arrojan los calculo previos: Media 113706.5 y Mediana 107300.
Curtosis: Mide la distribución de los datos alrededor de la media. El valor obtenido en este caso fue de 0.1814838, que corresponde a Curtosis Baja, que sugiere que la distribución de los salarios tiene la forma similar a una distribución normal con respecto a la manera como se distribuyen los datos alrededor de la media y que no tiene una gran cantidad de valores extremos, es decir que los resultados estan moderadamente concentrados alrededor de la media.
Matriz de correlación: Muestra el nivel de correlación entre las variables estudiadas. La correlación varia entre -1 y 1 con el siguiente significado:
1 indica una correlación positiva perfecta. Si una variable aumenta, la otra también lo hace de manera proporcional.
-1 indica una correlación negativa perfecta. Si una variable aumenta, la otra disminuye de manera proporcional.
0 indica que no hay correlación lineal entre las variables.
Los resultados obtenidos fueron:
correlation_matrix
## salary yrs.since.phd yrs.service
## salary 1.0000000 0.4192311 0.3347447
## yrs.since.phd 0.4192311 1.0000000 0.9096491
## yrs.service 0.3347447 0.9096491 1.0000000
Correlación entre yrs.since.phd y yrs.service: 0.9096491
Muy Alta Correlación Positiva: Esto sugiere que a mayor tiempo desde la obtención del doctorado, se tiene más años de experiencia laboral, lo cual parece razonable.
Correlación entre yrs.since.phd y salary: 0.4192311 Moderada Correlación Positiva: Relación positiva moderada entre los años desde la obtención del doctorado y el salario. Sugiere que cuando el tiempo desde la obtención del doctorado aumenta, los salarios tienden a ser más moderadamente altos.
Correlación entre yrs.service y salary: 0.3347447 Moderada Correlación Positiva: Relación positiva moderada entre los años de servicio y el salario. Se peude decir que con más años de servicio, los salarios tienden a aumentar de manera moderada.
En general de peude decirq ue existen relaciones positivas moderadas, lo que se puede interpreta que aunque la experiencia tiene un impacto positivo en los salarios, existen otros factores determinates del salario.
Matriz de Correlación Hombres y Mujeres por separado:
Matriz de Correlación Hombres
correlation_matrix_male
## yrs.since.phd yrs.service salary
## yrs.since.phd 1.0000000 0.9105200 0.3927185
## yrs.service 0.9105200 1.0000000 0.3065995
## salary 0.3927185 0.3065995 1.0000000
Matriz de Correlación Mujeres
correlation_matrix_female
## yrs.since.phd yrs.service salary
## yrs.since.phd 1.0000000 0.8577747 0.6201349
## yrs.service 0.8577747 1.0000000 0.5560213
## salary 0.6201349 0.5560213 1.0000000
La diferencia más notoria está en la relación de salario y experiencia:
Para los hombres: La correlación de salary con yrs.since.phd y yrs.service es moderada, lo que sugiere que aunque la experiencia influye en los salarios, no es el único factor en este caso.
Para las mujeres: Las correlaciones de salary con yrs.since.phd y yrs.service son notoriamente más fuertes, lo que sugiere que la experiencia tiene un impacto mayor en los salarios de las mujeres.
En este sentido la mayor correlación de los salarios con la experiencia en mujeres sugiere que a medida que las mujeres avanzan en sus carreras y acumulan experiencia, la remuneración refleja de manera más evidente este progreso en comparación con los hombres. Esto puede deberse a diferentes dinámicas laborales relacionadas con oportunidades de crecimiento profesional diferenciadas por género.
Análisis de la Prueba T (t de Student):
Se utiliza para comparar las medias de dos grupos y estalbecer las diferencias y si osn significativas. Hipotesis Nula: No hay diferencia en los salarios promedio entre hombres y mujeres.
Valor t = -3.1615: Este valor t indica que la diferencia observada entre los salarios promedio de hombres y mujeres es de -3.1615 desviaciones estándar de la media bajo la hipótesis nula. El valor t negativo sugiere que el salario promedio de las mujeres es menor que el de los hombres, lo cual ha sido evidente a lo largo del análisis.
Valor p = 0.002664: Este p-valor es muy pequeño (menor que el umbral típico de 0.05), lo que se convierte en una fuerte evidencia en contra de la hipótesis nula. Esto significa que la diferencia observada en los salarios promedio entre hombres y mujeres no se debe al azar o que hay poca probailidad de esto.
Intervalo de confianza: El intervalo de confianza del 95% para la diferencia en los salarios promedio es de -23037.92 a -5138.10. Esto implica que, con un 95% de confianza, la diferencia en los salarios promedio entre hombres y mujeres se encuentra entre estos valores, confirmando que los hombres ganan significativamente más que las mujeres.