if (!require("pacman")) install.packages("pacman") # instala pacman si se requiere
## Loading required package: pacman
pacman::p_load(tidyverse,
readxl,writexl,googlesheets4, # importar hojas de cálculo
haven, foreign, # importación de dta y sav
sjlabelled, # etiquetas
janitor, skimr, #limpieza y verificación
imputeTS, # para imputar valores
srvyr, # Para el diseño muestral
esquisse) # para usar ggplot de manera más amigable
En caso que no tengas un proyecto,establecer el diretorio puede ayudar
¡Recuerda establecer tu directorio!
setwd("/Users/anaescoto/Dropbox/2020/2021-1 R para Demográfos/repo/R_Demo")
Base de ECOVID - ML
ecovid0420 <- read_dta("https://github.com/aniuxa/R_Demo/raw/master/datos/ecovid0420.dta")
También vamos usar la base de Índice de Competitividad Estatal, desarrollado por el Instituto Mexicano de Competitividad. (véase http://imco.org.mx/indices/que-no-vuelva-a-pasar-estados-prevenidos-valen-por-dos/)
url <- "https://github.com/aniuxa/R_Demo/raw/master/datos/ICE_2018.xlsx"
destfile <- "ICE_2018.xlsx"
curl::curl_download(url, destfile)
ICE_2018 <- read_excel(destfile, sheet="para_importar")
## New names:
## * `` -> ...102
## * `` -> ...105
Una vez “bajado”, a limpiar
ICE_2018 <- clean_names(ICE_2018) # limpia los nombres
Hay cursos específicos de visualización de datos. Es maravilloso pero también requiere que estudiemos bien qué tipo de datos tenemos y cuáles son nuestros objetivos.
Me gusta mucho este recurso: https://www.data-to-viz.com/
“plot()” Es la función más simple. Y es otro comando “listo”
plot(as_label(ecovid0420$pb3))
Esto es igual que:
barplot(table(as_label(ecovid0420$pb3)))
Histograma y el boxplot
hist(ICE_2018$esperanza_de_vida)
boxplot(ICE_2018$esperanza_de_vida)
Hoy vamos a presentar a un gran paquete ¡Es de los famosos! Y tiene más de diez años.
“gg” proviene de “Grammar of Graphics”, funciona un poco como sintácticamente, de ahí su nombre.
Algunos recursos para aprender ggplot
https://ggplot2-book.org/ hecha por el mero mero.
https://raw.githubusercontent.com/rstudio/cheatsheets/master/data-visualization-2.1.pdf
Vamos a revisar una presentación que es muy interesante
https://evamaerey.github.io/ggplot2_grammar_guide/ggplot2_grammar_guide.html
https://huygens.science.uva.nl/ggPlotteR/ Hace gráficos de ggplot con la base de datos de Gapminder
Para hacer un gráfico, ggplot2 tiene el comando “ggplot()”. Hacer gráficos con esta función tiene una lógica aditiva. Lo ideal es que iniciemos estableciendo el mapeo estético de nuestro gráfico, con el comando aes()
g1<-ecovid0420 %>%
ggplot(aes(as_label(pb3)))
g1 # imprime el lienzo
g1 + geom_bar()
g1 + geom_bar(aes(
fill = as_label(pb3)
)) # colorea la geometría
# Esto es equivalente
ecovid0420 %>%
ggplot(aes(as_label(pb3),
fill = as_label(pb3)
)
) + geom_bar()
## Para variables cuantitativas Podemos hacer histogramas y gráficos de densidad, de manera fácil. La idea es agregar en nuestro “lienzo” una geometría, un valor para dibujar en él. Esto se agrega con un “+” y con la figura que se añadirá a nuestro gráfico.
g2<-ecovid0420 %>%
ggplot(aes(pb2))
g2 # imprime el lienzo
g2 + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 25 rows containing non-finite values (stat_bin).
g2 + geom_density()
## Warning: Removed 25 rows containing non-finite values (stat_density).
g1 + geom_bar(aes(fill = as_label(pb1)),
position="dodge") #pone las categorías lado a lado y no apiladas
Otra manera interesante de observar estas variables, es que estándo apiladas, cada categoría de escolaridad se entendiera como una unidad:
g_bivariado <- g1 + geom_bar(aes(fill = as_label(pb1)),
position="fill") # cada categoría "llena" a una unidad
g_bivariado
Escalas de color: RcolorBrewer es el más famoso.
g_bivariado + scale_fill_brewer(palette = "Dark2")
Cambiamos el tema:
g_bivariado + scale_fill_brewer(palette = "Dark2") + theme_minimal()
Si la lógica de las capas y lienzos parece un poco complicada para graficar con ggplot, el paquete “esquisse” tiene un complemento. Cuando lo instalamos con pacman más arriba, se puede observar el complemento:
#library(esquisse)
Hoy desde el complemento podemos acceder a el siguiente menú y seleccionar nuestra base.
En tu barra de íconos de Rstudio
Una vez seleccionada, puedes hacer “drag and drop” de las variables y elegir el tipo de gráfico, incluso puedes hacer filtro con las variables disponibles
Puedes exportar esto a una imagen, a powerpoint o como código a ejecutar en RStudio. Esta herramienta es muy útil para irnos acostumbrando al código de ggplot que puede ser bastante complicado en los primeros acercamientos
Para los gráficos “cuanti-cuanti”, iniciamos con un gráfico de dispersión o scatter
ICE_2018 %>%
ggplot(aes(homicidios,percepcion_de_seguridad)) +
geom_point() #puntito
Modificaciones
# geometría "jitter"
ICE_2018 %>%
ggplot(aes(homicidios,percepcion_de_seguridad)) +
geom_jitter() # puntito pero "separado"
# geometría "text"
ICE_2018 %>%
ggplot(aes(homicidios,percepcion_de_seguridad)) +
geom_text(aes(label=edo2)) # un texto en lugar de punto
# geometría "label"
ICE_2018 %>%
ggplot(aes(homicidios,percepcion_de_seguridad)) +
geom_label(aes(label=edo2)) # etiqueta
Con color
ICE_2018 %>%
ggplot(aes(x=homicidios,
y=percepcion_de_seguridad,
color=region2)
) +
geom_point()
Con shape
ICE_2018 %>%
ggplot(aes(x=homicidios,
y=percepcion_de_seguridad,
shape=region2)
) +
geom_point() # ojo, nos da un "warning"
## Warning: The shape palette can deal with a maximum of 6 discrete values because
## more than 6 becomes difficult to discriminate; you have 8. Consider
## specifying shapes manually if you must have them.
## Warning: Removed 7 rows containing missing values (geom_point).
Con facet_wrap
ICE_2018 %>%
ggplot(aes(x=homicidios,
y=percepcion_de_seguridad)) +
geom_point() + facet_wrap(~region2)
Con facet_wrap, columna
ICE_2018 %>%
ggplot(aes(x=homicidios,
y=percepcion_de_seguridad)) +
geom_point() + facet_grid(.~region2)
Con facet_wrap, fila
ICE_2018 %>%
ggplot(aes(x=homicidios,
y=percepcion_de_seguridad)) +
geom_point() +
facet_grid(region2~.)
ICE_2018 %>%
ggplot(aes(x=homicidios,
y=percepcion_de_seguridad)) +
geom_point() +
geom_smooth(method="lm") +
facet_grid(region2~.)
## `geom_smooth()` using formula 'y ~ x'
## Warning in qt((1 - level)/2, df): NaNs produced
## Warning in max(ids, na.rm = TRUE): no non-missing arguments to max; returning -
## Inf
Enchulando tantito:
ICE_2018 %>%
ggplot(aes(x=homicidios,
y=percepcion_de_seguridad,
color=region2)) +
geom_text(aes(label=edo2)) +
geom_smooth(method="lm") + scale_fill_brewer(palette = "Dark2") +
theme_minimal()
## `geom_smooth()` using formula 'y ~ x'
## Warning in qt((1 - level)/2, df): NaNs produced
## Warning in max(ids, na.rm = TRUE): no non-missing arguments to max; returning -
## Inf
ICE_2018 %>%
ggplot(aes(x=homicidios,
y=percepcion_de_seguridad,
color=region2)) +
geom_point(aes(size=costos_del_delito))+ # ojo
theme_minimal()
No es lo mismo, pero es igual:
ICE_2018 %>%
ggplot(aes(x=homicidios,
y=percepcion_de_seguridad,
color=region2,
size=costos_del_delito)) +
geom_point()+
theme_minimal()
Algunas opciones interesantes:
ICE_2018 %>%
ggplot(aes(x=homicidios,
y=percepcion_de_seguridad,
color=region2,
size=costos_del_delito)) +
geom_text(aes(label=edo2),
check_overlap = TRUE)+
theme_minimal()