class: center, middle, inverse, title-slide .title[ # Introducción a R para
Epidemiología Aplicada ] .subtitle[ ## Informes rutinarios con {rmarkdown} ] .date[ ###
contact@appliedepi.org
] --- <style type="text/css"> .remark-code { font-size: 70%; } .remark-slide table{ border: none } .remark-slide-table { } tr:first-child { border-top: none; } tr:last-child { border-bottom: none; } </style> # Objetivos y agenda - Entender cómo R markdown sirve como herramienta para hacer informes rutinarios - Explorar la variedad de formatos e integraciones de los informes R markdown - Convertir el código del estudio de caso de Ébola en un informe R markdown - Hacer que el script R markdown se adapte dinámicamente a las actualizaciones de datos <div class="tabwid"><style>.cl-526bd9aa{}.cl-52673364{font-family:'Helvetica';font-size:11pt;font-weight:normal;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-526a1c6e{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-526a24d4{width:1.296in;background-color:transparent;vertical-align: middle;border-bottom: 1.5pt solid rgba(102, 102, 102, 1.00);border-top: 1.5pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-526a24d5{width:3.087in;background-color:transparent;vertical-align: middle;border-bottom: 1.5pt solid rgba(102, 102, 102, 1.00);border-top: 1.5pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-526a24de{width:1.296in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-526a24f2{width:3.087in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-526a2506{width:1.296in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-526a2507{width:3.087in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-526a2510{width:1.296in;background-color:transparent;vertical-align: middle;border-bottom: 1.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-526a251a{width:3.087in;background-color:transparent;vertical-align: middle;border-bottom: 1.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-526a2524{width:1.296in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-526a252e{width:3.087in;background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}</style><table data-quarto-disable-processing='true' class='cl-526bd9aa'><thead><tr style="overflow-wrap:break-word;"><th class="cl-526a24d4"><p class="cl-526a1c6e"><span class="cl-52673364">Tiempo</span></p></th><th class="cl-526a24d5"><p class="cl-526a1c6e"><span class="cl-52673364">Tema</span></p></th></tr></thead><tbody><tr style="overflow-wrap:break-word;"><td class="cl-526a24de"><p class="cl-526a1c6e"><span class="cl-52673364">30 min</span></p></td><td class="cl-526a24f2"><p class="cl-526a1c6e"><span class="cl-52673364">Diapositivas R markdown y demostración</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-526a2506"><p class="cl-526a1c6e"><span class="cl-52673364">2 horas 30 min</span></p></td><td class="cl-526a2507"><p class="cl-526a1c6e"><span class="cl-52673364">Crea tu informe rutinario de Ébola</span></p></td></tr><tr style="overflow-wrap:break-word;"><td class="cl-526a2510"><p class="cl-526a1c6e"><span class="cl-52673364">30 min</span></p></td><td class="cl-526a251a"><p class="cl-526a1c6e"><span class="cl-52673364">Repaso</span></p></td></tr></tbody><tfoot><tr style="overflow-wrap:break-word;"><td colspan="2"class="cl-526a2524"><p class="cl-526a1c6e"><span class="cl-52673364">Toma los descansos necesarios durante los ejercicios</span></p></td></tr></tfoot></table></div> --- # Salud pública e informes rutinarios: una historia de amor .pull-left[ En salud pública nos encantan los informes. - Informes de situación de brotes - Serie de diapositivas semanales - Informes ejecutivos - Informes públicos - Encuestas de salud comunitaria - Análisis de encuestas de vacunación - ... **La producción manual es laboriosa y propensa al error humano** ] .pull-right[ <img src="../../images/welcome/automated_reports.png" width="100%" /> ] --- # Salud pública e informes rutinarios: una historia de amor .pull-left[ A menudo tenemos que producirlos para muchas subpoblaciones: - Barrio, código postal - Condado, distrito, provincia, estado, país - Subpoblaciones étnicas u ocupacionales - Grupos de alto riesgo - Semanal, trimestral, anual **La producción manual es laboriosa y propensa al error humano** ] .pull-right[ <img src="../../images/welcome/automated_reports.png" width="100%" /> ] --- # "Automatización" vs al ojo .pull-left[ El "aprendizaje automático" y la "IA" son temas populares en estos momentos. Pero en la mayoría de los contextos de salud pública y epidemiología aplicada también se requiere una correcta interpretación de las tendencias: - Experiencia - Conocimiento del contexto local - Comprensión del flujo de datos y sus limitaciones ¿Cómo ha sido tu experiencia con las limitaciones de la "automatización" en tu trabajo? ] .pull-right[ <img src="../../images/rmarkdown/human_robot.png" width="75%" /> ] --- class: inverse, center, middle # R markdown ## Un lugar para la escritura basada en datos</br>Código, texto y resultados en conjunto --- # Varios resultados <img src="../../images/rmarkdown/rmarkdown_overview.png" width="100%" /> --- # "Dashboards" (Panel interactivo) {rmarkdown} puede producir dashboards sencillos para enviar por correo electrónico o alojar en línea. <img src="../../images/rmarkdown/flexdashboard_output.png" width="60%" /> .footnote[Inscríbete en nuestro curso R Markdown Avanzado o consulta el [capítulo del Manual Epi R](https://epirhandbook.com/en/dashboards-with-r-markdown.html)!] --- class: inverse, center, middle # ¡Incluso estas diapositivas se hicieron con R Markdown! <img src="../../images/rmarkdown/even_slides.png" width="75%" /> .footnote[¡Consulta el paquete {xaringan} e inscríbete en nuestro curso avanzado de R Markdown!] --- # Visión general **Todo el script es ahora un documento** que integra **frases de texto** con **código R** relacionados y sus **resultados**. Todo se actualiza cuando se ejecuta el script. <img src="../../images/rmd_1/rmarkdown_translation.png" width="100%" /> --- # Vocabulario - **Markdown (.md)** - un "lenguaje" no específico a R, que permite convertir tu texto plano a html y otros formatos -- - **R Markdown (.Rmd)** - una variación de markdown específica a R -- - {rmarkdown} un paquete de R utilizado para convertir el markdown (texto) del archivo R markdown en la salida deseada -- - {knitr} - un paquete de R que lee secciones de código R y los "teje" en el documento -- - **Pandoc** - un software independiente (pero incluido en RStudio) que convierte el resultado en word/pdf/powerpoint, etc. <img src="../../images/rmarkdown/0_rmd.png" width="70%" /> .footnote[[fuente de la imagen](https://rmarkdown.rstudio.com/authoring_quick_tour.html)] ??? Este proceso ocurre en segundo plano, por lo que no necesitas conocer todos estos pasos. Sin embargo, puedes encontrarte con estos nombres. El archivo .Rmd se alimenta a knitr, que ejecuta las secciones de código R y crea un nuevo archivo .md (markdown) que incluye el código R y su salida renderizada. A continuación, pandoc procesa el archivo .md para crear el producto final: un documento de Microsoft Word, un archivo HTML, un documento de PowerPoint, un pdf, etc. --- class: center, middle # Secciones de código R o "chunks" --- # Secciones de código En R Markdown, tu código existe en "chunks" -pequeñas secciones de código R dentro del documento-. Crea secciones para tareas concretas (por ejemplo, cargar paquetes, importar datos, limpiar datos). .pull-left[ Partes de una sección de código: - 3 "acentos graves" y `{r}` inician la sección - **Código R en el medio** - 3 acentos graves cierran la sección *Atajo de teclado: Ctrl + Alt + i* *Atajo de menú: Código -> Insertar chunk de código R* ] .pull-right[ ````r ```{r} El código R estará aquí ``` ```` </br> ````r ```{r} Más código R aquí ``` ```` ] --- # Un script R normal (.R) <img src="../../images/rmarkdown/r_script.png" width="100%" /> --- # Secciones de código en R Markdown (.Rmd) <img src="../../images/rmarkdown/rmd_script.png" width="100%" /> --- # La salida del informe <img src="../../images/rmarkdown/word_simple.png" width="100%" /> --- class: inverse, center, middle # Texto --- # Texto <img src="../../images/rmarkdown/rmd_text.png" width="100%" /> --- # Texto .panelset[ .panel[.panel-name[Para obtener esto] Una frase de texto normal. *Aquí hay un texto para ponerlo en cursiva* **Aquí hay un texto para ponerlo en negrita** - Punto 1 - Punto 2 ] .panel[.panel-name[Escribe esto] Una frase de texto normal. `*Aquí hay un texto para ponerlo en cursiva*` `**Aquí hay un texto para ponerlo en negrita**` `* Punto 1` `* Punto 2` ] ] .footnote[Ver más formatos en RMarkdown [aquí](https://rmarkdown.rstudio.com/authoring_basics.html)] --- # Estilos y secciones del informe .panelset[ .panel[.panel-name[Para obtener esto] # Título grande ## Título pequeño ### Título más pequeño #### Título aún más pequeño ] .panel[.panel-name[Escribe esto] `# Título grande` `## Título pequeño` `### Título más pequeño` `#### Título aún más pequeño` ] ] --- # Añade texto al informe <img src="../../images/rmarkdown/word_text.png" width="100%" /> --- class: inverse, center, middle # Configuración --- # Ajustes YAML Esta sección en la **parte superior del documento** especifica los ajustes básicos para la producción del mismo. Los ajustes se escriben en pares de `clave: valor`. ??? Ten en cuenta que esta sección empieza y acaba con tres guiones, y que la colocación de los espacios y los dos puntos es muy importante --- # La sección de "configuración" **Las "opciones" de las secciones ("chunks")** ajustan cómo se muestran el código R y sus resultados en el informe. En `setup` cerca de la parte superior del R Markdown puedes utilizar una función de {knitr} para establecer "opciones" **predeterminadas** para todas las secciones. - Ejecutar las secciones: `eval = TRUE` - Mostrar el código en el informe: `echo = TRUE` - Mostrar advertencias en el informe: `warning = TRUE` - Mostrar errores en el informe: `error = TRUE` - Mostrar salida en el informe: `include = TRUE` A continuación, las opciones predeterminadas establecen que el código R se imprima en el informe, pero no las advertencias ni los mensajes de error. ````r ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE, warning = FALSE, error = FALSE) ``` ```` --- # Opciones de la sección Para sobreescribir las opciones predeterminadas, puedes ajustar las opciones de cada sección: .pull-left[ Ajusta las "opciones" de la sección dentro del `{r}` - Ejecutar la sección: `eval = TRUE` - Mostrar el código: `echo = TRUE` - Mostrar advertencias: `warning = TRUE` - Mostrar errores: `error = TRUE` - Mostrar salida: `include = TRUE` Observa las comas entre cada opción. ] .pull-right[ ````r ```{r packages, echo = FALSE, warning = FALSE} pacman::p_load( rio, # import/export here, # file paths janitor, # cleaning & simple tables tidyverse # data management & viz ) ``` ```` ] Más información sobre las opciones de las secciones de código o chunks [aquí](https://rmarkdown.rstudio.com/lesson-3.html) ??? Los nombres de las secciones no pueden contener espacios --- # Ejecutar el documento Pulsa el botón "knit" en la parte superior. Utiliza el menú desplegable para escoger las opciones. <img src="../../images/rmarkdown/4_knitbutton.PNG" width="10%" /> <!-- % should this be "Render" now instead of R Markdown?? --> El progreso se mostrará en el panel "R Markdown" (junto a la Consola R) <img src="../../images/rmarkdown/4_progress.png" width="90%" /> Por defecto, el resultado se guardará junto a tu archivo .Rmd. ??? Consulta en el Manual las opciones para crear una "Fábrica de informes" donde sea más fácil catalogar las salidas de muchos informes diferentes en carpetas con fecha y hora. --- class: inverse, center, middle # Demostración en vivo <img src="../../images/functions_packages/piano_man.jpg" width="50%" /> --- class: inverse, center, middle # Consejos más avanzados --- # Código R en línea Este código y texto escrito en línea: <img src="../../images/rmarkdown/verbatim_inline_1_1_es.png" width="100%" /> produce esto: <img src="../../images/rmarkdown/verbatim_inline_1_2_es.png" width="100%" /> --- # Código R en línea Este código y texto escrito en línea: <img src="../../images/rmarkdown/verbatim_inline_2_1_es.png" width="100%" /> produce esto: <img src="../../images/rmarkdown/verbatim_inline_2_2_es.png" width="100%" /> --- # Funciones de soporte {epikit} ```r epikit::fmt_count(surv, is.na(date_onset)) ``` ``` ## [1] "33 (5.2%)" ``` ```r str_glue("{fmt_count(surv, is.na(date_onset))} sin fecha de inicio y no se muestran.") ``` ``` ## 33 (5.2%) sin fecha de inicio y no se muestran. ``` -- {scales} ```r str_glue("Hubo {comma(sum(as.numeric(surv$diff), na.rm=T))} días totales de retraso entre el inicio de los síntomas y la notificación.") ``` ``` ## Hubo 1,826 días totales de retraso entre el inicio de los síntomas y la notificación. ``` --- # Tablas estáticas Esto escrito en tu R markdown: ``` Columna 1 |Columna 2 |Columna 3 ---------|----------|-------- Celda A |Celda B |Celda C Celda D |Celda E |Celda F ``` produce esto: | Columna 1 | Columna 2 | Columna 3 | | --------- | --------- | --------- | | Celda A | Celda B | Celda C | | Celda D | Celda E | Celda F | Se pueden crear tablas dinámicas con paquetes como {flextable} y {DT}. --- # Modo fuente ("source") Tu script puede llegar a tener este aspecto <img src="../../images/rmarkdown/source_mode_es.png" width="80%" /> --- # Modo visual RStudio te permite editar en "Modo Visual", que parece un documento de Word <img src="../../images/rmarkdown/visual_mode_es.png" width="80%" /> ??? Si escribir el documento en código te intimida, RStudio te permite activar el "Modo Visual", para que tu documento tenga un aspecto similar al de un documento de Word. --- # `params` En el YAML, puedes definir `params` (parámetros) para que estén disponibles para el informe: ```{results='asis'} --- title: "Informe de vigilancia" output: html_document params: fecha: "2021-04-10" hospital: "Central Hospital" --- ``` Puedes crear los nombres de estos `params` --- # `params` En el R Markdown, denomina estos valores de `params` en tu código utilizando `params$` <img src="../../images/rmarkdown/5_parameterized_1.png" width="100%" /> --- # `params` En el R Markdown, denomina estos valores de `params` en tu código utilizando `params$` <img src="../../images/rmarkdown/5_parameterized_2.png" width="100%" /> --- # `params` En el R Markdown, denomina estos valores de `params` en tu código utilizando `params$` <img src="../../images/rmarkdown/5_parameterized_3.png" width="100%" /> --- # `params` .pull-left[ <img src="../../images/rmarkdown/5_parameterized_menu_1.png" width="100%" /> ] .pull-right[ <img src="../../images/rmarkdown/5_parameterized_menu_2.png" width="100%" /> ] --- # Plantillas de informes Puedes proporcionar plantillas de Word o PPT a R Markdown (por ejemplo, con logotipos, etc.) Una vez renderizado el informe, puedes editar el texto para añadir interpretaciones. --- # Una vez generado el informe, puedes editar el texto para añadir interpretaciones. Applied Epi colabora con Médicos sin Fronteras (MSF) para ofrecer plantillas de R Markdown para generar informes de situación: - Cólera/diarrea acuosa aguda - Meningitis - Sarampión/Rubéola - Síndrome de ictericia aguda (a menudo se sospecha que es Hepatitis E) y para el análisis de encuestas: - Mortalidad retrospectiva y acceso a la atención sanitaria - Cobertura de vacunación - Malnutrición --- # Salas separadas