¡Recuerda poner el directorio!
setwd("/Users/anaescoto/Dropbox/FCPyS-2020-i/EAIII/Prácticas_R")
Recuerda llamar algunas librerías básicas. Las hemos instalado en prácticas anteriores. Si sale algún error es porque las tienes que instalar ¿recuerdas cómo se instalaba una librería?
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(sjlabelled)
##
## Attaching package: 'sjlabelled'
## The following object is masked from 'package:dplyr':
##
## as_label
Recuerda que hemos importado en otras ocasiones nuestra base del trimestre 2 de la ENOE. Lo volveremos ha hacer
library(haven)
##
## Attaching package: 'haven'
## The following objects are masked from 'package:sjlabelled':
##
## as_factor, read_sas, read_spss, read_stata, write_sas,
## zap_labels
SDEMT219 <- read_dta("SDEMT219.dta")
Vamos a empezar a revisar los gráficos para variables cuantitativas.
hist(SDEMT219$ing_x_hrs)
A veces, para asegurarnos que tenemos los casos, nuestro análisis lo hacemos filtrando a quiénes reportaron estar ocupados, para no cargar con los ingresos cero.
hist(SDEMT219[SDEMT219$clase2==1,]$ing_x_hrs)
Podemos modificarlo de a poco a poco. Modificar el título
hist(SDEMT219[SDEMT219$clase2==1,]$ing_x_hrs, main="Histograma de Ingresos por trabajo")
Le podemos modificar el título del eje de las x y de las y
hist(SDEMT219[SDEMT219$clase2==1,]$ing_x_hrs,
main="Histograma de Ingresos por trabajo",
xlab="ing_x_hrs", ylab="Frecuencia")
¡A ponerle colorcitos! Recuerda aquí hay una lista http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf
hist(SDEMT219[SDEMT219$clase2==1,]$ing_x_hrs,
main="Histograma de Ingresos por trabajo",
xlab="ingresos por trabajo",
ylab="Frecuencia", col="deeppink1")
SDEMT219 %>%
filter(clase2==1) %>%
with(hist(ing_x_hrs))
SDEMT219 %>%
filter(clase2==1) %>%
with(hist(ing_x_hrs))
Cuando usamos pipes, se debe de recordar que no es necesario escribir el nombre del data.frame porque es lo primero que colocamos en uestro “pipe”.
Checa que cualquier aditamiento debe ir en el pipe donde está el comando de hist(). Ten cuidado con los paréntesis.
SDEMT219 %>%
filter(clase2==1) %>%
with(hist(ing_x_hrs, main= "histograma"))
hist(log(SDEMT219[SDEMT219$clase2==1,]$ing_x_hrs)) #ojo con los paréntesis
SDEMT219 %>%
filter(clase2==1) %>%
with(hist(log(ing_x_hrs), main= "histograma"))
¿Qué pasa con el logaritmo?
table(is.infinite(SDEMT219$ing_x_hrs))
##
## FALSE
## 407431
SDEMT219$log_ing_x_hrs<-log(SDEMT219$ing_x_hrs)
table(is.infinite(SDEMT219$log_ing_x_hrs))
##
## FALSE TRUE
## 122785 284646
Hay varias funciones interesantes para revisar nuestros datos. Busca en la ayuda is.na() is.nan() is.infinite() complete.cases() na.omit()
Iremos utilizándolas a lo largo del curso
Hoy vamos a presentar a un gran paquete ¡Es de los famosos! Y tiene más de diez años. https://qz.com/1007328/all-hail-ggplot2-the-code-powering-all-those-excellent-charts-is-10-years-old/
Hay dos funciones en paquete ggplot2
qplot() – para “quick plots”, gráficos rápidos. ggplot() – Para controlar de manera “granular” todo lo de nuestros gráficos.
library(ggplot2) #esta librería se instaló junto con tidyverse
ggplot2 que trabaja sólo con objetos de tipo dataframe. No funciona con matrices ni con objetos tipo table(como sí lo hace plot, barplot y demás de la base). Lo cual muchas veces implica realizar un paso más.
La idea de ggplot es crear primero el lienzo con el argumento “aes” y la variable o variables que vamos a graficar
ggplot(SDEMT219[SDEMT219$clase2==1,], aes(x=ing_x_hrs))
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.
ggplot(SDEMT219[SDEMT219$clase2==1,], aes(x=ing_x_hrs)) + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Si queremos usar los “pipes”, debemos crear el filtro de la base
SDEMT219 %>%
filter(clase2==1) %>%
ggplot(aes(x=ing_x_hrs)) +
geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Como se puede observar, la lógica de las dos sintaxis de programación son consistentes. Elige tu favorita.
¡Tip!. Puedes guardar el lienzo. Esto puede ayudarte a después ir sumando las geometríasy demás opciones que iremos aprendiendo.
lienzo<-SDEMT219 %>%
filter(clase2==1) %>%
ggplot(aes(x=ing_x_hrs))
lienzo
lienzo + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Podemos ir añadiendo más opciones
lienzo + geom_histogram(color="black", fill="white")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
lienzo + geom_histogram(binwidth=50)
lienzo + geom_histogram(bins=20)
Checa la diferencia de estas opciones ¿Cuál será la diferencia entre binwidth y bins?
Vamos a hacer un par de gráficos de dos variables. Vamos a graficar los datos de los ingresos y los años de escolaridad (anios_esc). Este gráfico se conoce como un scatterplot.
ggplot(aes(x=anios_esc, y=log(ing_x_hrs+1)),
data = SDEMT219[SDEMT219$clase2==1 & SDEMT219$anios_esc<99
& !is.na(SDEMT219$anios_esc)
& !is.na(SDEMT219$ing_x_hrs),])
O bien podemos crear una nueva base.
df_lienzo2<-SDEMT219 %>%
filter(clase2==1 & anios_esc<99) %>%
select(ing_x_hrs,anios_esc, t_loc, sex)
df_lienzo2<-na.omit(df_lienzo2)
Una vez ya tenemos esta base, vamos a graficar
lienzo2<-ggplot(data=df_lienzo2, aes(x=anios_esc, y=log(ing_x_hrs+1)))
lienzo2 + geom_point() #punto
Cuando trabajamos con datos discretos (como los años de escolaridad) preferimos ver los datos que no superpongan
lienzo2 + geom_jitter()
lienzo2 + geom_point(alpha=0.2)
lienzo2 + geom_jitter(alpha=0.2)
Existe un add-in - es decir un complemento - para que podamos modificar más fácilmente los gráficos que hacemos con ggplot. Lo tenemos que instalar. Así como hemos instalado nuestros otras paqueterías.
#install.packages("ggThemeAssist", dependencies = TRUE)
library(ggThemeAssist)
Para utilizarlo, tenemos que nombrar el objeto que queremos editar (por eso aprendimos a guardarlo en un objeto anteriormente). Lo escribimos. Lo seleccionamos y buscamos el complemento en la pestaña “Addins”
image
Con subgrupos podemos agregar otra variable en nuestro gráficos
lienzo2 + geom_jitter(aes(shape=as_label(t_loc)))
lienzo2 + geom_jitter(aes(colour =as_label(t_loc)))
lienzo2 +
geom_point()+
geom_smooth(method=lm)
Para tener un subgráfico por región. A veces vale la pena hacer un objeto ggplot y luego modificarlo. En general podemos “sumar” nuevas opciones
Regiones por columnas
lienzo2 +
geom_point()+
geom_smooth(method=lm) +
facet_grid(. ~ as_label(t_loc))
Regiones por filas
lienzo2 +
geom_point()+
geom_smooth(method=lm) +
facet_grid(as_label(t_loc) ~ .)
Regiones por filas y columnas (con dos variables)
lienzo2 +
geom_point()+
geom_smooth(method=lm) +
facet_grid(as_label(sex) ~ as_label(t_loc))
Recuadros por Regiones
lienzo2 +
geom_point()+
geom_smooth(method=lm) +
facet_wrap(~as_label(t_loc))
lienzo2 +
geom_text(aes(label=as_label(t_loc)))
Este tipo de gráficos funciona mejor si lo que tenemos son pocos casos.
lienzo2 +
geom_point(alpha=0.2)+
geom_smooth(method=lm) +
facet_wrap(~as_label(t_loc)) +
theme_light()
La función es “ggsave”. Revisemos la ayuda de este comando.
grafico<-lienzo2 +
geom_point(alpha=0.2)+
geom_smooth(method=lm) +
facet_wrap(~as_label(t_loc))
geom_text(aes(label=rownames(df_lienzo2)))
## mapping: label = ~rownames(df_lienzo2)
## geom_text: parse = FALSE, check_overlap = FALSE, na.rm = FALSE
## stat_identity: na.rm = FALSE
## position_identity
ggsave("grafico.png", grafico, dpi = 300)
## Saving 7 x 5 in image
Envía el código. Pega el gráfico en un word. Comenta brevemente los resultados del gráfico Agrega tus comentarios del inciso 3.
RECUERDA DAR ABRIR EN UNA PESTAÑA NUEVA EL ENLACE PARA EL ENVÍO. NO SE REVISARÁN TAREAS ENVIADAS POR CORREO https://forms.gle/2DNv3VRfKczuTQhS6