r basic course (session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf ·...

35
R basic Course (Session 4) S.Civit 21 de enero de 2020 Contents Objetivos: 1 Objetivo 4: Gráficos(ggplot2) 1 Objetivo 4: Histogramas .......................................... 2 Polígonos de frecuencias (densidades) ................................... 10 Un poco de práctica: Histograma ..................................... 11 Diagramas de barras ............................................ 11 Diagramas de dispersión .......................................... 16 Diagramas de caja: Boxplot ........................................ 25 Asistente para definir el tema en ggplot 30 Ejemplo de gráfico. Visualización interactiva 31 Material complementario de Gráficos 31 Objetivo 4: Tablas 32 Introducción ................................................ 32 Ejemplos de tablas ............................................. 32 Objetivos: -Objetivo 4: Gráficos/Tablas necesarios para realizar nuestros análisis de datos. Como lo que se pretende es que se entienda la filosofía y la práctica del trabajo con R, todos los conceptos que se introducen se ilustran con ejemplos muy sencillos. No obstante, la selección de funciones que se realiza tienen una aplicación directa en el tratamiento real de datos. Objetivo 4: Gráficos(ggplot2) Aprenderemos a graficar con ggplot2. En palabras de Wickham “The list (. . . ) is very friendly to new users”. Un gráfico realizado con ggplot2 presenta, al menos, tres elementos: -Datos (Data) que queremos representar (que serán un data frame). -Características estéticas (aes) (aesthetic mappings) que describen cómo queremos que los datos se vean en el gráfico. Para más información podemos consultar la vignette (vignette(“ggplot2-specs”)). Como luego veremos, se introducen con la función aes() y se refieren a: -posición (en los ejes) -color exterior (color) y de relleno (fill) -forma de puntos (shape) 1

Upload: others

Post on 17-May-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

R basic Course (Session 4)S.Civit

21 de enero de 2020

ContentsObjetivos: 1

Objetivo 4: Gráficos(ggplot2) 1Objetivo 4: Histogramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2Polígonos de frecuencias (densidades) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Un poco de práctica: Histograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Diagramas de barras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Diagramas de dispersión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16Diagramas de caja: Boxplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

Asistente para definir el tema en ggplot 30

Ejemplo de gráfico. Visualización interactiva 31

Material complementario de Gráficos 31

Objetivo 4: Tablas 32Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32Ejemplos de tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Objetivos:

-Objetivo 4: Gráficos/Tablas necesarios para realizar nuestros análisis de datos.

Como lo que se pretende es que se entienda la filosofía y la práctica del trabajo con R, todos los conceptosque se introducen se ilustran con ejemplos muy sencillos. No obstante, la selección de funciones que se realizatienen una aplicación directa en el tratamiento real de datos.

Objetivo 4: Gráficos(ggplot2)

Aprenderemos a graficar con ggplot2.

En palabras de Wickham “The list (. . . ) is very friendly to new users”.

Un gráfico realizado con ggplot2 presenta, al menos, tres elementos:

-Datos (Data) que queremos representar (que serán un data frame).

-Características estéticas (aes) (aesthetic mappings) que describen cómo queremos que los datos se veanen el gráfico. Para más información podemos consultar la vignette (vignette(“ggplot2-specs”)). Como luegoveremos, se introducen con la función aes() y se refieren a:

-posición (en los ejes)-color exterior (color) y de relleno (fill)-forma de puntos (shape)

1

Page 2: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

-tipo de línea (linetype)-tamaño (size)

-Objetos geométricos (Geom) representan lo que vemos en un gráficos (puntos, líneas, etc.). Todo gráficotiene, como mínimo, una geometría. La geometría determina el tipo de gráfico:

-geom_point (para puntos)-geom_lines (para lineas)-geom_histogram (para histograma)-geom_boxplot (para boxplot)-geom_bar (para barras)-geom_smooth (líneas suavizadas)-geom_polygons (para polígonos en un mapa)-con help.search(“geom_”, package = “ggplot2”) podéis ver el listado de objetos geométricos)

Por tanto, para construir un gráfico con ggplot2 comenzamos con la siguiente estructura de código:ggplot(datos, aes()) + geom_tipo()

A partir de esta estructura básica puede mejorarse la presentación de los gráficos introduciendo, por ejemplo,características estéticas en los objetos geométricos, rotulando el gráficos, etc.

Otros elementos que conviene tener presente en un gráfico de ggplot2 son:

-Stat (Stat), para resumir datos (contar frecuencias, número de intervalos en los histogramas, etc.).-Escalas (Scale). Convierten datos en características estéticas (colores, etc.), crean leyendas... . - Coordenadas (coord): sistema de coordenadas cartesianas, polares, proyecciones, etc.-Faceting (Faceting), permite representar gráficos separados para subconjuntos de los datos originales.#install.packages("ggplot2")library(ggplot2)

Objetivo 4: Histogramas

Para realizar los gráficos vamos a utilizar datos que se encuentran accesibles en el paquete AER. Concreta-mente http://lib.stat.cmu.edu/datasets/CPS_85_Wages#if(!require("AER")) {install.packages("AER")}data(package="AER")library(AER)

## Warning: package 'AER' was built under R version 3.5.3

## Loading required package: car

## Warning: package 'car' was built under R version 3.5.3

## Loading required package: carData

## Loading required package: lmtest

## Warning: package 'lmtest' was built under R version 3.5.3

## Loading required package: zoo

## Warning: package 'zoo' was built under R version 3.5.3

#### Attaching package: 'zoo'

## The following objects are masked from 'package:base':#### as.Date, as.Date.numeric

2

Page 3: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

## Loading required package: sandwich

## Warning: package 'sandwich' was built under R version 3.5.3

## Loading required package: survivaldata("CPS1985")dim(CPS1985)

## [1] 534 11names(CPS1985)

## [1] "wage" "education" "experience" "age" "ethnicity"## [6] "region" "gender" "occupation" "sector" "union"## [11] "married"

El histograma del Salario (wage). Para ello, usamos la función ggplot(), en la que incluimos

-Los datos y la estética con la que queremos que se presenten en el gráfico.

-Seguidamente le añadimos (+) la geometría (tipo histograma) con la función geom_histogram().

Básico con ggplot2 añadimos capas (layers) con el símbolo +.#frecuencias absolutasggplot(CPS1985, aes(x=wage)) +geom_histogram()

# frecuencias relativasggplot(CPS1985, aes(x=wage)) +

geom_histogram(aes(y=..density..))

# Histograma con 20 intervaloslibrary(ggplot2)

## Warning: package 'ggplot2' was built under R version 3.5.3ggplot(CPS1985, aes(x=wage)) +

geom_histogram(bins=20, color="white", fill="blue")

3

Page 4: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

0

50

100

0 10 20 30 40wage

coun

t

# Histograma con amplitud de intervalo igual a 5. Línea discontinua para el contorno del intervaloggplot(CPS1985, aes(x=wage)) +

geom_histogram(binwidth=5, color="white", fill="blue", linetype=2)

4

Page 5: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

0

100

200

0 10 20 30 40 50wage

coun

t

#título al gráfico y a los ejes.ggplot(CPS1985, aes(x=wage)) +

geom_histogram(bins=20, color="white", fill="blue") +ggtitle("Distribución del salario (dólares por hora)") +xlab("Salario") +ylab("Número de empleados")

5

Page 6: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

0

50

100

0 10 20 30 40Salario

Núm

ero

de e

mpl

eado

sDistribución del salario (dólares por hora)

# Una alternativa al anterior sería:ggplot(CPS1985, aes(x=wage)) +

geom_histogram(bins=20, color="white", fill="blue") +labs(title = "Distribución del salario (dólares por hora)",

x = "Salario",y = "Número de empleados") +

ylim(c(0,150))

6

Page 7: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

0

50

100

150

0 10 20 30 40Salario

Núm

ero

de e

mpl

eado

sDistribución del salario (dólares por hora)

ggplot(CPS1985, aes(x=wage)) +geom_histogram(aes(fill=..count..), bins=20, color="white") +geom_vline(aes(xintercept=mean(wage)), color="red") +geom_vline(aes(xintercept=median(wage)), color= "darkgreen") +labs(title = "Distribución del salario (dólares por hora)",

x = "Salario",y = "Número de empleados") +

scale_fill_continuous(name="Empleados") +

theme_classic()

7

Page 8: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

0

50

100

0 10 20 30 40Salario

Núm

ero

de e

mpl

eado

s

0

50

100

Empleados

Distribución del salario (dólares por hora)

-Visualizar subconjunto de datos (salario para hombres y salario para mujeres) en distintos paneles.

-Para ello, utilizamos el elemento facet.ggplot(CPS1985, aes(x=wage)) +

geom_histogram(bins=20, color="white", fill="blue") +facet_grid(gender~.)

8

Page 9: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

male

female

0 10 20 30 40

0

25

50

75

0

25

50

75

wage

coun

t

#opcion 2ggplot(CPS1985, aes(x=wage)) +

geom_histogram(bins=20, color="white", fill="blue") +facet_wrap(~gender)

9

Page 10: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

male female

0 10 20 30 40 0 10 20 30 40

0

25

50

75

wage

coun

t

ggplot(CPS1985, aes(x=wage)) +geom_histogram(bins=20, aes(color=gender) ) +ylim(c(0,150))

ggplot(CPS1985, aes(x=wage, fill=gender)) +geom_histogram(bins=20) +ylim(c(0,150))

ggplot(CPS1985, aes(x=wage)) +geom_histogram(bins=20, aes(fill=gender), position="fill", alpha=0.4) +labs(x= "Salario", y="Empleados", fill="Género") + # títulos de ejes y leyendascale_fill_discrete(labels=c("Hombre","Mujer")) # títulos claves leyenda

Polígonos de frecuencias (densidades)

-Poligono de frecuencias porpor géneroggplot(CPS1985, aes(x=wage)) +

geom_freqpoly(bins=20, aes(color=gender)) +labs(color="Género")

#Densidad de frecuencias:ggplot(CPS1985, aes(x=wage)) +geom_freqpoly(bins=20, aes(y=..density.., color=gender)) +

labs(color="Género")

10

Page 11: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

-Para aprender más sobre cómo crear histogramas con ggplot2:

http://t-redactyl.io/blog/2016/02/creating-plots-in-r-using-ggplot2-part-7-histograms.html

http://www.sthda.com/english/wiki/ggplot2-histogram-plot-quick-start-guide-r-software-and-data-visualization

Un poco de práctica: Histograma

-Representad la distribución del salario (en logaritmos: log(wage)) mediante un histograma.

-Comparad la distribución de log(wage) según la raza (ethnicity).

Diagramas de barras

El diagrama de barras, como ya sabemos, puede utilizarse para representar variables categóricas (atributos uordinales) y variables cuantitativas discretas.#Opcion 1: Básicoggplot(CPS1985, aes(ethnicity)) +

geom_bar()

ggplot(CPS1985, aes(education)) +geom_bar()

#Opcion 2: Título al gráfico y a los ejes.ggplot(CPS1985, aes(ethnicity)) +

geom_bar() +labs(title="Diagrama de barras",

x= "Raza",y="Empleados") +

scale_x_discrete(labels=c("Caucásico", "Hispano", "Otros"))

ggplot(CPS1985, aes(education)) +geom_bar() +

labs(title="Diagrama de barras",x= "Educación (en años)",y="Empleados")

#Opcion3: cada barra con un color distintoggplot(CPS1985, aes(ethnicity, fill=ethnicity)) +

geom_bar() +labs(title="Diagrama de barras",

x= "Raza",y="Empleados") +

scale_x_discrete(labels=c("Caucásico", "Hispano", "Otros"))

# eliminamos la leyendo porque en este caso no es ilustrativaggplot(CPS1985, aes(ethnicity, fill=ethnicity)) +

geom_bar() +labs(title="Diagrama de barras",

x= "Raza",y="Empleados") +

scale_x_discrete(labels=c("Caucásico", "Hispano", "Otros")) +

11

Page 12: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

guides(fill=FALSE)

#Opcion4: Información sobre el número de casos en las barras

ggplot(CPS1985, aes(ethnicity, fill=ethnicity)) +geom_bar() +labs(title="Diagrama de barras",

x= "Raza",y=NULL) +

scale_x_discrete(labels=c("Caucásico", "Hispano", "Otros")) +guides(fill=FALSE) +geom_text(stat='count',aes(label=..count..), vjust=-0.5, size=3)

#Opcion 1: Básicoggplot(CPS1985, aes(ethnicity, fill=gender)) +

geom_bar() +labs(title="Diagrama de barras",

x= "Raza",y="Empleados") +

scale_x_discrete(labels=c("Caucásico", "Hispano", "Otros")) +scale_fill_discrete("Género", labels=c("Hombre","Mujer"))

#Opcion 2: Colores a través de una paleta:ggplot(CPS1985, aes(ethnicity, fill=gender)) +

geom_bar() +labs(title="Diagrama de barras",

x= "Raza",y="Empleados") +

scale_x_discrete(labels=c("Caucásico", "Hispano", "Otros")) +scale_fill_manual(values = heat.colors(2),

"Género",labels=c("Hombre","Mujer"))

# Opcion 2 bis. Paleta de coloresggplot(CPS1985, aes(ethnicity, fill=gender)) +

geom_bar() +labs(title="Diagrama de barras",

x= "Raza",y="Empleados") +

scale_x_discrete(labels=c("Caucásico", "Hispano", "Otros")) +scale_fill_brewer(palette = "Accent",

"Género",labels=c("Hombre","Mujer"))

#Opcion3: las barras se sitúen unas junto a las otras con position = “dodge”.

ggplot(CPS1985, aes(ethnicity, fill=gender)) +geom_bar(position="dodge") + # también: position=position_dodge()labs(title="Diagrama de barras",

x= "Raza",y="Empleados") +

12

Page 13: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

scale_x_discrete(labels=c("Caucásico", "Hispano", "Otros")) +scale_fill_brewer(palette = "Accent",

"Género",labels=c("Hombre","Mujer"))

#Opcion4: cambiar la orientación de las barras de vertical a horizontal.

ggplot(CPS1985, aes(ethnicity, fill=gender)) +geom_bar(position="dodge") + # también: position=position_dodge()labs(title="Diagrama de barras",

x= "Raza",y="Empleados") +

scale_x_discrete(labels=c("Caucásico", "Hispano", "Otros")) +scale_fill_brewer(palette = "Accent",

"Género",labels=c("Hombre","Mujer")) +

coord_flip()

# Incluimos el número de casosggplot(CPS1985, aes(ethnicity, fill=gender)) +

geom_bar() +labs(title="Diagrama de barras",

x= "Raza",y="Empleados") +

scale_x_discrete(labels=c("Caucásico", "Hispano", "Otros")) +scale_fill_brewer(palette = "Accent",

"Género",labels=c("Hombre","Mujer")) +

geom_text(stat='count',aes(label=..count..),position = "stack",vjust=1,size=2,color="red")

13

Page 14: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

204

236

1314 28

39

0

100

200

300

400

Caucásico Hispano OtrosRaza

Em

plea

dos Género

Hombre

Mujer

Diagrama de barras

# en porcentajes:ggplot(CPS1985, aes(ethnicity,y = (..count..)/sum(..count..), fill=gender)) +

geom_bar() +labs(title="Diagrama de barras",

x= "Raza",y="Empleados") +

scale_x_discrete(labels=c("Caucásico", "Hispano", "Otros")) +scale_fill_brewer(palette = "Accent",

"Género",labels=c("Hombre","Mujer")) +

geom_text(stat="count",aes(label = paste(round((..count..)/sum(..count..)*100), "%")),position = "stack",vjust=1,size=2,color="red")

14

Page 15: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

38 %

44 %

2 %3 % 5 %

7 %

0.0

0.2

0.4

0.6

0.8

Caucásico Hispano OtrosRaza

Em

plea

dos Género

Hombre

Mujer

Diagrama de barras

# Opcion 2: Proporción de hombres y mujeres en cada categoría#Emplearemos position = fill dentro de la geometría.ggplot(CPS1985, aes(ethnicity, fill=gender)) +

geom_bar(position = "fill") +labs(title="Diagrama de barras",

x= "Raza",y="Empleados") +

scale_x_discrete(labels=c("Caucásico", "Hispano", "Otros")) +scale_fill_brewer(palette = "Accent",

"Género",labels=c("Hombre","Mujer"))

15

Page 16: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

0.00

0.25

0.50

0.75

1.00

Caucásico Hispano OtrosRaza

Em

plea

dos Género

Hombre

Mujer

Diagrama de barras

Diagramas de dispersión

-Si nos preguntamos como es la relación entre el salario (en logaritmos) y la experiencia?. Esta preguntaimplica un nuevo tipo de gráfico que son los denominados gráficos de dispersión# Raw dataggplot(CPS1985, aes(experience, log(wage))) +

geom_point() +labs(title="Diagrama de dispersión",

subtitle= "ScatterPlot",caption="Fuente: CPS1985 (paquete AER)",x="Experiencia (en años)",y="Salario (en logaritmo)")

16

Page 17: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

0

1

2

3

0 20 40Experiencia (en años)

Sal

ario

(en

loga

ritm

o)

ScatterPlot

Diagrama de dispersión

Fuente: CPS1985 (paquete AER)

# Opcion 2:# color se ha introducido como una característica estética (con aes())

ggplot(CPS1985, aes(experience, log(wage), color="red")) +geom_point()

17

Page 18: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

0

1

2

3

0 20 40experience

log(

wag

e)

colour

red

# Opcion 3.# En esta opción el color se introduce como una constante.

ggplot(CPS1985, aes(experience, log(wage))) +geom_point(color="red")

18

Page 19: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

0

1

2

3

0 20 40experience

log(

wag

e)

Con muchos datos es muy probable que se produzca un importante solapamiento de las observaciones.Una alternativa en estos casos es representar lo que se conoce como Hex plot.

El problema es que este gráfico usa geom_hex por defecto usa una escala gradual de tonos azules (azuloscuro equivale a poca frecuencia, azul claro equivale a alta frecuencia). Al revés estamos más acostumbrados.# Hay que instalar el paquete hexbin#install.packages("hexbin")library(hexbin)

## Warning: package 'hexbin' was built under R version 3.5.3ggplot(CPS1985, aes(experience,log(wage))) +

geom_hex() +labs(title="Diagrama de dispersión",

subtitle= "ScatterPlot",caption="Fuente: CPS1985 (paquete AER)",x="Experiencia (en años)",y="Salario (en logaritmo)") +

scale_fill_continuous("Empleados") +theme_classic()

19

Page 20: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

0

1

2

3

4

0 20 40Experiencia (en años)

Sal

ario

(en

loga

ritm

o)

1

2

3

4

5

6

7Empleados

ScatterPlot

Diagrama de dispersión

Fuente: CPS1985 (paquete AER)

# opcion 2

ggplot(CPS1985, aes(experience,log(wage))) +geom_hex() +labs(title="Diagrama de dispersión",

subtitle= "ScatterPlot",caption="Fuente: CPS1985 (paquete AER)",x="Experiencia (en años)",y="Salario (en logaritmo)") +

scale_fill_gradient("Empleados", low="green", high="green4") + # nombres en colors()theme_classic()

20

Page 21: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

0

1

2

3

4

0 20 40Experiencia (en años)

Sal

ario

(en

loga

ritm

o)

1

2

3

4

5

6

7Empleados

ScatterPlot

Diagrama de dispersión

Fuente: CPS1985 (paquete AER)

Fijémonos en los siguientes diagramas de dispersión. Vamos a “usar” el género para colorear los puntos.Alguna conclusión descriptiva?# Opción 1ggplot(CPS1985, aes(experience,log(wage), color=gender)) +

geom_point() +labs(title="Diagrama de dispersión",

subtitle= "ScatterPlot",caption="Fuente: CPS1985 (paquete AER)",x="Experiencia (en años)",y="Salario (en logaritmo)") +

scale_color_discrete(name="Género", labels=c("Hombre","Mujer"))

21

Page 22: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

0

1

2

3

0 20 40Experiencia (en años)

Sal

ario

(en

loga

ritm

o)

Género

Hombre

Mujer

ScatterPlot

Diagrama de dispersión

Fuente: CPS1985 (paquete AER)

# Opción 2ggplot(CPS1985, aes(experience,log(wage))) +

geom_point(aes(color=gender)) +labs(title="Diagrama de dispersión",

subtitle= "ScatterPlot",caption="Fuente: CPS1985 (paquete AER)",x="Experiencia (en años)",y="Salario (en logaritmo)") +

scale_color_discrete("Género", labels=c("Hombre","Mujer"))

22

Page 23: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

0

1

2

3

0 20 40Experiencia (en años)

Sal

ario

(en

loga

ritm

o)

Género

Hombre

Mujer

ScatterPlot

Diagrama de dispersión

Fuente: CPS1985 (paquete AER)

Fijémonos qué sucede si añadimos la recta de regresión. Esto último lo vamos a hacer añadiendo la**geometría geom_smooth()*+ y especificando como método de estimación lm (linear model).# Opción 1ggplot(CPS1985, aes(experience,log(wage), color=gender)) +

geom_point() +geom_smooth(method="lm", se=FALSE) +labs(title="Diagrama de dispersión",

subtitle= "ScatterPlot",caption="Fuente: CPS1985 (paquete AER)",x="Experiencia (en años)",y="Salario (en logaritmo)") +

scale_color_discrete("Género", labels=c("Hombre","Mujer"))

23

Page 24: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

0

1

2

3

0 20 40Experiencia (en años)

Sal

ario

(en

loga

ritm

o)

Género

Hombre

Mujer

ScatterPlot

Diagrama de dispersión

Fuente: CPS1985 (paquete AER)

# Opción 2ggplot(CPS1985, aes(experience,log(wage))) +

geom_point(aes(color=gender)) +geom_smooth(method="lm") +labs(title="Diagrama de dispersión",

subtitle= "ScatterPlot",caption="Fuente: CPS1985 (paquete AER)",x="Experiencia (en años)",y="Salario (en logaritmo)") +

scale_color_discrete("Género", labels=c("Hombre","Mujer"))

24

Page 25: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

0

1

2

3

0 20 40Experiencia (en años)

Sal

ario

(en

loga

ritm

o)

Género

Hombre

Mujer

ScatterPlot

Diagrama de dispersión

Fuente: CPS1985 (paquete AER)

Un poco de práctica: Diagrama de Dispersión

-Realizar un diagrama de dispersión utilizando la base de datos CPS1988 del paquete AER.

-Incluid en el gráfico colores según una determinada variable categórica,

-Rectas de regresión,

-Cambiar la posición de la leyenda

Diagramas de caja: Boxplot

Para realizar un diagrama de caja utilizamos la geometría: geom_boxplot().# Opción 1ggplot(CPS1985, aes(x=gender, y=wage)) +

geom_boxplot()

# Opción 2# Diagrama de caja con color de rellenoggplot(CPS1985, aes(x=gender, y=wage, fill=gender)) +

geom_boxplot() +labs(x="Género", y="Salario", fill="Género") + # titulo ejes y leyendascale_x_discrete(labels=c("Hombre","Mujer")) + # etiquetas del eje xscale_fill_discrete(labels=c("Hombre","Mujer")) # etiquetas claves leyenda

25

Page 26: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

# Opción 3# Diagrama de caja con cambio de posición de la leyendaggplot(CPS1985, aes(x=gender, y=wage, fill=gender)) +

geom_boxplot() +labs(x="Género", y="Salario", fill="Género") +scale_x_discrete(labels=c("Hombre","Mujer")) +scale_fill_discrete(labels=c("Hombre","Mujer")) +theme(legend.position="top") # cambio posición de leyenda

#Opcion 4# cambio dirección de las cajasggplot(CPS1985, aes(x=gender, y=wage, fill=gender)) +

geom_boxplot(outlier.colour = "blue") +labs(x="Género", y="Salario") +scale_x_discrete(labels=c("Hombre","Mujer")) +guides(fill=FALSE) +coord_flip() # cambio dirección de las cajas

Puede resultar interesante localizar la media de cada grupo en los diagramas de caja. Para ello, hacemosuso del elemento stat Se puede añadir stat, básicamente, de dos formas:

-Añadir directamente una función stat_() y de esa forma anular su valor por defecto en la geometría.

-Añadir una función geom_() e introducir el **elemento stat*+ para anular el valor por defecto.# Opción 1# Añadimos la media utilizando la función stat_()ggplot(CPS1985, aes(x=gender, y=wage, fill=gender)) +

geom_boxplot() +labs(x="Género", y="Salario") +scale_x_discrete(labels=c("Hombre","Mujer")) +guides(fill=FALSE) +coord_flip() +stat_summary(fun.y=mean, geom="point", shape=5, size=4)

26

Page 27: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

Hombre

Mujer

0 10 20 30 40Salario

Gén

ero

# Opción 2# Añadimos la media utilizando la función geom_() y modificando el elemento statggplot(CPS1985, aes(x=gender, y=wage, fill=gender) ) +

geom_boxplot(alpha=0.3, outlier.colour = "blue") +labs(x="Género", y="Salario") +scale_x_discrete(labels=c("Hombre","Mujer")) +guides(fill=FALSE) +coord_flip() +geom_point(stat= "summary", fun.y=mean, shape=16, size=2, color="red")

27

Page 28: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

Hombre

Mujer

0 10 20 30 40Salario

Gén

ero

# Opción 3

#cómo se distribuyen nuestras observaciones/individuos respecto del diagrama de caja# función position_jitter() Añade ruido para ver las observaciones

ggplot(CPS1985, aes(x=gender, y=wage, fill=gender) ) +geom_boxplot(alpha=0.3, outlier.colour = "blue") +labs(x="Género", y="Salario") +scale_x_discrete(labels=c("Hombre","Mujer")) +guides(fill=FALSE) +coord_flip() +geom_point(stat= "summary", fun.y=mean, shape=16, size=4, color="red") +geom_point(position = position_jitter(width = 0.1), alpha = 0.2)

28

Page 29: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

Hombre

Mujer

0 10 20 30 40Salario

Gén

ero

# Opción 4# podemos utilizar la geometría geom_jitter().ggplot(CPS1985, aes(x=gender, y=wage, fill=gender) ) +

geom_boxplot(alpha=0.3, outlier.colour = "blue") +labs(x="Género", y="Salario") +scale_x_discrete(labels=c("Hombre","Mujer")) +guides(fill=FALSE) +coord_flip() +geom_point(stat= "summary", fun.y=mean, shape=16, size=4, color="red") +geom_jitter(width = 0.1, alpha = 0.2)

29

Page 30: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

Hombre

Mujer

0 10 20 30 40Salario

Gén

ero

Un poco de práctica: Boxplot

-Representad el diagrama de caja del salario (wage) en función de la ocupación (occupation).

Asistente para definir el tema en ggplot

Este paquete lo que nos facilita es la edición del tema, la libreria ggThemeAssist. Dentro de ella existe unaddin para ggplot que facilitaba mucho mucho la tarea de mejorar el aspecto estético de los gráficos (el temadel gráfico)

Para ello, una vez cargado el paquete, seleccionamos el código del gráfico que queremos customizary, acontinuación, del menú Addins seleccionamos el Addin ggplot Theme Assistant.#install.packages("ggThemeAssist")library(ggplot2)data(mtcars)gg<-ggplot(mtcars, aes(x=hp,y=mpg, colour=cyl))+ geom_point()gg

Para ver como funciona aqui teneis una animación

https://raw.githubusercontent.com/calligross/ggthemeassist/master/examples/ggThemeAssist2.gif

De todas fomas, la mejor forma de aprender es viendo cómo cambian las cosas en un gráfico cualquiera.

Para acabar, hacer clic en el botón Done y se generará el código R del gráfico.

30

Page 31: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

Ejemplo de gráfico. Visualización interactiva

Para que nos hagamos una idea de las posibilidades que ofrece R, tanto en el tratamiento como en lavisualización de datos, aquí os dejamos este ejemplo que podéis encontrarlo en el tutorial del paquete Eurostat<(https://github.com/rOpenGov/eurostat)>.library(dplyr)library(eurostat)library(sf)library(tmap)

# Cargamos los datos de eurostat

sp_data <- eurostat::get_eurostat("tgs00026",time_format = "raw",

stringsAsFactors = FALSE) %>%# subset to have only a single row per geodplyr::filter(time == 2010, nchar(geo) == 4) %>%# categorisedplyr::mutate(income = cut_to_classes(values, n = 5))

# Descargamos los datos geoespacioales de GISCOgeodata <- get_eurostat_geospatial(output_class = "sf",

resolution = "60",nuts_level = 2,year = 2013)

# unimos los datosmap_data <- inner_join(geodata, sp_data)

# Ahora se construye el mapamap1 <- tmap::tm_shape(geodata) +

tmap::tm_fill("lightgrey") +tmap::tm_shape(map_data) +tmap::tm_grid() +tmap::tm_polygons("income", title = "Disposable household\nincomes in 2010",

palette = "Oranges")print(map1)

# Interactive#tmap_mode("view")#map1

Material complementario de Gráficos

http://rparamuyprincipiantes.blogspot.com/2015/07/paquete-ggplot2-grafico-de-barras-i-stat.html

31

Page 32: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

Objetivo 4: Tablas

Introducción

La elaboración de tablas para mostrar resultados es una parte importante (y time consuming) de cualquierinforme o investigación.

• Se empleará y reforzará el uso de la libreria dplyr.

• Con dplyr calcularemos los estadísticos que queramos mostrar almacenándolos en un dataframe.

-Una vez tengamos los resultados en un dataframe nos quedará la tarea de presentarlos como tablas en eldocumento final.

-Para ello, sólo tendremos que llamar a la función kable().

Kable nos permitirá mostrar los resultados como tablas en el documento final, ya sea este un documento .html, .pdf, .doc, . . .

Ejemplos de tablas

#install.packages("kableExtra")kable(x, format, digits = getOption("digits"), row.names = NA,col.names = NA, align, caption = NULL, label = NULL,format.args = list(), escape = TRUE, ...)

knitr::kable(head(mtcars[, 1:4]), "pandoc")

mpg cyl disp hpMazda RX4 21.0 6 160 110Mazda RX4 Wag 21.0 6 160 110Datsun 710 22.8 4 108 93Hornet 4 Drive 21.4 6 258 110Hornet Sportabout 18.7 8 360 175Valiant 18.1 6 225 105

# generate tables in HTML,#knitr::kable(mtcars[1:2, 1:2], "html")

Cambiando formato columna de una tabla

-Usando la funcion col.names subtituimos los nombre de la columnas (variables) con un vector con “nuevosnombres”#Opcion 1: Subtituimos puntos por espacins en la columna nombre :iris2 <- head(iris)iris2

## Sepal.Length Sepal.Width Petal.Length Petal.Width Species## 1 5.1 3.5 1.4 0.2 setosa## 2 4.9 3.0 1.4 0.2 setosa## 3 4.7 3.2 1.3 0.2 setosa## 4 4.6 3.1 1.5 0.2 setosa

32

Page 33: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

## 5 5.0 3.6 1.4 0.2 setosa## 6 5.4 3.9 1.7 0.4 setosaknitr::kable(iris2, col.names = gsub("[.]", " ", names(iris)),"pandoc")

Sepal Length Sepal Width Petal Length Petal Width Species5.1 3.5 1.4 0.2 setosa4.9 3.0 1.4 0.2 setosa4.7 3.2 1.3 0.2 setosa4.6 3.1 1.5 0.2 setosa5.0 3.6 1.4 0.2 setosa5.4 3.9 1.7 0.4 setosa

# Opcion 2: Alineaciónknitr::kable(iris2, align = "lccrr","pandoc")

Sepal.Length Sepal.Width Petal.Length Petal.Width Species5.1 3.5 1.4 0.2 setosa4.9 3.0 1.4 0.2 setosa4.7 3.2 1.3 0.2 setosa4.6 3.1 1.5 0.2 setosa5.0 3.6 1.4 0.2 setosa5.4 3.9 1.7 0.4 setosa

# Opcion 3: Títuloknitr::kable(iris2, caption = "An example table caption.","pandoc")

Table 4: An example table caption.

Sepal.Length Sepal.Width Petal.Length Petal.Width Species5.1 3.5 1.4 0.2 setosa4.9 3.0 1.4 0.2 setosa4.7 3.2 1.3 0.2 setosa4.6 3.1 1.5 0.2 setosa5.0 3.6 1.4 0.2 setosa5.4 3.9 1.7 0.4 setosa

-Alineación. Se puede alinear columna a columna con un vector con los siguientes “códigos” de caracterescomo argumentos l (left), c (center), and r (right)

-Titulo: Añadir titulo con el argumento caption argument, e.g.

Cambiando formatos numéricos de una tabla

Podemos formatear los valores numericos conlas funciones round(),format(),o con el argumento digits

-Missings: NA. Pueden ser subtituidos, o elegir no mostrarlos (i.e., leave the NA cells empty) :#generamos tabla con valoresd <- cbind(X1 = runif(3), X2 = 10^c(3, 5, 7), X3 = rnorm(3,

0, 1000))

33

Page 34: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

# Opcion1: 4 decimalesknitr::kable(d, digits = 4)

# Opcion2: round de las columnas de forma independienteknitr::kable(d, digits = c(5, 0, 2))

# Opcion3: No uso de scientific notationknitr::kable(d, digits = 3, format.args = list(scientific = FALSE))

# Opcion4 :Añadir separador de milesknitr::kable(d, digits = 3, format.args = list(big.mark = ",",scientific = FALSE))

Tablas con caracteres especiales

#generamos tabla básicam <- lm(dist ~ speed, data = cars)d <- coef(summary(m))knitr::kable(d)

Estimate Std. Error t value Pr(>|t|)(Intercept) -17.579095 6.7584402 -2.601058 0.0123188speed 3.932409 0.4155128 9.463990 0.0000000

# Opcion1: Añadimos coeficientes# add a few math expressions to row and column namesrownames(d) <- c("$\\beta_0$", "$\\beta_1$")colnames(d)[4] <- "$P(T > |t|)$"knitr::kable(d, escape = FALSE)

Estimate Std. Error t value P (T > |t|)β0 -17.579095 6.7584402 -2.601058 0.0123188β1 3.932409 0.4155128 9.463990 0.0000000

knitr::kable(list(

head(cars, 3),head(mtcars[, 1:3], 5)

),caption = 'Two tables placed side by side.',booktabs = TRUE, valign = 't'

)

34

Page 35: R basic Course (Session 4)stel.ub.edu/sites/default/files/agenda/documents/rcourse4student.pdf · -tipo de línea (linetype)-tamaño (size)-Objetosgeométricos(Geom)representanloquevemosenungráficos(puntos,líneas,etc.).Todográfico

Table 7: Two tables placed side by side.

speed dist4 24 107 4

mpg cyl dispMazda RX4 21.0 6 160Mazda RX4 Wag 21.0 6 160Datsun 710 22.8 4 108Hornet 4 Drive 21.4 6 258Hornet Sportabout 18.7 8 360

35