[RDS] Ejercicios resueltos para la sección 3.6.1

Continuamos con la serie de ejercicios resueltos para el weblibro “R for Data Science“, al que podéis acceder desde este enlace. En esta ocasión nos ocuparemos de la sección 3.6.1, correspondiente a los problemas que se ocupan de dar a conocer algunos de los diferentes elementos geométricos que la librería ggplot2 pone a nuestra disposición (los famosos geoms).

# 1. What geom would you use to draw a line chart?
#    A boxplot?
#    A histogram?
#    An area chart?

library(tidyverse)

?geom_line
?geom_boxplot
?geom_histogram
?geom_area

No podemos más que reconocer que la elección de nombres para los distintos elementos geométricos que incorpora este paquete es bastante intuitiva. Si tenemos cierta sospecha sobre cómo se denomina el gráfico (en inglés, por supuesto) que estamos interesados en generar, seguramente tengamos que añadir la palabra correspondiente tras geom_ para tener acceso a él.

# 2. Run this code in your head and predict what
#    the output will look like.
#    Then, run the code in R and check your predictions.

ggplot(data = mpg, mapping = aes(x = displ, y = hwy, color = drv)) +
    geom_point() +
    geom_smooth(se = FALSE)

Hemos escogido el conjunto de datos mpg, del que estamos interesados en representar un gráfico que enfrente la cilindrada del motor de un vehículo (displ) contra el número de millas, por galón, recorridas en autopista por ese mismo vehículo (hwy). Por otro lado, buscamos, para los elementos geométricos que vamos a incorporar a la figura, que exista una separación por colores en función de los distintos sistemas de tracción disponibles (drv).

Ahora bien, como elementos geométricos, hemos escogido la representación de un diagrama de puntos o dispersión (geom_point()), al que añadiremos distintas tendencias “suavizadas” (geom_smooth()), que representaremos sin bandas confidenciales (se = FALSE).

ej-3-6-1-2-1

# 3. What does show.legend = FALSE do?
#    What happens if you remove it?
#    Why do you think I used it earlier in the chapter?

ggplot(data = mpg) +
    geom_smooth(mapping = aes(x = displ, y = hwy, colour = drv),
                show.legend = FALSE)

ej-3-6-1-3-1

El parámetro show.legend se encarga de controlar si aparece o no la leyenda de un gráfico. De esta manera, si determinamos su valor como FALSE la figura no presentará leyenda.

Por lo que respecta a la motivación que ha llevado a los autores a optar por su uso (y teniendo en cuenta que este tipo de preguntas siempre son un tanto complicadas de responder con precisión), personalmente opino que quizá hayan suprimido la leyenda para que las tres imágenes que aparecen en línea fuesen comparables de forma más sencilla. Por otro lado, es posible que el objetivo fuera dejar patente que con group no se genera leyenda automáticamente, pero sí con color.

# 4. What does the se argument to geom_smooth() do?

?geom_smooth

Si accedemos a la documentación para la función de interés, podemos ver como el parámetro se nos permite controlar el nivel de confianza de las bandas confidenciales (siendo un 95% su valor por defecto) que puede incorporar este elemento geométrico.

Veamos un par de ejemplos:

ggplot(data = mpg, mapping = aes(x = displ, y = hwy, color = drv)) +
    geom_point() +
    geom_smooth(se = FALSE)

ej-3-6-1-4-1

ggplot(data = mpg, mapping = aes(x = displ, y = hwy, color = drv)) +
    geom_point() +
    geom_smooth()

ej-3-6-1-4-2

# 5. Will these two graphs look different? Why/why not?

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
    geom_point() +
    geom_smooth()

ej-3-6-1-5-1

ggplot() +
    geom_point(data = mpg, mapping = aes(x = displ, y = hwy)) +
    geom_smooth(data = mpg, mapping = aes(x = displ, y = hwy))

ej-3-6-1-5-2

En realidad, los anteriores bloques de código generan la misma figura. No obstante, de cara al mantenimiento, es recomendable que utilicemos la primera opción, puesto que los datos esenciales están agrupados en la primera instrucción. En caso de tener que llevar a cabo una modificación en un futuro, la cantidad de cambios a realizar utilizando el segundo método es mayor (problema que se agravaría si utilizásemos esta filosofía con un número considerable de elementos geométricos).

# 6. Recreate the R code necessary to generate the following graphs

Nota previa: aunque he intentado ser lo más fiel posible a la hora de reproducir las imágenes que aparecen en el enunciado, algún mecanismo interno me ha impedido representar los puntos y las líneas con el grosor que allí aparecen, porque el resultado lo consideraba más bien poco estético.

No obstante, creo que optando por declarar size = 5 para el tamaño de los puntos, y size = 3 para el grosor de las curvas de tendencia, deberían quedar completamente reproducidos los gráficos.

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
    geom_point(size = 4) +
    geom_smooth(se = FALSE, size = 2)

ej-3-6-1-6-1

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
    geom_point(size = 4) +
    geom_smooth(mapping = aes(group = drv), se = FALSE, size = 2)

ej-3-6-1-6-2

ggplot(data = mpg, mapping = aes(x = displ, y = hwy, color = drv)) +
    geom_point(size = 4) +
    geom_smooth(se = FALSE, size = 2)

ej-3-6-1-6-3

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
    geom_point(mapping = aes(color = drv), size = 5) +
    geom_smooth(se = FALSE, size = 2)

ej-3-6-1-6-4

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
    geom_point(mapping = aes(color = drv), size = 5) +
    geom_smooth(mapping = aes(linetype = drv), se = FALSE, size = 2)

ej-3-6-1-6-5

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
    geom_point(mapping = aes(color = drv), size = 5)

ej-3-6-1-6-6

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s