Previo

¡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")

Descriptivos para variables cuantitativas

Vamos a empezar a revisar los gráficos para variables cuantitativas.

Histograma básico

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") 

con pipes

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"))

Transformando

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

ggplot2 <3

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))

Gráficos univariados

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?

Gráficos bivariados

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) 

Theme Assist Addin

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

Agregando subgrupos a nuestros gráficos

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)))

Con una regresión lineal

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))

Etiquetas

lienzo2 + 
  geom_text(aes(label=as_label(t_loc)))

Este tipo de gráficos funciona mejor si lo que tenemos son pocos casos.

Combinando varias geometrías

lienzo2 + 
  geom_point(alpha=0.2)+
  geom_smooth(method=lm) +
  facet_wrap(~as_label(t_loc)) +
  theme_light()

Guardar un gráfico

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

Ejercicio

  1. La función “geom_density” funciona exactamente igual que “geom_histogram”, sólo que dibuja una función de densidad(que se aproxima a la frecuencia relativa). Grafica el logaritmo de los ingresos con esta geometría.
  2. Modifica ese gráfico con ggThemeAssist y colocale un título
  3. Explica con tus propias palabras qué hace alguna de las funciones siguientes is.na() is.nan() is.infinite() complete.cases() na.omit()

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