1. Instrucciones

Este documento contiene las instrucciones y enunciados asociados a la Prueba Especial Programada 2 (PEP2) del curso de Estadística Computacional modalidad diurna. Con respecto a ello:

  • La prueba está pensada para ser trabajada por un equipo compuesto por dos estudiantes.
  • La prueba tiene un total de 100 puntos, los que serán llevados a una escala de 1 a 7.
  • Se dispone de todo el bloque de clases para realizar la evaluación. Esta deberá ser desarrollada en R.
  • Las respuestas deben ser escritas empleando RMarkdown y ser enviadas al profesor por correo electrónico al finalizar el tiempo de evaluación.
  • Puede usar apuntes y material disponible en Moodle como apoyo. Si utiliza ChatGTP, incluya su referencia en el documento de entrega.
  • Cualquier sospecha de falta ética será castigada directamente con nota 1.0 en la evaluación.

2. Actividad

Se le ha solicitado como equipo estudiar las remuneraciones del “personal a contrata” de la Universidad de Santiago de Chile. Los(as) funcionarios(as) a contrata son aquellos(as) que trabajan bajo una modalidad de contrato transitorio y forman parte de la dotación formal de una institución (Recursos Humanos 2016). Para llevar a cabo el estudio, se le ha proporcionado los datos de remuneración correspondientes al año 2020, los cuales han sido descargados desde el Portal de Transparencia de la universidad.

Como equipo han decidido abordar esta tarea mediante el método estadístico, el cuál contempla las siguientes etapas: (1) definición del problema, (2) recolección de datos, (3) organización y clasificación de los datos; (4) análisis descriptivo; (5) análisis inferencial; (6) interpretación de resultados y (7) toma de decisiones. Dado que la primera etapa ya está definida, se procede a realizar lo siguiente:

  1. Recolección de datos (10 puntos). Descargar los datos y combinar los archivos en un único csv. Definir y aplicar una estrategia para tratar los datos con valores faltantes, en caso de haber. Finalmente, guardar el archivo único en formato csv.

  2. Organización y clasificación de los datos (10 puntos). Utilizando el archivo csv único creado, generar una tabla que describa cualitativamente cada una de las variables, clasificándolas desde una perspectiva estadística.

  3. Análisis descriptivo (25 puntos). Estudiar la distribución de frecuencia de las variables “Estamento”, “Unidad”, “Grado” y “Bruto Haber” (Remuneración). Utilizar gráficos o tablas para las variables cualitativas e histogramas para las variables cuantitativas. Si hay muchas categorías para las variables cualitativas, limítese a las 10 más frecuentes. En el caso de la remuneración, incluir el estudio de las medidas estadísticas.

  4. Análisis inferencial (25 puntos). En este punto, concéntrate en dos aspectos:

    4.1. La Fundación Sol ha señalado en su estudio publicado el 2021 que sólo el 2% de la población chile gana más de $2.5 millones de pesos (Durán and Kremerman 2021). ¿La remuneración media o mediana de los académicos a contrata de la USACH está dentro de este 2% poblacional?

    4.2. ¿Cómo responde un modelo de regresión lineal simple en términos de calidad en relación a estas dos variables: grado y remuneración? Existen relaciones directas entre el grado de los funcionarios y su remuneración.

  5. Análisis de resultados (20 puntos). Analizar los resultados obtenidos en las etapas 3 y 4 desde el punto de vista de la problemática.

  6. Toma de decisiones (10 puntos). Si fuese parte del equipo gestor de recursos humanos de la universidad, ¿qué decisiones tomaría con base a los resultados obtenidos?

3. Resolución

3.1. Recolección de datos

La primera actividad consiste en reunir todos los documentos en un archivo único. Dado que los datos en los archivos tienen los mismos nombres de columna, esto puede lograrse fácilmente utilizando un for simple o alguna de las funciones vectoriales como sapply() o lapply(), entre otras opciones disponibles.

# Lista los archivos en el directorio
archivos = list.files("DATOS/PROCESADOS/")
datos = NULL
# Cargar todos los archivos en un único csv
for (a in 1:length(archivos))
{
  nombre_archivo = paste("DATOS/PROCESADOS/",archivos[a],sep="")
  datos = rbind(datos,read.csv(nombre_archivo,header = T))
}

write.csv(datos,"datos_consolidados.csv",sep=";",row.names = F)

3.2. Clasificación de los datos

Las variables a considerar en esta actividad y disponibles en el conjunto de datos son las siguientes:

Variable Descripción Tipo_de_variable
Estamento Categoría o nivel de empleo del personal Cualitativa nominal-politómica
Grado Posición que ocupa un(a) funcionario(a) público(a) en una institución gubernamental. Cualitativa ordinal-politómica
Título o oficio Nivel de calificación o formación del funcionario o funcionaria Cualitativa nominal-politómica
Función o cargo Puesto o cargo ocupado por el funcionario o funcionaria Cualitativa nominal-politómica
Unidad Unidad en que trabaja el funcionario o funcionaria Cualitativa nominal-politómica
Bruto a haber Remuneración total en pesos chilenos del funcionario o funcionaria Cuantitativa discreta de intervalo

3.3. Análisis descriptivo

a) Remuneraciones

El objetivo de esta investigación es analizar las remuneraciones del personal, una variable cuantitativa que puede ser caracterizada mediante la construcción de un histograma o su distribución de densidad. Estos métodos permitirán visualizar y comprender mejor la distribución de los salarios en el conjunto de datos estudiado.

library("ggplot2")
library("plotly")
library("scales") #Arregla escalas
library("psych") 
library("gridExtra")

#Genero gráfico
num_bins = 400000 #Quiebres
g1 = ggplot(datos, aes(x = BrutoHaber)) +
  geom_histogram(binwidth = num_bins, fill = "dodgerblue3",color="dodgerblue4",alpha=0.6) +
  labs(title = "Histograma", x = "Remuneración en Millones de pesos", y = "Frecuencia")
g1 = g1+theme_bw()
g1 = g1 + scale_x_continuous(label = scales::comma) #Arregla la notación del eje x

g2 = ggplot(datos, aes(x = BrutoHaber)) +
  geom_density(fill = "dodgerblue3", color = "dodgerblue4", alpha = 0.6) +
  labs(title = "Distribución de probabilidad", x = "Remuneración en Millones de Pesos", y = "Densidad") +
  theme_bw()
g2 = g2 + scale_x_continuous(label = scales::comma) #Arregla la notación del eje x

grid.arrange(g1, g2, ncol = 2, widths = c(0.5, 0.5))

Las medidas estadísticas de las remuneraciones incluyen centralidad, dispersión, posición y forma, y son las siguientes:

# Crear la lista de definiciones
tabla_metricas = list(
  Metricas = c("n", "mean", "sd", "median", "trimmed", "mad", "min", "max", "range", "skew", "kurtosis", 
               "se", "IRQ", "Q0.25", "Q0.50", "Q0.75"),
  Descripcion = c("número de muestras", "media aritmética", "desviación estándar", "mediana", 
                  "media aritmética calculada sin el 10% de los valores de los extremos superiores e inferiores", 
                  "desviación mediana absoluta", "valor mínimo", "valor máximo", "valor máximo - valor mínimo",
                  "simetría", "curtosis", "error estándar", "rango intercuartil","percentil 25 (Primer cuartil)",
                  "percentil 50 (Segundo cuartil o mediana)", "percentil 75 (Tercer cuartil)")
)

metricas=describe(datos$BrutoHaber,IQR=T,quant=c(.25,.50,.75)) #Cálculo e métricas
metricas = unlist(metricas)
metricas = metricas[-1]
tabla_metricas$Valores = round(metricas,1)
tabla_metricas = data.frame(tabla_metricas)
row.names(tabla_metricas) = NULL
kable(tabla_metricas, table.attr = "style='width:100%;'", booktabs = TRUE,format.args = list(big.mark = ","),
      lines = "full") %>%  kable_styling(font_size = 11)
Metricas Descripcion Valores
n número de muestras 5,987.0
mean media aritmética 848,636.9
sd desviación estándar 845,191.1
median mediana 587,764.0
trimmed media aritmética calculada sin el 10% de los valores de los extremos superiores e inferiores 683,575.0
mad desviación mediana absoluta 502,662.2
min valor mínimo 48.0
max valor máximo 6,450,387.0
range valor máximo - valor mínimo 6,450,339.0
skew simetría 1.9
kurtosis curtosis 3.6
se error estándar 10,923.2
IRQ rango intercuartil 780,606.5
Q0.25 percentil 25 (Primer cuartil) 261,026.0
Q0.50 percentil 50 (Segundo cuartil o mediana) 587,764.0
Q0.75 percentil 75 (Tercer cuartil) 1,041,632.5

b) Estamento

La distribución de frecuencias del estamento de los(as) funcionarios(as) es la siguiente:

library("dplyr")

estamento = datos %>% count(Estamento)
estamento = estamento[order(estamento$n,decreasing = T),]
estamento=data.frame(estamento)

#Creación de gráfico
g3 = ggplot(estamento, aes(x = reorder(Estamento, n), y = n))
g3 = g3 + geom_bar(stat = "identity", fill = "dodgerblue3",alpha=0.5,color="dodgerblue4") 
g3 = g3 + labs(title = "Frecuencia de funcionarios(as) por estamento", x = "Estamento", y = "Frecuencia")
g3 = g3 + theme_minimal()
g3 = g3 + theme(axis.text = element_text(size = 8), axis.title.x = element_text(size = 8), 
              axis.title.y = element_text(size = 10))
g3 = g3 + coord_flip()

plot(g3)

c) Unidad

La distribución de frecuencias de las unidades de desempeño de los(as) funcionarios(as) es la siguiente, mostrando las 10 más frecuentes:

unidad = datos %>% count(Unidad) %>% top_n(10)
unidad = unidad[order(unidad$n,decreasing = T),]
unidad = data.frame(unidad)

#Creación de gráfico
g = ggplot(unidad, aes(x = reorder(Unidad, n), y = n))
g = g + geom_bar(stat = "identity", fill = "dodgerblue3",alpha=0.5,color="dodgerblue4") 
g = g + labs(title = "Frecuencia de funcionarios(as) por unidad (top 10)", x = "Unidad", y = "Frecuencia")
g = g + theme_minimal()
g = g + theme(axis.text = element_text(size = 8), axis.title.x = element_text(size = 8), 
              axis.title.y = element_text(size = 10))
g = g + coord_flip()

plot(g)

d) Grado

La distribución de frecuencias del grado de los(as) funcionarios(as) es la siguiente, mostrando las 10 más frecuentes:

grado = datos %>% count(Grado) %>% top_n(10)
grado = grado[order(grado$n,decreasing = T),]
grado = data.frame(grado)

#Creación de gráfico
g = ggplot(grado, aes(x = reorder(Grado, n), y = n))
g = g + geom_bar(stat = "identity", fill = "dodgerblue3",alpha=0.5,color="dodgerblue4") 
g = g + labs(title = "Frecuencia de funcionarios(as) por grado (top 10)", x = "Grado", y = "Frecuencia")
g = g + theme_minimal()
g = g + theme(axis.text = element_text(size = 8), axis.title.x = element_text(size = 8), 
              axis.title.y = element_text(size = 10))
g = g + coord_flip()

plot(g)

3.4. Análisis inferencial

Parte 1

Para determinar si la remuneración media o mediana de los académicos a contrata de la USACH se encuentra dentro del 2% de la población que gana más de $2.5 millones de pesos, es necesario realizar un análisis estadístico inferencial. Antes de aplicar una prueba de contraste de hipótesis para una muestra, es fundamental examinar la normalidad de los datos para una elección adecuada de la prueba: paramétrica o no paramétrica.

library("nortest")
datos_tmp = datos[which(datos$Estamento=="ACADEMICOS"),]

#Aplicación de prueba Kolmogorov Smirnov
lillie.test(datos_tmp$BrutoHaber)$p.value
## [1] 1.799892e-59

El resultado de la prueba de normalidad, indica que los datos no siguen una distribución normal, por lo que se utilizará una prueba no paramétrica, en este caso, la prueba de Wilcoxon de una muestra.

#Prueba estadística
prueba = wilcox.test(datos_tmp$BrutoHaber, mu = 2500000,alternative = "greater",exact = F)
prueba
## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  datos_tmp$BrutoHaber
## V = 122206, p-value < 2.2e-16
## alternative hypothesis: true location is greater than 2500000

Para complementar el posterior análisis, se calcularán las medidas o métricas estadísticas respectivas:

# Crear la lista de definiciones
tabla_metricas = list(
  Metricas = c("n", "mean", "sd", "median", "trimmed", "mad", "min", "max", "range", "skew", "kurtosis", 
               "se", "IRQ", "Q0.25", "Q0.50", "Q0.75"),
  Descripcion = c("número de muestras", "media aritmética", "desviación estándar", "mediana", 
                  "media aritmética calculada sin el 10% de los valores de los extremos superiores e inferiores", 
                  "desviación mediana absoluta", "valor mínimo", "valor máximo", "valor máximo - valor mínimo",
                  "simetría", "curtosis", "error estándar", "rango intercuartil","percentil 25 (Primer cuartil)",
                  "percentil 50 (Segundo cuartil o mediana)", "percentil 75 (Tercer cuartil)")
)

metricas=describe(datos_tmp$BrutoHaber,IQR=T,quant=c(.25,.50,.75)) #Cálculo e métricas
metricas = unlist(metricas)
metricas = metricas[-1]
tabla_metricas$Valores = round(metricas,1)
tabla_metricas = data.frame(tabla_metricas)
row.names(tabla_metricas) = NULL
kable(tabla_metricas, table.attr = "style='width:100%;'", booktabs = TRUE,format.args = list(big.mark = ","),
      lines = "full") %>%  kable_styling(font_size = 11)
Metricas Descripcion Valores
n número de muestras 575.0
mean media aritmética 2,804,495.4
sd desviación estándar 911,114.5
median mediana 2,961,751.0
trimmed media aritmética calculada sin el 10% de los valores de los extremos superiores e inferiores 2,859,547.7
mad desviación mediana absoluta 556,278.9
min valor mínimo 400,692.0
max valor máximo 6,450,387.0
range valor máximo - valor mínimo 6,049,695.0
skew simetría -0.5
kurtosis curtosis 0.9
se error estándar 37,996.1
IRQ rango intercuartil 662,822.0
Q0.25 percentil 25 (Primer cuartil) 2,550,387.0
Q0.50 percentil 50 (Segundo cuartil o mediana) 2,961,751.0
Q0.75 percentil 75 (Tercer cuartil) 3,213,209.0

Parte 2

Para investigar la relación entre el grado y la remuneración, se construirá un modelo de regresión lineal simple. Sin embargo, antes de proceder, es necesario excluir a los(as) funcionarios(as) que no tienen un grado asociado a su remuneración.

datos_tmp = datos[which(datos$Grado!="S/G"),]

#crea modelo de regresión
datos$Grado=as.numeric(datos$Grado)
regresion = lm(BrutoHaber~Grado,data = datos)
#crea gráfico
g = ggplot(datos,aes(x=Grado,y=BrutoHaber))
g = g + geom_point(aes(x=Grado,y=BrutoHaber),datos,color="dodgerblue4") 
g = g + theme_bw() + ylab("Remuneración de funcionarios en CL$M")
g = g + xlab("Grado de contratación")
g = g + theme(axis.text = element_text(size = 10), axis.title.x = element_text(size = 10), axis.title.y = element_text(size = 12))
g = g + geom_smooth(method = "lm",level = 0.95, color = "black", fill = "dodgerblue3",se = TRUE)
g = g = g + scale_y_continuous(label = scales::comma) #Arregla la notación del eje y

#Grafico
plot(g)

Las características del modelo de regresión son las siguientes:

summary(regresion)
## 
## Call:
## lm(formula = BrutoHaber ~ Grado, data = datos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2186389  -236546   -51117   265985  4128088 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  3170670      25793  122.93   <2e-16 ***
## Grado        -141395       1939  -72.91   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 542700 on 2596 degrees of freedom
##   (3389 observations deleted due to missingness)
## Multiple R-squared:  0.6719, Adjusted R-squared:  0.6718 
## F-statistic:  5316 on 1 and 2596 DF,  p-value: < 2.2e-16

3.5 Análisis de resultados

El estudio descriptivo muestra que las remuneraciones de los(as) funcionarios(as) centran su distribución bajo los $2,000,000 de pesos (Asimétrica positiva - 1.9), centrada en la media (Kurtosis positiva - 3). Ésta última es $848,636, y su mediana es de $587,764, lo que sugiere dispersión de remuneraciones (desviación estándar de $845,191). Existe un 25% de los(as) funcionarios(as) que gana más de $1,041,632, con un máximo de $6,450,387. Por otro lado, la remuneración mínima es de $48, esto se puede deber a una devolución por reajuste o el remanente de un(a) funcionario(a) al que se le ha descontado parte de su remuneración e incluso puede ser un error de registro.

Con relación a las otras variables, la mayoría de los(as) funcionarios(as) pertenecen al estamento de profesores por horas, representando la mayor proporción. Luego, en una proporción aproximadamente tres veces menor, encontramos a los profesionales, administrativos(as) y académicos(as). En menor cantidad, se observan funcionarios(as) que son técnicos(as), auxiliares y personal del área clínica. En cuanto a la distribución de unidades, se observa una distribución bastante pareja en general. Sin embargo, algunos departamentos se destacan por su mayor representación. Los más predominantes son el Departamento de Matemática y Ciencia de la Computación, el Departamento de Lingüística y Literatura, y el Departamento de Tecnologías Industriales. Es interesante notar que el Departamento de Ingeniería Industrial, el primer departamento del área de ingeniería, se encuentra en la sexta posición en términos de presencia de funcionarios(as). Por último, la mayoría de los(as) funcionarios(as) que trabajan bajo modalidad de profesor(a) por hora no cuentan con grado de remuneración. Los grados más frecuentes son el 6, 17, 8 y 10.

En cuánto a las preguntas planteadas en el análisis inferencial, los datos indican que los(as) académicos(as) de la universidad reciben como media una remuneración bruta de $2,804,495 con una mediana de $2,961,751. El 75% de los(as) académicos(as) recibe más de $2,550,387 y el 25% más de $3,213,209. con un máximo de $6,049,695. Tal como podría parecer, la prueba de hipótesis señala con un 95% de confianza (\(p<0.05\)) que la mediana de la remuneración de los(as) académicos(as) es superior a la del 2% de la población chilena ($2,500,000), perteneciendo estos(as) funcionarios(as) al 2% más rico(a) del país.

Por último, en relación a la asociación entre el grado y las remuneraciones, se observa una relación inversamente proporcional. Aunque es factible desarrollar un modelo de regresión con coeficientes significativos, la remuneración solo puede explicarse en un 67% por el grado \((R^2 \approx 0.67)\) y los residuos del modelo alcanzan valores de hasta $4,000,000. Esta discrepancia puede deberse a asignaciones especiales, como “asignación de responsabilidad”, “incentivo al paper” u otras compensaciones adicionales en la remuneración.

3.6 Toma de decisiones

Esta sección fue creada con apoyo de ChatGPT3.

Como Gestor de Remuneraciones, utilizaría estos resultados anteriores para identificar áreas de mejora en las políticas de remuneración, garantizar la equidad salarial y tomar decisiones informadas para mejorar la satisfacción y bienestar de los(as) funcionarios(as) en la universidad. Además, sería relevante mantener un seguimiento continuo y actualizado de las remuneraciones para adaptarse a cambios en el mercado laboral y asegurar la atracción y retención de talento en la institución. En particular, tomaría las siguientes decisiones basadas en los hallazgos del análisis:

  1. Equidad salarial. Observar que la mayoría de los(as) funcionarios(as) reciben remuneraciones centradas bajo los $2,000,000 de pesos y con una mediana de $587,764, podría indicar que existe una brecha salarial entre los niveles salariales. Sería importante realizar una revisión de la equidad salarial para asegurarse de que las remuneraciones sean justas y acordes con las responsabilidades y funciones de cada puesto.

  2. Distribución de unidades. Dado que se destacan algunos departamentos con mayor representación de funcionarios(as), sería necesario revisar si la distribución de recursos humanos es adecuada y si hay algún departamento que requiere una mayor atención en términos de dotación de personal.

  3. Revisión de modalidad de contratación. La predominancia de profesores(as) por horas y la ausencia de grados de remuneración en algunos casos sugiere la necesidad de revisar las modalidades de contratación y la estandarización de los salarios para diferentes cargos y funciones. Esto garantizará una mayor transparencia y equidad en las remuneraciones.

  4. Evaluación de compensaciones adicionales. Dado que los residuos del modelo de regresión alcanzan valores de hasta $4,000,000, sería fundamental revisar y analizar las asignaciones especiales y compensaciones adicionales, como “asignación de responsabilidad” e “incentivo al paper”. Esto permitirá asegurar que dichas asignaciones estén justificadas y no generen distorsiones en las remuneraciones.

  5. Política de atracción y retención de talento. Con el análisis inferencial que sugiere que los(as) académicos(as) de la universidad pertenecen al 2% más rico de la población chilena, se debe asegurar una política de remuneración competitiva para atraer y retener a profesionales altamente calificados. Se deben revisar los salarios y beneficios ofrecidos para asegurar que estén alineados con el mercado laboral y las expectativas de los(as) funcionarios(as).

Referencias

Durán, Gonzalo, and Marco Kremerman. 2021. “Los Verdaderos Sueldos de Chile.” 1. Santiago: Fundación Sol.
Recursos Humanos, Universidad de Santiago de Chile" "Departamento de. 2016. Guia práctica de procesos de contratación y remuneraciones de Recursos Humanos.” Guía de Procesos 1: 1–13.