10A - Replicación
Si quieres correr estos scripts localmente, acá puedes descargar el proyecto comprimido en .zip. Paquetes que necesitas tener instalados antes de comenzar con el proyecto:
tidyverse
,kableExtra
.
El rol del código (y R Markdown) en reproducibilidad y replicación
El código permite reproducir exactamente los procedimientos que procesan los datos para convertirlo en resultados (modelos, gráficos, etc.). Esto es, transparencia analítica.
Además, como vimos en la primera clase, gracias al código:
- Podemos repetir nuestros análisis todas las veces que queramos, con las modificaciones que queramos.
- Podemos automatizar procesos tediosos.
- Podemos compartir la totalidad de nuestro flujo de trabajo con colegas.
- Podemos buscar ayuda con facilidad: nuestro código es igual de transparente que el de los/as demás, y los mensajes de error están estandarizados.
R Markdown ofrece la posibilidad de generar reportes reproducibles. Esto no solo incluye el código, sino que también el texto mismo. No necesitamos tener el código en un script (R, Stata, SPSS, etc.) y nuestro reporte en otro (Word, Google Docs, etc.): todo está junto. Aparte de ser cómodo, esto tiene al menos dos ventajas (véase Frank & Hartgerink, 2017):
- Permite actualizar los reportes con facilidad. Esto baja sustantivamente el costo en tiempo de volver a correr un análisis, por lo que genera productos finales de mayor calidad. Además, permite generar reportes periódicos fácilmente.
- Evita errores de tipeo, en especial en la transcripción de tablas. Esto no es trivial, como evidencian Nuijten et al. (2016). Analizan 16,695 artículos de Psicología que realizan estadística inferencial (1985-2013). Sus conclusiones son muy sorprendentes: el 49.6% de los artículos tiene al menos una inconsistencia entre valor-p y estadístico/gl; y el 12.9% de los artículos tiene al menos una inconsistencia grave, en donde valor-p y estadístico/gl apuntan en direcciones contrarias con respecto a la significancia.
(Ejercicio a)
¿Para qué problema/trabajo podría ser útil generar reportes periódicos con R Markdown? Por favor explica tu ejemplo en un párrafo:
R Markdown avanzado: opciones de chunks
La gracia de R Markdown es que muestra el código y los resultados (gráficos, tablas, mensajes de advertencia, etc.) en nuestro reporte compilado. A menudo es útil cambiar estos comportamientos para casos específicos, como veremos a continuación.
Carguemos el tidyverse
, como de costumbre:
¿Y si queremos correr un comando sin mostrar sus mensajes explicativos en el reporte compilado? Ocupamos la opción message = F
para el chunk.
Por cierto, la opción warning = F
es parecida, no mostrará mensajes de advertencia.
Ahora carguemos una base de datos. Voy a usar message = F
, para ahorrarme el mensaje explicativo en el reporte compilado:
Realicemos un gráfico sencillo:
¿Y si queríamos solo el gráfico, sin el código que lo genera? Ocupamos la opción echo = F
para chunk:
También podemos correr un bloque de código silenciosamente, sin mostrar ni el código ni su resultado en el reporte. Por ejemplo, ahora voy a hacer dos bloques, uno que cargue el paquete “lubridate” silenciosamente y otro que nos muestre una de sus bases de datos de prueba, “lakers”.
El primero lleva la opción include = F
.
## date opponent game_type time period etype team player result points type x y
## 1 20081028 POR home 12:00 1 jump ball OFF 0 NA NA
## 2 20081028 POR home 11:39 1 shot LAL Pau Gasol missed 0 hook 23 13
## 3 20081028 POR home 11:37 1 rebound LAL Vladimir Radmanovic 0 off NA NA
## 4 20081028 POR home 11:25 1 shot LAL Derek Fisher missed 0 layup 25 6
## 5 20081028 POR home 11:23 1 rebound LAL Pau Gasol 0 off NA NA
## 6 20081028 POR home 11:22 1 shot LAL Pau Gasol made 2 hook 25 10
Por último, si solo queremos mostrar un código, sin correrlo, podemos ocupar la opción eval = F
.
(Ejercicio b)
Vimos las siguientes opciones de chunk. ¿Qué hace cada una?
Opción | ¿Qué hace? |
---|---|
message = F |
No muestra mensajes explicativos que nuestro código genere. |
warning = F |
|
echo = F |
|
include = F |
|
results = "hide" |
? |
eval = F |