El salario acumulado en nueve meses de 2008-09 para profesores asistentes, profesores asociados y profesores en una universidad en los EE. UU. Los datos se recogieron como parte del esfuerzo continuo de la administración de la universidad para monitorear las diferencias salariales entre los miembros masculinos y femeninos de la facultad.
La hoja de datos Salaries.csv contiene la información de 397 profesores con el registro de 6 variables.
| Variable | Descripción |
|---|---|
| rank | Factor ordinal con niveles AssocProf AsstProf Prof |
| discipline | Factor con niveles A (“teórico”) o B (“aplicado”) |
| yrs.since.phd | Años transcurrido desde la obtención del doctorado |
| yrs.service | Años de servicio |
| sex | Factor nominal con niveles Female (Femenino) o
Male (Masculino) |
| salary | Salario de nueve meses, en dólares |
En consistencia con el objetivo del estudio, se espera que usted construya un informe sintético, en el cual, a través de una visualización contundente de los datos y el contraste adecuado de indicadores resumen, contribuya a la institución a responder las siguientes dos preguntas de investigación.
¿Existe una diferencia salarial entre hombres y mujeres?
Si la diferencia existe: ¿son atribuibles exclusivamente al género de los profesores ó existen otras características que pueden explicar la diferencia salarial?
Como primer paso de este ejercicio se realizará un análisis exploratorio de los datos para arrojar las principales medidas de tendencia central de los salarios de los profesores, calculando la cantidad de registros por género.Por lo cual, se presenta a continuación una visualización del dataframe objeto del estudio:
Salaries = read.table("Salaries.csv",header=T,dec=".",sep=";",na.strings = "NA") #Lectura del set de datos
attach(Salaries) #atajo para las variables del set de datos
Dataframe Salaries.csv
library(rmarkdown)
paged_table(Salaries) #Paginador set de datos
Una vez cargado el dataframe se arrojan algunas medidas de tendencia central y de dispersiòn para la variable cuantitativa salario y se cálcula la frecuencia de los registros por género:
summary(Salaries[6]) #Tendencia central
## salary
## Min. : 57800
## 1st Qu.: 91000
## Median :107300
## Mean :113706
## 3rd Qu.:134185
## Max. :231545
dispersion=c(sd(salary),sd(salary)/mean(salary)) #Dispersiòn
names(dispersion)=c("Desviación","Coef.Var")
round(dispersion,2)
## Desviación Coef.Var
## 30289.04 0.27
#Se crea un factor para el género/sexo
sexo = factor(sex, levels=c("Female","Male"))
countbysex = table(sexo,useNA = "ifany") # Cantidad total de registros por género
count_t = sum(sex=='Female') + sum(sex=='Male') # Conteo total de registros
count_t # Conteo total de registros
## [1] 397
countbysex # Cantidad total de registros por género
## sexo
## Female Male
## 39 358
freq = round(prop.table(countbysex)*100,2) # frecuencia de los registros por género
freq
## sexo
## Female Male
## 9.82 90.18
Dado los datos anteriores, se tiene que de todo el set de datos, el 90.18% de los registros se categorizan por género masculino y el 9.82% restante por género femenino.
Bajo los porcentajes mencionados, como primer indicador se ve reflajado una desigualdad o disparidad fuerte de genero referente a la cantidad de hombres versus la mujeres que ejercen como profesores en sus diferentes rangos y disciplinas.
Conforme a esto, se realiza un análisis exploratorio de los datos contenidos en el dataset, para identificar ciertas variables en función del salario y también se crean otras variables como factores para segmentar los datos por el sexo, el rango y la disciplina. Los niveles de los factores corresponden a los requeridos por el ejercicio.
Otras variables se crean para calcular los promedios salariales por rango, disciplina y sexo.
Smin = min(salary) # Se almacena el salario mas bajo del set de datos
Smedia = mean(salary) # Se almacena el promedio de los salarios del set de datos
SMax = max(salary) # Se almacena el salario mas alto del set de datos
#Se crea un factor para el genero/sexo (Esta linea fue ejecutada en pasos anteriores)
#sexo = factor(sex, levels=c("Female","Male"))
salarybysex = tapply(salary, sexo, mean) #Se almacena en un arreglo el salario promedio por sexo
#Se crea un factor para el rango
Rango = factor(rank, levels=c("Prof","AssocProf","AsstProf"))
salarybyrank = tapply(salary, Rango, mean) #Se almacena en un arreglo el salario promedio por rango
#Se crea un factor para la disciplina
disciplina = factor(discipline, levels=c("A","B"))
salarybydiscipline = tapply(salary, disciplina, mean) #Se almacena en un arreglo el salario promedio por disciplina
#Se crea un factor para la disciplina y el sexo
sexo_disciplina = factor(paste(sexo,disciplina), levels=c("Female A", "Male A", "Female B", "Male B"))
salarybysex_dis = tapply(salary, sexo_disciplina, mean) #Se almacena en un arreglo el salario promedio por género y disciplina
#Se crea un factor para el rango y el sexo
sexo_rango = factor(paste(sexo,Rango), levels=c("Female Prof","Male Prof","Female AssocProf","Male AssocProf","Female AsstProf","Male AsstProf"))
salarybysex_rango = tapply(salary, sexo_rango, mean) #Se almacena en un arreglo el salario promedio por género y rango
#Cambiando los datos al formato de columnas para separar los salarios por género
sex_m = salary[sexo == "Male"]
sex_f = salary[sexo == "Female"]
El gráfico exploratorio inicial se basa en graficar los datos en un Histograma, Boxplot y un gráfico de dispersión de los salarios según el género (Femenino o Masculino):
#Preparando la ventana gráfica
Ma = matrix(c(1,1,1,1,2,2,2,2),nrow=2,byrow = T) # matriz con la ubicación de 2 gráficos
windows(height=10, width=10) # Nueva ventana gráfica
layout(Ma) # partición dela ventana gráfica según M
# Histogramas de frecuencia de salarios género M con boxplot - igualado el rango en el eje X.
hist(sex_m, freq=T,main="Salary by Sex: Men",xlab="Salary US($)",xlim=range(salary))
par(new = TRUE)
x_m = boxplot(sex_m,horizontal=TRUE,ylim=c(55000,240000),axes=FALSE,col = rgb(0, 0.8, 1, alpha = 0.5))
abline(v=salarybysex[2],lty=3,col="red",lwd=2)
stripchart(sex_m, vertical = FALSE, method = "jitter",pch = 20, add = TRUE)
legend("top", legend = "Salary mean Male", col="red",lty=3, lwd=2, cex=1.1)
# Histogramas de frecuencia de salarios género F con boxplot - igualado el rango en el eje X.
hist(sex_f, freq=T,main="Salary by Sex: Women",xlab="Salary US($)",xlim=range(salary))
par(new = TRUE)
x_w = boxplot(sex_f,horizontal=TRUE,ylim=c(55000,240000),axes=FALSE,col = rgb(0, 0.8, 1, alpha = 0.5))
abline(v=salarybysex[1],lty=4,col="red",lwd=2)
stripchart(sex_f, vertical = FALSE, method = "jitter",pch = 20, add = TRUE)
legend("top", legend = "Salary mean Female", col="red", lty=4, lwd=2, cex=1.1)
Conforme a las representaciones gráficas anteriormente ilustradas se puede identificar lo siguiente:
Con todas estas observaciones se consolidad la hipótesis que daría respuesta a la primer pregunta planteada en el plan de análisis, conforme a que además de existe una desigualdad de género frente a la cantidad de hombres y mujeres que ejercen como profesores, también se presenta una diferencia muy marcada en terminos salariales. Sin embargo, es conveniente profundizar en el análisis de tal forma que se revise también, si existe una difrencia salarial desagregando esta variable en función de los Rangos y Disciplinas
Para esto, se construyen 2 boxplot con su respectivo gráfico de dispersión unidimensional de la siguiente manera:
M = matrix(c(1,1,1,2,2,2,1,1,1,2,2,2), byrow=T , nrow=2) #matriz con disposición de los plots
layout(M)
#BOXPLOT DE SALARIO POR SEXO Y DISCIPLINA
y_y = boxplot(salary~sexo*disciplina,ylim=c(55000,240000),xaxt = "n",main="Salary by Sex and Discipline",xlab="",ylab="Salary (US$)",col= c("Pink","Snow3"))
stripchart(salary~sexo*disciplina, vertical = TRUE, method = "jitter",pch = 20, add = TRUE)
for (j in 1:4){segments(x0 = j - 0.4, y0 = salarybysex_dis[j], x1 = j + 0.4, y1 = salarybysex_dis[j], col = if (j==1 | j==3){"red"} else {"Blue"}, lwd = 2)}
for (j in 1:4){points(x= j, y= salarybysex_dis[j], col = if (j==1 | j==3){"red"} else {"Blue"}, pch = 20)}
tick <- seq_along(y_y$names)
axis(1, at = tick, labels = c("F_A", "M_A", "F_B", "M_B"))
legend("topleft", c("Salary mean by Female/Discipline", "Salary mean by Male/Discipline"), border="black", col=c("red","Blue"), lwd = 2, cex=1)
#BOXPLOT DE SALARIO POR SEXO Y RANGO
z = boxplot(salary~sexo*Rango,ylim=c(55000,240000),xaxt = "n",main="Salary by Sex and Rank",xlab="",ylab="Salary (US$)",col= c("Pink","Snow3"))
stripchart(salary~sexo*Rango, vertical = TRUE, method = "jitter",pch = 20, add = TRUE)
for (k in 1:6){segments(x0 = k - 0.4, y0 = salarybysex_rango[k], x1 = k + 0.4, y1 = salarybysex_rango[k], col = if (k==1 | k==3 | k==5){"red"} else {"Blue"}, lwd = 2)}
for (k in 1:6){points(x= k, y= salarybysex_rango[k], col = if (k==1 | k==3 | k==5){"red"} else {"Blue"}, pch = 20)}
tick <- seq_along(z$names)
axis(1, at = tick, labels = F)
text(tick+0.4, par("usr")[3], z$names, srt = 25, xpd = T, adj=1.3)
legend("topright", legend = c("Salary mean by Female/Rank", "Salary mean by Male/Rank"), border="black", col=c("red","Blue"), lwd = 2, cex=0.8)
Dado estos gráficos se evidencia lo siguiente:
# Función para agregar coeficientes de correlación
panel.cor <- function(x, y, digits = 2, prefix = "", cex.cor) {
usr <- par("usr")
on.exit(par(usr))
par(usr = c(0, 1, 0, 1))
Cor <- abs(cor(x, y)) # correlación con función abs
txt <- paste0(prefix, format(c(Cor, 0.123456789), digits = digits)[1])
if(missing(cex.cor)) {
cex.cor <- 0.4 / strwidth(txt)
}
text(0.5, 0.5, txt,
cex = 1 + cex.cor * Cor) # Escala el texto al nivel de correlación
}
Salaries_2 = select(Salaries,-rank,-discipline,-sex)
# Dibujamos la matriz de correlación
pairs(Salaries_2,upper.panel = panel.cor,lower.panel = panel.smooth) # Panel de correlación
Se procede a calcular el coeficiente de correlación de Pearson (r) por cada par de variables [Años desde haberse graduado del Doctorado y Años de servicio] y el coeficiente de cada variable respecto al salario, determinando así, cuáles de estas presentan una relación directa (r igual o cercano a 1), cuales tienen una relación inversa (r igual o cercano a -1) o cuales no presentan una relación alguna (r igual o cercano a 0) observando de esta manera que: