class: front .pull-left-wide[ # Estadística Correlacional] .pull-right-narrow[![:scale 85%](img/logo-correlacional-transp.png)] ## Inferencia, asociación y reporte ---- .pull-left[ ## Juan Carlos Castillo ## Sociología FACSO - UChile ## 2do Sem 2024 ## [.orange[correlacional.netlify.app]](https:/correlacional.netlify.app) ] .pull-right-narrow[ .center[ .content-block-gray[ ## .gray[Sesión 13:] ## .curso[Escritura en documentos dinámicos y reproducibilidad]] ] ] --- layout: true class: animated, fadeIn --- class: middle center ![:scale 95%](https://github.com/lisa-coes/lisa-book/blob/main/images/lisa.png?raw=true) ### .medium[**.black[Laboratorio de Investigación Social] .red[Abierta]]** ### [.red[lisa-coes.com]](https://lisa-coes.com/) --- class: inverse .pull-left-narrow[ # **.orange[Programa]** ] .pull-right-wide[ ## A. Reproducibilidad ## B. Texto plano y Markdown ## C. RMarkdown ## D. Protocolos reproducibles ] --- class: inverse .pull-left-narrow[ # **.orange[Programa]** ] .pull-right-wide[ ## .yellow[A. Reproducibilidad] ## B. Texto plano y Markdown ## C. RMarkdown ## D. Protocolos reproducibles ] --- ## Ciencia abierta <br> ![](img/flujo-herramientas.png) --- class: center ![:scale 80%](https://cienciasocialabierta.netlify.app/slides/02-bases_ciencia_abierta/reproducible-replicable-robust-generalisable.jpg) --- ## ¿Qué porcentaje de los estudios publicados son reproducibles? .pull-left-wide[ ![:scale 95%](img/reproducibility_science.png) ] .pull-right-narrow[ <br> <br> <br> <br> <br> <br> ... alrededor de un **40%!** (... varía por disciplina) ] --- class: center ![](img/nature-reproducibility-crisis.jpeg) .small[ Fuente: [Baker (2016) 1,500 scientists lift the lid on reproducibility - Nature](https://www.nature.com/news/1-500-scientists-lift-the-lid-on-reproducibility-1.19970)] --- class: middle, center ![](https://juancarloscastillo.github.io/in-socabi/images/peng_spectrum.png) --- ## Elementos para la .red[reproducibilidad] - Escritura abierta: - texto simple/plano, libre de software comercial - citas - documentos dinámicos -- - Flujo de trabajo documentado y reproducible -- - Carpeta de proyecto autocontenida y transferible -- - Repositorio con datos y código de análisis abierto -- - Control de versiones --- class: inverse .pull-left-narrow[ # **.orange[Programa]** ] .pull-right-wide[ ## A. Reproducibilidad ## .yellow[B. Texto plano y Markdown] ## C. RMarkdown ## D. Protocolos reproducibles ] --- ## Flujo de trabajo con procesador de texto tradicional .center[ ![:scale 70%](img/W_workflow.png) ] --- ## Abriendo el archivo de escritura tradicional ![](img/realWord.png) --- ## Desventajas del procesador tradicional .pull-left-wide[ .medium[ - Barrera de **pago/licencia** para acceder a contenidos (propiedad) - Difícil **versionamiento** y llevar registro de quién hizo qué cambio, barrera a la reproducibilidad y colaboración - No permite un documento enteramente **reproducible** que combine texto y código de análisis (en caso de utilizarlo) ] ] .pull-right-narrow[ <br> <br> ![](img/word.jpg) ] --- .pull-left-narrow[ ## Escritura libre y abierta ] .pull-right-wide[ .content-box-red[ - independiente de programa comercial - independiente de plataformas específicas - permite combinar texto y análisis en un mismo documento - foco en los contenidos en lugar del formato - permite distintas opciones de formato final]] --- # Inspiración .center[ ![](img/bowers&healey.png)] --- ## Funcionamiento de escritura simple / plana .content-box-red[ - entorno: editor de texto - separación entre texto de entrada (input) y texto de salida (output) - foco en el input/contenido vs output/formato - marcas de edición: vínculo entre formato de input y output - sin cortar / pegar ] --- # Marcas de edición - Vínculo entre escritura en texto simple (input) y output ![](img/marcas-edi.png) --- ## Principales Alternativas escritura simple .left-column[ ## **Latex** ## .grey[Markdown] ] .right-column[ - sistema de escritura simple de amplio uso en la academia - alta calidad en salida a pdf - creado a comienzos de los 80 (Donald Knuth, Leslie Lamport) ] --- ## Principales Alternativas escritura simple .left-column[ ## **Latex** ## .grey[Markdown] ] .right-column[ ![](img/latex.jpg) ] --- ## Principales Alternativas escritura simple .left-column[ ## .grey[Latex] ## **Markdown** ] .right-column[ .medium[ - creado por John Gruber y Aaron Swartz en 2004 - forma de escritura simple con pocas marcas de formato - conversión a distintos formatos de salida (html, pdf) - Soporta encabezados, tablas, imágenes, tablas de contenidos, ecuaciones, links ... - filosofía: foco en contenido primero, el formato después. ] ] --- ## Principales Alternativas escritura simple .left-column[ ## .grey[Latex] ## **Markdown** ] .right-column[ .right[ ![:scale 70%](https://jc-castillo.com/documents/talleres-cursos/markdown-mexico/slides/Markdown-mark.png)] ] --- ## Principales Alternativas escritura simple .left-column[ ## .grey[Latex] ## **Markdown** ] .right-column[ .right[ ![:scale 100%](img/markdownpreview.png) ]] --- ## Principales Alternativas escritura simple <br> | | **Control de formato** | **Marcas de edición** | **Formatos de salida** | |---------- |:--------------------:|:----------------:|:--------------------:| | LaTeX | + | + | - | | Markdown | - | - | + | --- ## Markdown, pandoc y renderización ![:scale 90%](img/pandoc.png) --- ## Ejemplos de marcas de edición en Markdown .content-box-red[ - Texto en **negrita** entre dos astericos: `**negrita**` - Texto en *cursiva* con un asterico por lado: ` *cursiva*` - Títulos se marcan con `#` al principio, subtítulos `##` , y así sucesivamente - Imágenes: `![](ruta-a-imagen)` - Links: `[](link-web)`] --- .content-box-red[ # Práctica ] - [.blue[Tutorial de markdown online]](https://www.markdowntutorial.com/es/) - [.blue[Markdown cheatsheet]](https://www.markdownguide.org/cheat-sheet/) --- class: inverse .pull-left-narrow[ # **.orange[Programa]** ] .pull-right-wide[ ## A. Reproducibilidad ## B. Texto plano y Markdown ## .yellow[C. RMarkdown] ## D. Protocolos reproducibles ] --- ## Problemas de reproducibilidad en documentos de investigación .pull-left[ - Proceso tradicional: cortar y pegar resultados en el documento de texto - Dificulta la **reproducibilidad**: ¿de dónde salieron esos resultados? ] .pull-right[ .center[ ![:scale 60%](img/copypaste.png) ] ] --- ## Desafiando el modelo cortar & pegar .content-box-red[ - **Ideal de reproducibilidad**: documento donde se combine texto y código que genera resultados presentados. - **Limitación procesadores de texto**: no permiten incorporar código & resultados de manera eficiente - **Limitación software de análisis**: permiten incorporar texto solo en un formato plano, no publicable] --- class: roja, bottom, right # RMarkdown --- # RMarkdown: Acepciones .pull-left-narrow[ ![:scale 80%](https://bookdown.org/yihui/rmarkdown/images/hex-rmarkdown.png) ] .pull-right-wide[ - Lenguaje que combina código (R) y texto (Markdown) - Hoja de código escrita en RMarkdown (documento RMarkdown) - Librería de R que provee de una serie de herramientas para generar documentos dinámicos y publicarlos ] --- # Librería RMarkdown - Instalar la librería (o actualizarla, si está cargada) : `install.packages("rmarkdown")` - Al instalarla, también incorpora otras librerías (dependencies) que permiten trabajar y publicar con **RMarkdown** (como `knitr` y también `tinitex`, que permite generación documentos pdf vía Latex). --- ## Escritura en RMarkdown - permite incluir **trozos de código (chunks)** en el texto - un chunk se especifica mediante una línea de código inicial ` ```{r}`, y se cierra con ` ``` ` `Aquí texto ` ```` ```{r} 1 + 1 ``` ```` `Aquí sigue el texto` --- # Insertar chunks Se pueden insertar rápidamente de la siguiente manera: - Menú en ventana de RStudio *Insert* > R ![:scale 20%](img/insertchunk.png) - o, combinación `Ctrl + Alt + i` --- class: roja, middle, right # Opciones de chunks --- ## Opciones (principales) de chunks 1. Mostrar código y resultado 2. Mostrar solo el código 3. Mostrar solo el resultado 4. No mostrar ni código ni resultado 5. Mostrar código sin ejecutarlo 6. Entregar resultado en formato directo (ej: html o latex) --- ## Especificación de opciones - las opciones se anotan dentro de la llave inicial posterior a la letra r: `{r [opciones]}` - las opciones principales son: - mostrar código `{r echo=TRUE/FALSE}` - mostrar resultado `{r results='markup'/'hide'}` - estas opciones se visualizan al momento de procesar el documento en algún formato de salida. A este procesamiento se le denomina **renderizar** (del ingles _render_ ... no hay buena traducción) --- ## 1. Mostrar código y resultado (opción por defecto) ```` ```{r} 1 + 1 ``` ```` (equivale a `{r echo=TRUE results='markup'}`) Renderiza ``` r 1 + 1 ``` ``` ## [1] 2 ``` --- ## 2. Solo código, ocultando resultados: ```` ```{r, results='hide'} 1 + 1 ``` ```` Renderiza: ``` r 1 + 1 ``` --- ## 3. Solo resultado ```` ```{r, echo=FALSE} 1 + 1 ``` ```` Renderiza : ``` ## [1] 2 ``` --- ## 4. Ni código ni resultado ```` ```{r echo=FALSE results='hide'} 1 + 1 ``` ```` No renderiza Se usa cuando se ejecuta un comando necesario pero que no se requiere/necesita dejar visible en el documento de salida (Ej: cargar base de datos) --- ## 5. Código sin ejecutar ```` ```{r, eval=FALSE} 1 + 1 ``` ```` Se puede usar para dar un ejemplo de código que no requiere ser ejecutado --- ## 6. Resultado en formato directo de salida ```` ```{r, results='asis'} stargazer(datos1, type="html") ``` ```` - se utiliza principalmente para comandos de generación de tablas, que arrojan un código que luego puede ser interpretado por otro lenguaje (por ejemplo, html o LaTeX) --- class: roja bottom right # Quarto --- ## Documentos en Quarto - Quarto es un programa que permite renderizar documentos que contienen código (texto y análisis) a distintos formatos, tales como documentos RMarkdown - Está disponible en para R en Rstudio, pero funciona como un programa aparte también para otros lenguajes (ej: Python) - El documento se genera al presionar el botón `render` (que activa función de la librería) --- class: center ![](img/quarto.png) --- # Generar documento en Quarto (.qmd) - RStudio: File > New File > Quarto document - se puede trabajar en modo visual o en código plano (source) - al principio aparece una sección entre tres guiones (---) donde se especifican ciertas opciones del documento (se denomina YAML) - el documento aparece con un texto y código de ejemplo que se puede luego borrar / reemplazar --- # Sobre formatos de salida .content-box-green[ - La conversión más simple y rápida es a html. - El resultado aparece en el visor (Viewer) de R, o se puede seleccionar otra opción de visualización desde la rueda de configuración al lado del botón `render` - El documento queda grabado como archivo (ej: probando.html) en el mismo directorio del archivo .qmd] --- class: inverse ## .yellow[Resumen RMarkdown / Quarto] .pull-left-wide[ - Documentos dinámicos: - "tejiendo" texto y código de análisis en texto plano - reproducibilidad - Documentos dinámicos en R / RStudio - RMarkdown - Quarto - chunks y opciones] .pull-right-narrow[ ![](img/werkzeug.png) ] --- class: inverse .pull-left-narrow[ # **.orange[Programa]** ] .pull-right-wide[ ## A. Reproducibilidad ## B. Texto plano y Markdown ## C. RMarkdown ## .yellow[D. Protocolos reproducibles] ] --- ## ¿Cómo organizar el flujo de trabajo? ### A. Estilo personal (ad-hoc) ### B. Protocolo reproducible --- ## ¿Cómo organizar el flujo de trabajo? .content-box-red[ ### .red[A. ad-hoc (menos reproducible)] - cada investigador define numero de archivos, nombres, carpetas y organización - explicar al resto cómo se organiza - documentar en un archivo cómo se organiza --> reproducibilidad y transparencia **LIMITADA** ] --- ## ¿Cómo organizar el flujo de trabajo? .content-box-purple[ ### .red[B. *Protocolo* de trabajo reproducible] - **estructura** de carpetas y archivos interconectados que refieren a reglas conocidas - **autocontenido**: toda la información necesaria para la reproducibilidad se encuentra en la carpeta raíz o directorio de trabajo.] --- ## Estándares de reproducibilidad .center[ ![:scale 70%](https://lisa-coes.github.io/ipo/standards.png) ] --- .pull-left-narrow[ ## Ejemplo protocolo reproducible: [TIER](https://www.projecttier.org/)] .pull-right-wide[ <br> <br> <br> .center[ ![:scale 80%](img/tier.png) ]] --- .pull-left-narrow[ # Protocolo TIER ] .pull-right-wide[ <br> <br> ![:scale 100%](img/tierfolders.png) ] --- .center[ .medium[ ![:scale 65%](img/ipo.png) ###[https://lisa-coes.com/ipo-repro/](https://lisa-coes.github.io/ipo/) ] ] --- ### Protocolo IPO - Estructura de archivos y carpetas .center[ ![:scale 80%](img/ipofolder.png) ] --- ## Protocolo IPO en contexto R/RMarkdown .content-box-red[ - RMarkdown tiene una lógica en sí reproducible, y puede simplificar el uso de protocolos. - Si todo el procesamiento se hace en el mismo documento paper.qmd, entonces basta con la carpeta input de IPO. - Recomendación: realizar la preparación en código externo (carpeta proc) y el análisis en el paper.Rmd. - Es solo una **propuesta**, el sentido último es la reproducibilidad más que el cumplimiento estricto] --- ## Proyectos autocontenidos - reproducible sin necesidad de archivos externos al directorio - requisito: establecer **directorio de trabajo** - posición de referencia de todas las operaciones al interior del proyecto - también llamado **directorio raíz** --- ## Estableciendo directorio de trabajo - forma tradicionalen R: - `setwd(ruta-a-carpeta-de-proyecto)` - problemas: hace referencia a ruta local en el computador donde se está trabajando, por lo tanto no es reproducible y **se debe evitar** - alternativa sugerida en R: **RStudio Projects** --- # RStudio Projects .content-box-red[ - La funcionalidad **Projects** de RStudio permite establecer claramente un directorio de trabajo de manera eficiente - Para ello, genera un archivo de extensión **.Rproj** en el directorio raiz de la carpeta del proyecto - Luego se facilita acceder a la carpeta del proyecto en RStudio ejecutando desde el administrador de archivos del computador (file manager) el archivo **.Rproj** - para comprobar, ejecutar `getwd()` y debería dar la ruta hacia la carpeta del proyecto ] --- .pull-left[ ## RStudio Projects - File -> New Project ![](https://d33wubrfki0l68.cloudfront.net/87562c4851bf4d0b0c8415dc9d6690493572e362/a6685/screenshots/rstudio-project-1.png) ] .pull-right[ <br> <br> <br> <br> ![](https://d33wubrfki0l68.cloudfront.net/0fa791e2621be297cb9c5cac0b2802223e3d7714/57d89/screenshots/rstudio-project-2.png) ] --- ## RStudio Projects .center[ ![](https://d33wubrfki0l68.cloudfront.net/dee6324df1f5c5121d1c1e9eed822ee52c87167b/1f325/screenshots/rstudio-project-3.png) ] --- ## Abriendo la sesión de RStudio como proyecto <br> - identificar en la carpeta respectiva el archivo .Rproj - ejecutar y se abre R / RStudio desde ese directorio como raíz --- class: inverse ## .yellow[Resumen] ### - ciencia abierta y reproducibilidad ### - texto plano y Markdown ### - Rmarkdown y documentos dinámicos ### - Protocolo de proyecto reproducible --- class: middle center Más info: ## web: [lisa-coes.com](https://lisa-coes.com/) ## Github: [github.com/lisa-coes](https://github.com/lisa-coes)