Capítulo 8 Comunicación

El trabajo estadístico no termina cuando entendemos la estructura de los datos. Nuestro trabajo estará incompleto a menos que logremos llevar aquello que destilamos de la evidencia a la combinación correcta de palabras e imágenes que logren recrear el mensaje en otra mente.

La mayoría de los usos a continuación son explotados a su máxima expresión si se posee cierta familiaridad con los sistemas de control de versiones (por ejemplo, GIT) y plataformas online basadas en dichos sistemas (por ejemplo, GitHub). Dicho material excede a la complejidad de este libro18. Sin embargo, los principios generales que desarrollo a continuación son independientes de los sistemas de control de versiones.

8.1 Ciencia reproducible

Uno de los grandes motores detrás de la ciencia reproducible es el acceso a abierto a los datos y el código que se utilizó para analizarlos. La ventaja de realizar ciencia abierta de este modo es la disminución de errores de procedimiento que quedan escondidos en una computadora a la que nadie tiene acceso. Por ejemplo, un error de tipeo en una fórmula en Excel puede pasar desapercibido y llevar a conclusiones erróneas. Errores en planillas de Excel son muy complicados de hallar.

Aunque parezca extremo, existen casos documentados de este tipo.

8.2 Gráficos

En un capítulo anterior realizamos análisis exploratorios. Como nuestro objetivo era entender los datos de manera rápida (ver Sección 4.3), dichos análisis no se focalizaron en comunicar visualmente hacia un externo o consumidor. Retomemos el dataset del Titanic y hagamos un gráfico tipo waffle (también conocidos como gráficos tipo tile o azulejo).

# Si es la primera vez, vamos a necesitar unos cuantos paquetes
# install.packages("rlang")
# install.packages("stringi")
# install.packages("curl")
# install.packages("devtools")
# devtools::install_github("hrbrmstr/waffle")
# Paquete para hacer gráficos de tipo waffle
library(waffle)

library(tidyverse)
library(titanic)
# Calculamos supervivencia
sobrev <- titanic_train %>%
          group_by(Survived) %>%
          count() %>%
          ungroup()%>%
          mutate(Survived = c("No Sobrevivió", "Sobrevivió"))

# Waffle plot
waffle(sobrev, rows = 25, size = 1,
       colors = c("#1696d2", "#fdbf11"),
       legend_pos = "bottom")+
  labs(title = "Sobrevivientes del Titanic",
      subtitle = "1 cuadrado = 1 persona")

Este tipo de representaciones es común en los periódicos. Podemos recrear el gráfico por clase.

# Calculamos supervivencia por clase
sobrev2 <- titanic_train %>%
    group_by(Pclass, Survived) %>%
    count() %>%
    ungroup()%>%
    mutate(Survived = ifelse(Survived==0,"No Sobrevivió", "Sobrevivió"))

iron(
waffle(filter(sobrev2, Pclass==1) %>% select(-Pclass),
       rows = 10, size=1,
       colors = c("#1696d2", "#fdbf11"),
       legend_pos = "none")+
  labs(title = "Sobrevivientes del Titanic por clase",
      subtitle = "Primera clase"),
waffle(filter(sobrev2, Pclass==2) %>% select(-Pclass),
       rows = 10, size=1,
       colors = c("#1696d2", "#fdbf11"),
       legend_pos = "none")+
  labs(subtitle = "Segunda clase"),
waffle(filter(sobrev2, Pclass==3) %>% select(-Pclass),
       rows = 10, size=1,
       colors = c("#1696d2", "#fdbf11"),
       xlab = "1 cuadrado = 1 persona",
       legend_pos = "bottom")+
  labs(subtitle = "Tercera clase")
)

En la sección 7.5 detallamos paso a paso cómo podemos realizar mapas con calidad de publicación utilizando el paquete tm (por ejemplo, ver Figura 7.8).

8.3 RMarkdown

Markdown es un lenguage de marcado ligero que permite agregar marcajes sencillos al texto plano (.md), para convertirlo en un poderoso conjunto de operaciones que pueden exportarse a formatos de publicación profesional como .html, .pdf y .tex19. RMarkdown es la implementación de Markdown dentro de Rstudio. RMarkdown posee toda la funcionalidad de Markdown y además permite introducir trozos de código.

Los archivos de Rmarkdown son archivos de texto con extensión .Rmd. Podemos crearlos dentro de Rstudio desde el mismo menú con el que abrimos scripts.

Abrir una ventana de Rmd

Abrir una ventana de Rmd

Al abrirlo, un navegador nos permitirá seleccionar opciones (como el título, autor, etc). No me centraré en esa ventana debido a que todas estas opciones pueden modificarse en el encabezado del nuevo archivo .Rmd (ver Sección 8.8).

8.4 Texto

Markdown es un lenguaje que permite escribir de manera veloz, con muy pocas distracciones. La funcionalidad para editar la presentación de texto es limitada, pero es más que suficiente para el 99% de las cosas que necesitamos al escribir. Los siguientes ejemplos están ordenados segun cómo se escriben en Rmarkdown y cómo es el render.

Lo esencial es *invisible* a los ojos. \(\rightarrow\) Lo esencial es invisible a los ojos.
Lo esencial es **invisible** a los ojos. \(\rightarrow\) Lo esencial es invisible a los ojos.
Lo esencial es ~~in~~visible a los ojos. \(\rightarrow\) Lo esencial es invisible a los ojos.

Si tienes familiaridad con \(\LaTeX\) es posible utilizarlo para fórmulas matemáticas en línea con la frase que se está escribiendo. Por ejemplo, un supuesto de los modelos lineales generales es \(\mathcal{E}_i \sim \ \mathcal{N}(\mu,\,\sigma^{2})\). Utilzar \(\LaTeX\) en RMarkdown es tan sencillo como englobar el código utilizando el símbolo $. Si queremos utilizar una ecuación, por ejemplo, utilizamos los entornos \begin{equation} y \end{equation} y escribimos sin necesidad de utilizar el símbolo $.

Para utilizar resaltado tipo código en línea utilizamos palabras envueltas en backticks (`)20. Podemos utilizar código de R en la línea en la que estamos escribiendo de la forma r+espacio+función deseada. Por ejemplo, si combinamos con \(\LaTeX\) y le preguntamos a R cuánto es \(\pi\), nos dará el resultado en la misma línea así: \(\pi\) = 3.141592721.

8.5 Separando líneas y párrafos

La belleza de Rmarkdown es que acomoda el texto y las figuras automáticamente, por lo que no debemos preocuparnos por el número de líneas y demás problemas que aparecen con un editor de texto tradicional. Sin embargo, en ciertas ocasiones realmente deseamos forzar un quiebre, un espacio extra. Para separar párrafos, basta con terminar la línea que se está escribiendo con dos espacios. Por ejemplo,

No te des por vencido, ni aún vencido, no te sientas esclavo, ni aún esclavo;

Puede transformarse en:

No te des por vencido, ni aún vencido,
no te sientas esclavo, ni aún esclavo;

Si agregamos dos espacios entre las palabras deseadas22.

Las listas de objetos son un caso puntual muy útil:

# Listas no numeradas
* item 1
* item 2
+ item 3
* item 4
    * sub-item
    * sub-item

Se ve así:

  • item 1
  • item 2
  • item 3
  • item 4
    • sub-item
    • sub-item
# Listas numeradas
1. item 1
1. item 2
1. item 3
    a) item 3a
    a) item 3b

Se ve así:

  1. item 1
  2. item 2
  3. item 3
    1. item 3a
    2. item 3b

En las listas numeradas no debemos mantener la cuenta. Simplemente 1. y escribimos lo que necesitamos, Markdown hace el resto!

Otra posibilidad es utilizar texto resaltado. Para resaltar texto utilizamos el símbolo mayor (>) seguido de un espacio. Esta opción no es recomendada para uso extensivo, pero puede resaltar una frase corta de un modo interesante. Por ejemplo,

R es genial.

Cuando terminamos una sección o deseamos una marca física entre párrafos, podemos usar 3 asteriscos (*).

# Línea horizontal
***

Se ve:


8.6 Trozos de código

En Rmarkdown podemos mezclar texto y código de R. La siguiente imagen muestra cómo se ve en mi computadora:

El párrafo previo en mi editor

El párrafo previo en mi editor

Cuando estos trozos se agregan al documento final, corren en la consola de R y el output se incluye en los resultados. Por ejemplo, el siguiente trozo:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Para insertar trozos de código podemos hacer click en insert o mediante el comando rápido Ctrl+Alt+I.

8.8 Encabezado

Los encabezados son útiles para diversos archivos, ciertamente necesarios para la organización de documentos más complejos. Rmarkdown utiliza un encabezado conocido como YAML y tiene la siguiente forma:

--- 
title: "Un mundo feliz"
author: "Aldous Huxley"
date: "1932"
output: html_document
---

Por ejemplo, el encabezado de este libro es el siguiente23:

--- 
title: "Introducción a estadística con R"
author: "Matias Andina"
date: "2018-08-15"
site: bookdown::bookdown_site
documentclass: book
---

En este caso, la fecha la he creado con un llamado a la función Sys.Date() (r + espacio + Sys.Date()) que permite que cada vez que este libro se compila, se use la fecha de sistema para el compilado., De este modo, no tengo que actualizarlo manualmente cada vez que edito el libro.

8.9 Knit

Para armar el documento, debemos hacer click en knit. El producto final será un documento tipo .html que contenga todo el texto y las imágenes del archivo .Rmd.

8.10 Otros proyectos con RStudio

  • Presentaciones de diapositivas con Markdown y R presentation.
  • Usando el paquete blogdown, Websites como este
  • Usando el paquete bookdown, libros como éste (y otros!)

8.11 Notas

Mucha tecnología cotidiana detrás de los servicios de publicación está principalmente desarrollada alrededor del idioma inglés. Problemas inesperados pueden aparecer incluso cuando hacemos todo bien utilizando R, Rstudio y Rmarkdown. Por ejemplo, mientras escribía este libro tuve un problema con el nombre de mis archivos que contenían tilde (por ejemplo, el archivo de este capítulo era “Comunicación.Rmd”). La inconveniente ó provocó que el link a ciertas imágenes del capítulo (www. .../Comunicación/imagen-01.png) no pudiera ser encontrado y dichas imágenes no aparecieran. La solición de compromiso es (como en muchas otras direcciones de internet) no utilizar caracteres que no existen en inglés (por ejemplo, la ñ, o palabras con tildes).

8.12 Recursos

  • Cheatsheet oficial de Rmarkdown en español por Rstudio aquí
  • Buen material sobre visualización con ggplot2 aquí

  1. Puedes aprender sobre GIT aquí

  2. Puedes encontrar más información sobre Markdownaquí

  3. Los backtics son difícilies de encontrar en el teclado en español, puedes probar ALT+96.

  4. Para lograr esto el formato debe ser $\pi$ = 3.1415927

  5. Normalmente suelo agregar un enter y escribir en la siguiente línea. Aunque no es necesrario, me ayuda a visualizar el render antes de tiempo.

  6. El encabezado que muestro es una porción que es comparable con un documento clásico. El encabezado real contiene ciertas especificaciones para que este libro pueda ser publicado online y entiendo que no aportan al ejemplo.