Previo

¡Recuerda poner el directorio!

setwd("/Users/anaescoto/Dropbox/2019/Cursos ESA/UCA_R")

Vamos a abrir el ambiente de nuestra práctica 3. Si no lo tienes a la mano lo puedes descargar desde el sitio de “base de datos” del curso.

load("./datos/ambiente_p3.RData")

Recuerda llamar algunas librerías básicas

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 3.2.0     ✔ purrr   0.3.2
## ✔ tibble  2.1.3     ✔ dplyr   0.8.1
## ✔ tidyr   0.8.3     ✔ stringr 1.4.0
## ✔ readr   1.3.1     ✔ forcats 0.4.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(sjlabelled)
## 
## Attaching package: 'sjlabelled'
## The following object is masked from 'package:forcats':
## 
##     as_factor
## The following object is masked from 'package:dplyr':
## 
##     as_label

Descriptivos para variables cuantitativas

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

Histograma básico

hist(ehpm2017$money)

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(ehpm2017[ehpm2017$actpr2012==10,]$money)

Podemos modificarlo de a poco a poco. Modificar el título

hist(ehpm2017[ehpm2017$actpr2012==10,]$money, main="Histograma de Ingresos por trabajo") 

Le podemos modificar el título del eje de las x y de las y

hist(ehpm2017[ehpm2017$actpr2012==10,]$money, 
     main="Histograma de Ingresos por trabajo", 
     xlab="money", ylab="Frecuencia") 

¡A ponerle colorcitos! Recuerda aquí hay una lista http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf

hist(ehpm2017[ehpm2017$actpr2012==10,]$money, 
     main="Histograma de Ingresos por trabajo",
     xlab="ingresos por trabajo", 
     ylab="Frecuencia", col="deeppink1") 

con pipes

ehpm2017 %>% 
  filter(ehpm2017$actpr2012==10) %>% 
    with(hist(money))

ehpm2017 %>% 
  filter(ehpm2017$actpr2012==10) %>% 
    with(hist(money))

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.

ehpm2017 %>% 
  filter(ehpm2017$actpr2012==10) %>% 
    with(hist(money, main= "histograma"))

Transformando

hist(log(ehpm2017[ehpm2017$actpr2012==10,]$money)) #ojo con los paréntesis

ehpm2017 %>% 
  filter(ehpm2017$actpr2012==10) %>% 
    with(hist(log(money), main= "histograma"))

¿Qué pasa con el logaritmo?

table(is.infinite(ehpm2017$money))
## 
## FALSE 
## 75133
ehpm2017$log_money<-log(ehpm2017$money)
table(is.infinite(ehpm2017$log_money))
## 
## FALSE  TRUE 
## 26125 49008

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

Nota: La pongo acá pero ya está arriba porque llamamos a todo el 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(ehpm2017[ehpm2017$actpr2012==10,], aes(x=money))

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(ehpm2017[ehpm2017$actpr2012==10,], aes(x=money)) + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 6286 rows containing non-finite values (stat_bin).

Si queremos usar los “pipes”, debemos crear el filtro de la base

ehpm2017 %>% 
  filter(ehpm2017$actpr2012==10) %>% 
    ggplot(aes(x=money)) +
       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<-ehpm2017 %>% 
  filter(ehpm2017$actpr2012==10) %>% 
    ggplot(aes(x=money)) 

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)

Gráficos bivariado

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 (aproba1). Este gráfico se conoce como un scatterplot.

ggplot(aes(x=aproba1, y=log(money+1)), 
                data = ehpm2017[ehpm2017$actpr2012==10 
                                & !is.na(ehpm2017$aproba1)
                                & !is.na(ehpm2017$money),])

O bien podemos crear una nueva base.

df_lienzo2<-ehpm2017 %>% 
              filter(ehpm2017$actpr2012==10) %>% 
                select(money,aproba1, region, r104)
df_lienzo2<-na.omit(df_lienzo2)

Una vez ya tenemos esta base, vamos a graficar

lienzo2<-ggplot(data=df_lienzo2, aes(x=aproba1, y=log(money+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(region)))

lienzo2 + geom_jitter(aes(colour =as_label(region)))

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

Regiones por filas

lienzo2 + 
  geom_point()+
  geom_smooth(method=lm) +
  facet_grid(as_label(region) ~ .)

Recuadros por regiones

lienzo2 + 
  geom_point()+
  geom_smooth(method=lm) +
  facet_wrap(~as_label(region))

Etiquetas

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

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(region)) +
  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(region))
  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. Realiza un gráfico de dispersión (scatterplot) con la variable “totayuda” y la edad del jefe de hogar. Como es una variable de hogar, filtra por que tengas solamente a los jefes de hogar (r103==1) Envía el código. Comenta brevemente los resultados del gráfico

https://tinyurl.com/Ej5-ESA-R