7.1 Distribuciones
Una forma sencilla de conocer la distribución de nuestros datos es obtener su gráfica de densidad, que es una representación suavizada de un histograma. Para conocer la distribución del total de población por municipio:
ggplot(data = poblacion, aes(x=pobtot)) +
geom_density()
La distribución está altamente sesgada, es decir, hay muchos municipios con pocos habitantes y algunos municipios donde dicha cantidad es muy grande.
Podemos revisar la distribución de población por estado utilizando boxplots. Cambiaremos las
leyendas de los ejes y, para lograr que las etiquetas del eje x
puedan leerse, las rotaremos
y las ajustaremos.
ggplot(poblacion, aes(x=nom_ent, y=pobtot)) +
geom_boxplot() +
ylab("Población") +
xlab("") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
También podemos utilizar un histograma para observar, por ejemplo, la distribución de la población infantil
en los municipios del estado de Veracruz. Ajustamos número de bins para mejorar la resolución de visualización
de los datos. Nuevamente cambiaremos los nombres de los ejes. Además, modificaremos el tema por default
utilizado por ggplot, el tamaño de la fuente y añadiremos una línea vertical para
identificar la media de la distribución. La escala del eje x
ha sido modificada con la función comma del paquete
scales.
%>%
poblacion ::filter(nom_ent == "Veracruz") %>%
dplyrggplot(aes(x=pob0_14)) +
geom_histogram(bins=50, fill="white", color="black") +
geom_vline(aes(xintercept=mean(pob0_14)),
color="blue", linetype="dashed", size=1) +
xlab("Población") +
ylab("Frecuencia") +
scale_x_continuous(label=comma) +
ggtitle("Distribución de la población infantil en Veracruz") +
theme_classic(base_size = 15)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2
## 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this
## warning was generated.
Podemos comparar dos distribuciones. Por ejemplo, los estudiantes de las instituciones de educación superior. Primero agrupamos por estado para tener menos puntos y obtenemos la media y la desviación estándar
<- vroom("data/estud_by_mun_sexo.tsv")
estud_by_mun_sexo
<- estud_by_mun_sexo %>%
estud_by_est_sexo filter(academic_degree %in% c("Maestría", "Doctorado")) %>%
group_by(sex, state) %>%
summarise(total = sum(estudiantes))
Podemos comparar las distribuciones con boxplots
ggplot(estud_by_est_sexo, aes(x = sex, y = total)) +
geom_boxplot(width = 0.5, alpha = 0.8, color = "grey") +
geom_jitter(width = 0.1, size = 1, color = "deeppink3") +
xlab("") +
ylab("Estudiantes en Posgrado") +
theme_bw(base_size = 18) +
stat_compare_means(method = "wilcox.test")
O con violin plots
ggplot(estud_by_est_sexo, aes(x = sex, y = total)) +
geom_violin(width = 0.5, alpha = 0.8, color = "grey") +
geom_jitter(width = 0.1, size = 1, color = "deeppink3") +
xlab("") +
ylab("Estudiantes en Posgrado") +
theme_bw(base_size = 18) +
stat_compare_means(method = "wilcox.test")
O también graficar las medias y la desviación estándar
<- estud_by_est_sexo %>%
est_sexo_sum group_by(sex) %>%
summarise(mean = mean(total),
sd = sd(total)/5)
ggplot(est_sexo_sum, aes(x = sex, y = mean, color = sex)) +
geom_bar(stat="identity", fill='white') +
geom_errorbar(aes(ymin= mean-sd, ymax=mean+sd), width=.2) +
ylab("Promedio de estudiantes en Posgrado") +
xlab("") +
scale_color_brewer(palette = "Dark2") +
theme_bw(base_size = 18) +
theme(legend.position="none")