¡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
Vamos a empezar a revisar los gráficos para variables cuantitativas.
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")
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"))
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
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))
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)
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)
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(region)))
lienzo2 + geom_jitter(aes(colour =as_label(region)))
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))
lienzo2 +
geom_text(aes(label=as_label(region)))
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(region)) +
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(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