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.

Replicación en las ciencias sociales

“La legitimidad del trabajo publicado depende de si es que se puede replicar su análisis y llegar a las mismas conclusiones” (Janz, 2015, p. 1).

  • Dos conceptos clave (Janz, 2015):

    • Reproducibilidad. Capacidad de una investigación de mantener sus resultados luego de un reanálisis. Los/as autores/as pueden aumentar esta capacidad poniendo a disposición información sistematizada sobre su análisis (proceso de recolección de datos, bases de datos, códigos / otros procedimientos).
    • Replicación. Proceso de reanálisis de las hipótesis y resultados de una investigación, con el fin de confirmar o cuestionar los resultados.
  • ¿Cuál es la relevancia de la replicación? Siguiendo a Janz (2015):

    • Permite comprobar los resultados y minimizar errores.
    • Las replicaciones pueden añadir valor a los resultados originales, por ejemplo, actualizando datos, realizando pruebas de robustez, explorando nuevas hipótesis alternativas.
    • La posibilidad de replicación es un mecanismo de accountability: puede servir para prevenir malas prácticas en la investigación
  • Aunque el movimiento por la replicación en ciencia política es usualmente asociado a la investigación cuantitativa (véase King, 1995), en la última década este se ha expandido a los estudios de métodos mixtos y cualitativos (por ejemplo, véase Dunning & Rosenblatt, 2016; Piñeiro & Rosenblatt, 2016).

  • Los esfuerzos por la reproducibilidad pueden separarse en tres dimensiones: transparencia en datos, transparencia en producción, transparencia en análisis (Corti, 2018).

Dimensiones de la reproducibilidad, con aplicaciones según enfoque metodológico. Fuente: [Corti (2018)](http://blog.ukdataservice.ac.uk/show-me-the-data/).

Figure 2: Dimensiones de la reproducibilidad, con aplicaciones según enfoque metodológico. Fuente: Corti (2018).

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:

library(tidyverse)

¿Y si queremos correr un comando sin mostrar sus mensajes explicativos en el reporte compilado? Ocupamos la opción message = F para el chunk.

library(tidyverse)

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:

datos_midwest <- read_csv("datos/midwest.csv")

Realicemos un gráfico sencillo:

ggplot(datos_midwest, aes(x = log(popdensity), y = percbelowpoverty)) +
  geom_point()

¿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.

lakers <- lakers
head(lakers)
##       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.

glimpse(datos_midwest)

(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