Cuando hacemos análisis de datos siempre tenemos que ser conscientes de tener un equilibrio entre que el análisis sea comprensible y la sofisticación de los análisis.
Necesitamos que los análisis sean comprensibles para que nuestros interlocutores no sólo entiendan el razonamiento que desarrollamos, no sólo para que sepan lo que hicimos, sino también para que actúen en consecuencia. Si no nos entienden, por más preciso y apropiado sea nuestro análisis, será difícil que tomen decisiones con esos datos.
Por otro lado, análisis sencillos si bien serán simples de entender, puede que no cuenten toda la verdad, o estemos perdiendo la oportunidad de actuar en una dirección más apropiada. Para eso necesitamos realizar análisis más sofisticados para generar información más valiosa.
De esto hablaba Ignacio Gimenez Losano en su charla sobre análisis estadísticos.
El promedio es una medida de resumen estadístico que está presente en nuestras vidas en todo momento: desde el promedio de nuestas notas escolares, el promedio de gol de Lionel Messi por temporada, la cantidad de vistas promedio que tiene un posteo de un o una influencer en redes sociales. Es un cálculo que atraviesa todos los ámbitos. Por eso es tan ampliamente utilizado, y cada vez que lo utilizamos en un ámbito de negocios, no es necesario explicar cómo se realiza el cálculo porque todo el mundo lo entiende.
El problema con los promedios es que es sensible a la cantidad de datos y a los valores extremos, y puede esconder algunos problemas que no se perciban únicamente con el resultado promedio.
Vamos a utilizar una muestra de datos de la Encuesta KIWI de Sueldos de RH desarrollada por el Club de R para RRHH y poniendo un foco en las respuestas de Argentina.
# Librerías -----
library(tidyverse)
library(funModeling)
# Carga de datos -----------
rh_ar <- read_delim("https://raw.githubusercontent.com/r4hr/kiwi2020/main/rh_ar.csv",
delim = ";") %>%
select(puesto, sueldo_bruto)
# Preparación de datos -------
options(scipen = 999)
# Extrae el valor de la columna sueldo bruto en los percentiles 5 y 95
p05 <- profiling_num(rh_ar)[1,6]
p95 <- profiling_num(rh_ar)[1,10]
rh_ar <- rh_ar %>%
filter(between(sueldo_bruto, # Filtra la columna sueldo_bruto entre:
p05, # Límite inferior
p95)) # Límite superior
# Reorganiza los puestos para mostrarlos jerárquicamente
rh_ar <- rh_ar %>%
mutate(puesto = factor(puesto,
levels = c("Administrativo", "Analista", "HRBP",
"Responsable", "Jefe", "Gerente")))Ahora, ya que tenemos nuestros datos limpios, realicemos un gráfico con el sueldo promedio por puesto:
rh_ar %>%
group_by(puesto) %>% # Agrupación de los cálculos
summarise(sueldo_promedio = mean(sueldo_bruto)) %>% # Calcula el sueldo promedio para cada puesto
ggplot(aes(x = puesto, y = sueldo_promedio)) + # Mapea las variables a los ejes
geom_col() + # Tipo de gráfico
geom_text(aes(label = round(sueldo_promedio)), # Agrega etiqueta con el sueldo promedio al gráfico
vjust = 1.2,
size = 3,
colour = "white")Miremos lo siguiente, cómo se distribuyen los sueldos por puesto con un boxplot.
ggplot(rh_ar, aes(x = sueldo_bruto, y = fct_rev(puesto))) +
geom_boxplot() +
ylab("")Este tipo de gráfico también se llama de caja y bigote. La caja es el rectángulo que vemos, en donde el límite inferior (a la izquierda) marca el 1° cuartil, y el límite superior marca el valor del 3° cuartil. La línea dentro de la caja representa a la mediana.
Prestemos atención a las cajas. En el caso de los Analistas la línea divide a la caja prácticamente a la mitad, dejando dos lados iguales. Por otro lado en el caso de los Gerentes la mitad de la izquierda de la caja es muy larga, y el lado de la derecha de la línea es muy corto.
Lo que esto quiere decir es que la simetría de los sueldos de los Analistas implica que el promedio es un valor representativo (aún con valores extremos reflejados con los puntos), mientras que en el caso de los gerentes, esta asimetría hace que el promedio no sea tan representativo.
Hagamos dos análisis: cuántas datos tenemos por puesto y hagamos un análisis de la variable sueldo_bruto.
rh_ar %>%
count(puesto)## # A tibble: 6 x 2
## puesto n
## <fct> <int>
## 1 Administrativo 32
## 2 Analista 201
## 3 HRBP 50
## 4 Responsable 121
## 5 Jefe 54
## 6 Gerente 21
summary(rh_ar$sueldo_bruto)## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 37000 55000 72000 78300 93000 160000
Dos datos de interés que surgen de estos análisis. En primer lugar podemos confiar en que el sueldo promedio de los analistas porque tenemos 201 respuestas. En cambio, sólo tenemos 21 respuestas de los Gerentes, y con resultados muy dispares, lo cual es una de las explicaciones sobre el largo y la asimetría de la caja que habíamos visto anteriormente.
Otro dato interesante es el valor máximo y mínimo de la variable y la diferencia que hay entre ambas que es muy amplia, y en 479 respuestas necesitamos alguna medida que refleje la dispersión de los datos, o sea qué tan lejos o cerca están las observaciones entre sí.
El desvío estándar es una métrica que indica justamente qué tan cerca o qué tan lejos están los datos sobre su promedio. Una de las ventajas del desvío estándar es que su valor está en la misma unidad de medida que su variable. O sea que si estamos midiendo la altura de las personas, el resultado va a estar en metros o centímetros; y en este caso que estamos calculando sueldos en pesos argentinos (AR$), el resultado del desvío estándar también estará en la misma moneda.
Hagamos el cálculo del promedio y del desvío estándar:
desvio <- rh_ar %>%
group_by(puesto) %>% # Agrupación de los cálculos
summarise(sueldo_promedio = mean(sueldo_bruto), # Calculo el sueldo promedio
sueldo_desvio = sd(sueldo_bruto)) # Calculo el desvío estándar de los sueldos
# Veo los resultados.
desvio## # A tibble: 6 x 3
## puesto sueldo_promedio sueldo_desvio
## <fct> <dbl> <dbl>
## 1 Administrativo 52218. 12480.
## 2 Analista 67740. 21367.
## 3 HRBP 90064. 27196.
## 4 Responsable 79626. 27439.
## 5 Jefe 101724. 30736.
## 6 Gerente 123236. 31826.
Los resultadosde la tabla implican que para un Analista de RH el sueldo promedio es de AR$ 67740 y su desvío estándar es de ±AR$ 21367. Esto nos da una idea de qué tan dispersos los valores respecto del promedio.
¿Cómo queda el sueldo promedio si le sumo el desvío y le resto el desvío?
desvio <- rh_ar %>%
group_by(puesto) %>% # Agrupación de los cálculos
summarise(sueldo_promedio = mean(sueldo_bruto), # Calculo el sueldo promedio
sueldo_desvio = sd(sueldo_bruto)) %>% # Calculo el desvío estándar de los sueldos
mutate(sueldo_menos_desvio = sueldo_promedio - sueldo_desvio,
sueldo_mas_desvio = sueldo_promedio + sueldo_desvio)
# Veo los resultados.
desvio## # A tibble: 6 x 5
## puesto sueldo_promedio sueldo_desvio sueldo_menos_desv~ sueldo_mas_desv~
## <fct> <dbl> <dbl> <dbl> <dbl>
## 1 Administrat~ 52218. 12480. 39738. 64697.
## 2 Analista 67740. 21367. 46373. 89107.
## 3 HRBP 90064. 27196. 62867. 117260.
## 4 Responsable 79626. 27439. 52187. 107065.
## 5 Jefe 101724. 30736. 70988. 132459.
## 6 Gerente 123236. 31826. 91410. 155061.
Otra métrica menos difundida, pero muy útil cuando hacemos muestreos de datos es el error estándar, que “(… )No es un índice de variabilidad, aunque depende de ella, sino una medida del error que se comete al tomar la media calculada en una muestra como estimación de la media de la población”1.
Esto lo que quiere decir es que al tomar una muestra de los datos y extrapolar los resultados sobre la población hay un error que considerar, porque no es lo mismo hablar del promedio de una parte de los datos, que hablar sobre el promedio de todo el universo de los datos.
La fórmula de cálculo es la siguiente:
Donde:
σ es la desviación estándar de la población
n es el tamaño (número de observaciones) de la muestra.
¿Cuándo usamos el desvío estándar y cuándo el error estándar? Si tenemos todos los datos de los empleados, podemos usar el desvío estándar. Si sólo tenemos una muestra de los datos (por ejemplo haciendo una encuesta donde no participaron todos los empleados) entonces conviene usar el error estándar.
Los datos que estamos utilizando surgen de una encuesta de mercado. Nos encantaría que hubieran participado todos los profesionales de RRHH del país pero no es realista, así que necesitamos poder visualizar el error estándar en el gráfico de los sueldos promedios.
Una forma rápida de incorporar es incorporar de una manera más ágil los cálculos anteriores en una sola función, utilizando dentro de summarise() una función auxiliar llamada mean_se() que calcula en un sólo paso el promedio, y el resultado del promedio menos un error estándar, y del promedio más un error estándar.
rh <- rh_ar %>%
group_by(puesto) %>% # Agrupación de los cálculos
summarise(sueldo_promedio = list(mean_se(sueldo_bruto))) %>% # Calculo el sueldo promedio
unnest() # Muestra el resultado como un dataframe
# Veo los resultados.
rh## # A tibble: 6 x 4
## puesto y ymin ymax
## <fct> <dbl> <dbl> <dbl>
## 1 Administrativo 52218. 50011. 54424.
## 2 Analista 67740. 66233. 69247.
## 3 HRBP 90064. 86217. 93910.
## 4 Responsable 79626. 77131. 82120.
## 5 Jefe 101724. 97541. 105906.
## 6 Gerente 123236. 116291. 130181.
Los resultados los interpretamos de la siguiente manera:
y es el sueldo promedio de cada puesto
ymin representa al sueldo promedio menos un error estándar.
ymax representa al sueldo promedio más un error estándar.
Y ahora, podemos hacer el gráfico:
ggplot(rh, aes(x = puesto, y = y)) +
geom_col() +
geom_errorbar(aes(ymin = ymin,ymax = ymax), position = "dodge", color = "#75838F")El gráfico se interpreta que en los casos donde las barras de error se alejan más del promedio, mayor es el error de la muestra de datos, y por ende el promedio es menos representantivo del sueldo de cada posición.
Lo anterior implica que en el caso de los Gerentes, el error estándar es más amplio que en el caso de los Analistas. El sueldo promedio de los Jefes y HRBP también tienen un mayor error estándar que los Analistas pero menor que los Gerentes.
Este tutorial es un complemento de la clase de “Visualización de datos con ggplot2” del curso “Introducción a R para RRHH” que dictamos en Data 4HR. Para más información entra en los links del curso o de la página, o bien escribinos a info@d4hr.com.
Abraira, V. “Desviación estándar y error estándar”, Notas Estadísticas, Unidad de Bioestadística Clínica. Hospital Ramón y Cajal. Madrid.↩︎