Queremos agradecer a los más de 4000 participantes que formaron parte de esta nueva encuesta de sueldos!

Les dejamos este Google Spreadsheet para que puedan ver y analizar los resultados (pueden hacer una copia o bajar las hojas en formato csv). Pedimos disculpas por un problema en Google Forms que no pudimos solucionar, relacionado con las tecnologías utilizadas por puesto. Para la próxima encuesta vamos a elegir una plataforma más robusta y acorde para la cantidad de preguntas y volumen de respuestas que estamos obteniendo.

Esperamos con ansias los análisis de la comunidad!

 

Como siempre, algunas frases que nos regalaron los encuestados:

Apesta

asco

Cubro el Rol de Director, sin embargo mi sueldo es el de un auxiliar.

Dejen de ratonear en todo, jefes.

Empresa de casi 1000 empleados, Agraria, casi mi millones de facturción al año (dólares) y no nos dan una puta canasta de navidad …. Eso sí, para descargar las 45 cajas de vinos de regalo para los clientes … todos los empleados a descargar el camión.

Es inhumano

Es muy triste haber estudiado y perfeccionado mis skills en mi carrera para que me roben así.

Explotan Juniors

Hago el trabajo de 3 o 4 personas

La gente de limpieza gana el doble que yo

 

Y no olviden calificar a sus empresas en www.openqube.io !

200 containers

Terminamos el año con una nueva encuesta salarial para todo Latinoamérica, con nuevas preguntas en base a las sugerencias que tuvimos en la edición anterior. Al finalizar la encuesta vamos a publicar el csv para que la comunidad pueda analizar los resultados.

Los invitamos a responder y compartir con sus conocidos !

No olviden que también pueden calificar empresas en openqube.io

Analizando los sueldos de la industria del software en Argentina (Parte 3)

TL;DR

hay una diferencia significativa entre la proporción de hombres y mujeres en el decil mejor pago (top 10%) de la industria del software en Argentina.

En el post anterior concluimos que efectivamente había una diferencia en el salario medio dependiendo del género. En este tercer análisis intentaremos rechazar la siguiente hipótesis:

Los cargos con sueldos más altos son ocupados equitativamente por hombres y mujeres.

Para responder esta pregunta debemos primero obtener algunos datos de nuestro dataset:

  • Cuál es el decil más alto?
  • Qué proporción de hombres y mujeres tienen un salario mayor o igual a ese valor?
  • Podemos atribuir la diferencia (de haberla) entre proporciones al azar?

Cuál es el decil más alto (de nuestra muestra)?

Podemos usar R para calcular el decil más alto de nuestra muestra:

> quantile(clean$Income, 0.9)
     90%
41428.57

Podemos ver entonces que el decil más alto para sueldos de software en Argentina es entonces de $41428.57 brutos.

Qué proporción de hombres y mujeres tienen un salario mayor o igual a ese valor?

Para responder esta pregunta podemos usar la función table

> table(clean$Gender, clean$Income >= 41428.57)
FALSE TRUE
F   276   22
M  3256  375

Como vemos, la cantidad de mujeres que pertenecen al último decil es 22 de 276 o sea un 7.9% en el caso de los hombres este número es 375 de 3256, un 11.5%.

La diferencia de porcentaje es entonces del 3.6% aproximadamente.

Podemos atribuir la diferencia entre proporciones al azar?

Como vimos, hay una diferencia entre el porcentaje de hombres y mujeres en el decil más alto de salarios. Hay dos hipótesis que pueden explicar esta diferencia:

  • La diferencia entre proporciones se debe al azar de la muestra. (Hipótesis Nula)
  • La diferencia entre proporciones es muy grande como para atribuirla al azar, la diferencia es estadísticamente significativa. (Hipótesis Alternativa)

Para la diferencia de proporciones podemos aplicar el teorema central del límite: la diferencia entre dos proporciones de una muestra (p^¹ -p^²) tiene una distribución normal con centro en la verdadera diferencia entre proporciones (p1-p2), con una desviación estándar conocida (la fórmula es algo larga, la vamos a usar más adelante para evaluar nuestra hipótesis). Para más información sobre este tema en particular, ver aquí.

Resumiendo, tenemos una distribución normal con los siguientes valores:

Media = 0  # p1 — p2 para la hipótesis nula es cero
Desviación estándar = 
sqrt((p1 * (1 - p1) / n1) + (p2 * (1 - p2) / n2))
# siendo:
# p1 = porcentaje de hombres en el último decil
# n1 = total de hombres
# p2 = porcentaje de mujeres en el último decil
# n2 = total de mujeres
# por lo tanto
Desviación estándar = 0.016

Pasemos a graficar nuestra distribución normal:

Según la regla de 68–95–99.7 casi la totalidad de las muestras de una distribución normal caen en -/+ 3 desviaciones estándar (0.016).

Podemos ahora graficar sobre esta distribución el 3.6% de diferencia que observamos en nuestra muestra:

De ser válida la hipótesis nula, la probabilidad de obtener esta diferencia es del 1.4%, si tomamos un nivel de significación del 5% (el utilizado comúnmente en ciencia) podemos descartar la hipótesis nula.

Conclusión

Usando el teorema central del límite para las proporciones determinamos que hay una diferencia estadísticamente significativa entre la proporción de hombres y mujeres en el decil mejor pago de la industria del software en Argentina.


Muchas gracias a Sebastián Waisbrot, Nadia Kazlauskas, Pablo Astigarraga, Sebastián Friseb y Mauro García Aurelio que revisaron el draft.

En el primer post hicimos un análisis exploratorio general de los sueldos, en este vamos a realizar una inferencia estadística. Otra vez, todo el código se encuentra disponible acá.

Hipótesis

Primero formulamos una hipótesis:

Los salarios varían significativamente según el género

Para probar nuestra hipótesis, intentaremos refutar la hipótesis nula, que simplemente sería lo contrario (los salarios no varían según el género)

Primer problema: los tamaños de las muestras

Recordemos la distribución de salarios discriminada por género:

El problema en este caso es la diferencia entre participantes de la encuesta varones y mujeres. Usemos un gráfico de barras para hacerlo más evidente:

Hay 298 mujeres y 3.631 hombres en nuestro dataset. Si consideramos a la muestra como representativa de la población, habría aproximadamente una mujer cada 10 hombres, o un 7.5% del total de trabajadores de software.

Con esta limitación en mente, vamos a tratar de poner a prueba nuestra hipótesis utilizando 3 estrategias alternativas.

Usar muestras de tamaño comparable

Sería muy bueno tener misma cantidad de mujeres que de hombres. Una alternativa sería salir a encuestar más mujeres. La otra (más fácil) es “recortar” la muestra de varones.

Para esta última tomamos una muestra aleatoria de 298 varones de nuestros datos y comparamos las dos. Vamos a usar una función del histograma de ggplot llamada “dodge” para que no apile las barras sino que las ponga una al lado de la otra:

Si bien parece haber mayor cantidad de mujeres en los deciles más bajos, a simple vista las distribuciones no muestran una diferencia importante que nos sugiera descartar la hipótesis nula.

Comparar las áreas de las distribuciones

Otra forma de salvar el problema de las cantidades es utilizar un gráfico de densidad de área. Este tipo de gráfico no compara unidades absolutas sino que estima porcentaje de muestras bajo la curva (para más información, la técnica que usa ggplot para esto se llama Kernel Density Estimation o KDE).

Probemos la técnica generando una distribución normal aleatoria, usando la función rnorm:

Vemos una campana de Gauss casi perfecta, en este caso con una media de 5 y una desviación estándar de 2. Nótese que no importa la cantidad de elementos, el eje Y no presenta cantidades sino porcentajes. En este caso el gráfico se hizo con 5.000 elementos pero uno de 50.000 mostraría un área similar.

Grafiquemos las curvas estimadas de densidad para varones y mujeres, usando esta vez la totalidad de los datos:

Las curvas de densidad son similares. Este gráfico tampoco hace evidente una diferencia entre las medias. Vamos al tercer paso.

ANOVA

Para finalizar vamos a usar una herramienta llamada ANOVA o Analysis of Variance. La técnica se utiliza para comparar medias de distribuciones y determinar si la variación entre esas medias puede ser explicada por el azar.

Con R esto es muy sencillo, se arma un modelo lineal y se calcula el anova con la función homónima:

> model <- lm(Income ~ Gender, data=clean)
> anova(model)
Analysis of Variance Table
Response: Income
            Df     Sum Sq    Mean Sq F value   Pr(>F)   
Gender       1 1.8123e+09 1812255174  9.5573 0.002006 **
Residuals 3927 7.4464e+11  189620819                    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

De toda la información que R nos devuelve, nos interesa el Pr(>F) que en este caso es 0.002. Este número es la probabilidad de observar estos resultados si las distribuciones de salarios por género fueran iguales.

Esto es significativo.

Lo que ANOVA nos dice es que, suponiendo que la distribución de salario es independiente del género, la probabilidad de encontrar una muestra con esta diferencia salarial entre géneros es del 0.2%, dicho de otra manera una en quinientos.

Podemos decir entonces que es muy poco probable que se deba al azar y concluir, por tanto, que las distribuciones no son iguales.

Conclusión

Pudimos descartar nuestra hipótesis nula. Descubrimos que efectivamente las mujeres cobran menos que los hombres en la industria. Como vimos a lo largo de este proceso, a veces esto no es evidente y requiere probar distintas fórmulas o estrategias para corroborar nuestra hipótesis.

Saludos!

Gracias a: Nadia Kazlauskas, Mauro García Aurelio, Román Avila, Alejandro Crosa, Andrés de Barbará, Mariano Barrios

Un tiempo atrás, hicimos una encuesta sobre el estado laboral de los trabajadores de software en Argentina y divulgamos los resultados de la misma, disponibles acá.

Hoy vamos a analizarlos paso a paso, usando el lenguaje R. Todo el código está disponible online con licencia MIT.

Ante cualquier duda, comentario o mejora, abran un ticket en el repo. También respondo por twitter en @fernandezpablo

Data Munging

Los datos se encuentran en formato .csv, que es muy fácil de consumir desde R:

> sueldos <- read.csv('argentina.csv')
> nrow(sueldos)
[1] 4001

Perfecto! tenemos 4001 sueldos de argentina. Lamentablemente hay algunos inconvenientes:

  • Hay sueldos netos y brutos
  • Los nombres de las columnas no son los mejores (“Tengo” para edad, “Qu…tan.conforme.est..s.con.tu.sueldo.”, etc).
  • Algunos salarios son obviamente ficticios o están mal ingresados (hay algunos de $1, otros de más de un millón)

Vamos a hacer lo que se denomina data munging que es básicamente transformar los datos para solucionar los problemas descriptos anteriormente. La función que hace esto se puede ver acá.

Los datos “limpios” están en el archivo clean.csv en el repo, por si alguien quiere utilizarlos para crear sus propias visualizaciones.

Histograma

Con los datos en el formato que queremos, podemos empezar con algunas visualizaciones simples. Un histograma que nos muestre la distribución de los salarios, por ejemplo:

La distribución es right skewed, lo que significa que no simétrica como una distribución normal sino que se “estira” hacia la derecha (ver Skewness). Esto nos indica que hay algunos sueldos muy altos comparados con la media.

Pero ¿cuál es la media? podemos agregar una línea vertical que nos la resalte:

La media está en $25.597,71 (salario bruto, recordemos).

En las distribuciones no normales como ésta, la media no coincide con el centro de la distribución. En estos casos se puede agregar la mediana, que está en $22.857,14:

Otro valor interesante es la moda, el valor que más se repite. En este caso es $21.428,5714. Si bien es un número raro, recuerden que llegamos a él después de nuestra “normalización” de salario neto/bruto. En este caso probablemente se refiere a $15.000 de salario neto (en mano).

Manejo de Outliers

También podemos eliminar los outliers de la muestra, para concentrarnos en el la parte más densa de la distribución. Un método popular para esto es el de Tukey. Antes de “limpiar” los outliers, veamos qué datos nos quitaría de nuestra muestra:

De correr el filtro de Tukey para los outliers, todo salario arriba de $46.571,43 sería descartado (el método también elimina outliers “bajos”, pero en este caso la línea de corte da negativo y por lo tanto no descarta datos).

Los sueldos altos representan en este caso información importante (a mi entender) y por lo tanto no serán descartados para futuros análisis, pero el código disponible permite hacer este recorte cambiando la línea:

clean <- cleanup(df, handleOutliers = identity)

por esta otra:

clean <- cleanup(df, handleOutliers = tukey)

To Be Continued…

Ya tenemos una idea de la distribución y los datos limpios para seguir analizando ¿qué podríamos preguntarnos ahora? Algo interesante sería poder ver la distribución de salario discriminada por sexo:

A simple vista lo que se puede ver es que hay un porcentaje menor de mujeres en nuestra muestra (de hecho son 290 mujeres y 3563 varones) pero ¿las distribuciones son similares? ¿cobran más los hombres o las mujeres en la industria de software argentino?

La respuesta a estos y otros interrogantes más, en el próximo post 😊

Saludos!

Agradecimientos a la gente que comentó y sugirió mejoras: Federico BayléMariano Barrios, Nadia Kazlauskas, Mauro García Aurelio, Román ÁvilaAndrés de Barbará.