library(dplyr)
library(ggplot2)
library(plotly)
Para ver version html hacer click aquí.
Los gráficos deben ser parsimónicos, autexplicativos y minimalistas, pues su principal objetivo es que se pueda entender en poco tiempo. En general, todos los graficos en R deben:
pulse <- read.table( url( "https://raw.githubusercontent.com/edojimenez/r_datascience/main/Pulse.txt" ), header = TRUE, sep = "\t", fileEncoding="utf-16")
Revisamos la base de datos
str(pulse)
## 'data.frame': 110 obs. of 13 variables:
## $ id : chr "1993_A" "1993_B" "1993_C" "1993_D" ...
## $ name : chr "Bonnie" "Melanie" "Consuelo" "Travis" ...
## $ height : int 173 179 167 195 173 184 162 169 164 168 ...
## $ weight : num 57 58 62 84 64 74 57 55 56 60 ...
## $ age : int 18 19 18 18 18 22 20 18 19 23 ...
## $ gender : chr "female" "female" "female" "male" ...
## $ smokes : chr "no" "no" "no" "no" ...
## $ alcohol : chr "yes" "yes" "yes" "yes" ...
## $ exercise: chr "moderate" "moderate" "high" "high" ...
## $ ran : chr "sat" "ran" "ran" "sat" ...
## $ pulse1 : int 86 82 96 71 90 78 68 71 68 88 ...
## $ pulse2 : int 88 150 176 73 88 141 72 77 68 150 ...
## $ year : int 1993 1993 1993 1993 1993 1993 1993 1993 1993 1993 ...
summary(pulse)
## id name height weight
## Length:110 Length:110 Min. : 68.0 Min. : 27.00
## Class :character Class :character 1st Qu.:165.2 1st Qu.: 56.25
## Mode :character Mode :character Median :172.5 Median : 63.00
## Mean :171.6 Mean : 66.33
## 3rd Qu.:180.0 3rd Qu.: 75.00
## Max. :195.0 Max. :110.00
##
## age gender smokes alcohol
## Min. :18.00 Length:110 Length:110 Length:110
## 1st Qu.:19.00 Class :character Class :character Class :character
## Median :20.00 Mode :character Mode :character Mode :character
## Mean :20.56
## 3rd Qu.:21.00
## Max. :45.00
##
## exercise ran pulse1 pulse2
## Length:110 Length:110 Min. : 47.00 Min. : 56.0
## Class :character Class :character 1st Qu.: 68.00 1st Qu.: 72.0
## Mode :character Mode :character Median : 76.00 Median : 84.0
## Mean : 75.69 Mean : 96.8
## 3rd Qu.: 82.00 3rd Qu.:125.0
## Max. :145.00 Max. :176.0
## NA's :1 NA's :1
## year
## Min. :1993
## 1st Qu.:1995
## Median :1996
## Mean :1996
## 3rd Qu.:1997
## Max. :1998
##
Los estudiantes de una clase de introducción a la estadística (MS212 impartida por el profesor John Eccleston y el Dr. Richard Wilson en la Universidad de Queensland) participaron en un experimento sencillo. Los estudiantes tomaron su propio pulso. Luego se les pidió que lanzaran una moneda al aire. Si la moneda salía cara, debían correr en su lugar durante un minuto. De lo contrario, se sentaron durante un minuto. Entonces todos volvieron a tomarse el pulso. Las frecuencias del pulso y otros datos fisiológicos y de estilo de vida se muestran en los datos.
Cinco grupos de clases entre 1993 y 1998 participaron en el experimento. Al conferencista, Richard Wilson, le preocupaba que algunos estudiantes eligieran la opción menos extenuante de sentarse en lugar de correr incluso si su moneda saliera cara, por lo que en los años 1995-1998 se utilizó un método diferente de asignación aleatoria. En estos años, los formularios de datos se entregaron a la clase antes del experimento. Los formularios fueron preasignados para ejecutar o no ejecutar y había un número igual de cada uno. En 1995 y 1998 no se devolvieron todos los formularios, por lo que aún no se controlaba por completo la cantidad de personas que estaban sentadas y corriendo.
Variables: • Height - Height (cm) • Weight - Weight (kg) • Age - Age (years) • Gender - Sex (1 = male, 2 = female) • Smokes - Regular smoker? (1 = yes, 2 = no) • Alcohol - Regular drinker? (1 = yes, 2 = no) • Exercise - Frequency of exercise (1 = high, 2 = moderate, 3 = low) • Ran - Whether the student ran or sat between the first and second pulse measurements (1 = ran, 2 = sat) • Pulse1 - First pulse measurement (rate per minute) • Pulse2 - Second pulse measurement (rate per minute) • Year - Year of class (93 - 98)
Primero, haremos un gráfico que muestre la relación entre la edad y el peso
ggplot( pulse, aes( x = age, y = weight ) ) +
geom_point() + theme_bw() + labs(title= " Relación entre el peso y la edad")
ggplot( pulse, aes( x = age, y = weight ) ) +
geom_point( aes( color = exercise ) ) + theme_bw() + labs(title= " Relación entre el peso y la edad")
ggplot( pulse, aes( x = age, y = weight ) ) +
geom_point( aes( color = exercise, shape = gender )) + theme_bw() + labs(title= " Relación entre el peso y la edad")
Ahora, haremos el gráfico interactivo
ggplotly(ggplot( pulse, aes( x = age, y = weight ) ) +
geom_point( aes( color = exercise, shape = gender ) ) + theme_bw() + labs(title= " Relación entre el peso y la edad"))
ggplot( pulse, aes( x = age, y = weight ) ) +
geom_point( aes( color = exercise, shape = gender )) +
facet_wrap( . ~ year ) + theme_bw() + labs(title= " Relación entre el peso y la edad")
ggplot( pulse, aes( x = height, y = weight ) ) +
geom_point( aes( color = exercise, shape = gender, size= age)) +
facet_wrap( ~ year ) + theme_bw() + labs(title= " Relación entre el peso y la altura")
face_wrap()Piensen en facet_wrap() como una cinta de gráficos que organiza los paneles en filas y columnas y elige el diseño que mejor se adapta al número de paneles.
facet_grid()En lugar de permitir que facet_wrap() decida el diseño de filas y columnas, puede usar facet_grid() para la organización y personalización.
La sintaxis sigue el patrón facet_grid(row_variable ~ column_variable) y podemos aplicar esta sintaxis a cualquier gráfico.
Hacer un grafico que tenga como eje x el pulso 1, como y el pulso 2, y que se pueda distinguir los resultados por sexo y que los puntos se diferencien por color para identificar si toma alcohol o no. El gráfico además debe tener título
ggplot(pulse, aes(x=pulse1 ,y=pulse2)) + geom_point(aes(color = alcohol)) + theme_bw() + facet_wrap(.~ gender) + labs(title = "Relación entre pulso 1 y pulso 2 (antes y después del experimento)")
## Warning: Removed 1 rows containing missing values (geom_point).
ggplot( pulse, aes( x = pulse1 ) ) +
geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 1 rows containing non-finite values (stat_bin).
ggplot( pulse, aes( x = pulse2 ) ) +
geom_histogram( binwidth = 10, boundary = 100 ) + theme_bw()
## Warning: Removed 1 rows containing non-finite values (stat_bin).
ggplot( pulse ) +
geom_histogram( aes( x = pulse1 ), alpha = 0.3, fill = "blue", binwidth = 10, boundary = 100 ) +
geom_histogram( aes( x = pulse2 ), alpha = 0.3, fill = "red", binwidth = 10, boundary = 100 ) + theme_bw()
## Warning: Removed 1 rows containing non-finite values (stat_bin).
## Warning: Removed 1 rows containing non-finite values (stat_bin).
ggplot( pulse, aes( x = exercise, y = age ) ) +
geom_boxplot()
ggplot( pulse, aes( x = exercise, y = age, color = gender ) ) +
geom_boxplot() + theme_bw()
ggplot( pulse, aes( x = pulse1, y = pulse2) ) +
geom_line()
## Warning: Removed 1 row(s) containing missing values (geom_path).
ggplot( pulse, aes( x = pulse1, y = pulse2, color = ran ) ) +
geom_line() + theme_bw()
## Warning: Removed 1 row(s) containing missing values (geom_path).
ggplot( pulse, aes( x = pulse1, y = pulse2, color = ran ) ) +
geom_line() +
geom_point( aes( shape = exercise )) + theme_bw()
## Warning: Removed 1 row(s) containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_point).
ggplot( pulse, aes( x = pulse1, y = pulse2, color = ran ) ) +
geom_line() +
geom_text( aes( label = name ), size = 3, angle = -45, alpha = 0.8 ) + theme_bw()
## Warning: Removed 1 row(s) containing missing values (geom_path).
## Warning: Removed 1 rows containing missing values (geom_text).
Haremos un gráfico solo de los hombres que fuman, que muestre su pulse1 promedio dependiendo si hacen ejercicio o no.
pulse %>% filter(gender=="male" & smokes=="yes") %>% group_by(exercise) %>% summarise(promedio=mean(pulse1, na.rm = TRUE)) %>% ggplot( aes(x=exercise, y=promedio)) + geom_bar(stat = "identity") + theme_bw()
Tomar aquellos que tienen menos de 30 años, y graficar el promedio por sexo del pulse1 dependiendo si hacen ejercicio o no y que sea interactivo.