library(tidyverse)
library(eph)
df <- get_microdata(year = 2021, trimester = 2, type = "individual")
# Vamos a agregarle la cantidad de miembros del hogar
df <- df %>%
left_join(get_microdata(year = 2021, trimester = 2, type = "hogar", vars = c("CODUSU",
"NRO_HOGAR", "IX_TOT")))
options(scipen = 999)
La clase de hoy vamos a concentrarnos en el análisis de datos cuantitativos. Recordarán que existen algunas medidas resumen de este tipo de variables:
quantile()
podemos expresar el tipo de cuantil que deseamos. En el parámetro probs
colocamos los cuantiles que queremos. Por default nos devuelve los cuartiles, pero en el parámetro
quantile(df$ITF)
## 0% 25% 50% 75% 100%
## 0 22000 50000 85071 1197000
quantile(df$ITF, probs = seq(0, 1, 0.1))
## 0% 10% 20% 30% 40% 50% 60% 70% 80% 90%
## 0 0 10000 30000 40000 50000 62000 77000 97000 130000
## 100%
## 1197000
Aquí vemos que hasta el 10% de la población indica que gana 0 pesos per capita mensuales, y el último decil de ingresos gana más de 10 veces de lo que gana la mitad de la población. Esto nos indica que hay muchos outliers en nuestra distribución de la variable, lo cual va a afectar el promedio de los ingresos.
mean(df$ITF)
## [1] 62060.41
median(df$ITF)
## [1] 50000
sd(df$ITF)
## [1] 62748.83
¿Con qué función que vimos en las primeras clases podemos ver una aproximación a las medidas resumen?
summary(df$ITF)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0 22000 50000 62060 85071 1197000
tidyverse
Hasta aquí hemos venido usando las funciones de R-base. Pero lo bueno de tidyverse es que podemos ordenar todos estos resultados en una sola tabla. Veamos. Vamos a hacer una tabla en la que concentremos algunas de las medidas que vimos hasta aquí (la media, la varianza y el desvío estándar).
df %>%
summarise(media_itf = mean(ITF), sd_itf = sd(ITF), var_itf = var(ITF))
## # A tibble: 1 × 3
## media_itf sd_itf var_itf
## <dbl> <dbl> <dbl>
## 1 62060. 62749. 3937416288.
Ahora ustedes pueden armar una tabla con el mínimo, la mediana, la media, y el máximo
###
df %>%
ggplot(aes(y = ITF)) + geom_boxplot()
¿Qué podemos decir de este gráfico? ¿Les parece útil para mostrar la información de la variable?
En los casos de variables que tenemos grandes disparidades en los valores (como puede ser ingresos, superficie, etc.) los valores no se ven muy bien representados gráficamente ya que hay mucha distancia entre cada punto, barra o línea. Por eso, es muy útil utilizar una escala logarítmica. El eje en el que plasmamos la información no crece proporcionalmente sino en potencias de 10. Esto se logra tomando el logaritmo en base 10 de los datos antes de proyectarlos. Esto permite que los valores pequeños tengan espacio para diferenciarse, y a la vez que los muy grandes no aparezcan tan alejados, logrando un gráfico más compacto y en general más legible.
En todo caso, ggplot2
incluye varias funciones para transformar las escala de las x o de las y, entre ellas las que pasan las variables a escala logarítmica de base 10: scale_x_log10()
y scale_x_log10()
.
df %>%
ggplot(aes(y = ITF)) + geom_boxplot() + scale_y_log10()
df %>%
ggplot(aes(x = ITF)) + geom_histogram() + labs(x = "Ingreso total del hogar",
y = "n")
Probemos cómo se ve el mismo gráfico en una escala logarítmica…
df %>%
ggplot(aes(x = ITF)) + geom_histogram() + scale_x_log10() + labs(x = "Ingreso total del hogar",
y = "n")
Puedo “recortar” el gráfico con los atributos ylim()
o xlim()
:
df %>%
ggplot(aes(x = ITF)) + geom_histogram() + scale_x_log10() + labs(x = "Ingreso total del hogar",
y = "n") + xlim(0, 400000)
df %>%
filter(ESTADO == 1 & P21 > 0) %>%
ggplot(aes(x = CH06, y = P21)) + geom_point() + labs(x = "Edad", y = "Ingreso de la ocupación principal")
¿Qué pasa si re-escalamos esto mediante logartimos? Podemos hacerlo transformando directamente la variable en aes()
:
df %>%
filter(ESTADO == 1 & P21 > 0) %>%
ggplot(aes(x = log10(CH06), y = log10(P21))) + geom_point() + labs(x = "Edad",
y = "Ingreso de la ocupación principal")
O usando las funciones para reescalar los ejes:
df %>%
filter(ESTADO == 1 & P21 > 0) %>%
ggplot(aes(x = CH06, y = P21)) + scale_y_log10() + scale_x_log10() + geom_point() +
labs(x = "Edad", y = "Ingreso de la ocupación principal")
¿Qué diferencias ven en cada uno de los gráficos?