Introducción

Una de las grandes ventajas de usar Rmarkdown es que permite generar informes a partir de R. En realidad utiliza un lenguaje llamado Markdown para enriquecer el informe final. Este permite incluir texto, comandos de R, imágenes y gráficos a un documento. Pero lo más importante es que permite que se reproduzca el análisis realizado y si se incorporan nuevos datos, los resultados se actualizarán.

Instalación

Suponemos que ya ha instalado R (https://www.r-project.org) (R Core Team 2019) y el IDE RStudio (https://www.rstudio.com). No se requiere RStudio pero se recomienda, porque facilita que un usuario promedio pueda trabajar con R Markdown. Si no tiene RStudio IDE instalado, tendrá que instalar Pandoc (http://pandoc.org), de lo contrario no es necesario instalar Pandoc por separado porque RStudio lo ha incluido. A continuación puede instalar el paquete rmarkdown en R:

install.packages("rmarkdown")

Si desea generar una salida PDF, necesitará instalar LaTeX. Para los usuarios de Markdown R que no hayan instalado LaTeX anteriormente, le recomendamos que instale TinyTeX (https://yihui.name/tinytex/):

install.packages("tinytex")

Con el paquete rmarkdown, RStudio / Pandoc y LaTeX, debería poder compilar la mayoría de los documentos R Markdown. En algunos casos, es posible que necesite otros paquetes de software, y los mencionaremos cuando sea necesario. Puede crear dicho archivo de texto con cualquier editor (incluido, entre otros, RStudio). Si usa RStudio, puede crear un nuevo archivo Rmd desde el menú Archivo -> Nuevo archivo -> R Markdown.

Se puede elegir el destino del informe:

Esto abrirá un fichero que incluye ya contenido de texto y de lenguaje RMarkdown.

Primer informe con RMarkdown

Una vez seleccionado el formato de salida del informe, aparecerá en el panel de guiones o scripts, el fichero que acabamos de crear. Este contiene una cabecera, con el título, autor, fecha y formato de salida del informe. En este caso he seleccionado como formato de salida una página Web por lo que pone “html_document”.

Antes de continuar ejecute los distintos formatos de salida de la plantilla que aparece por defecto

Tipos de reportes

Como se mencionón antes en R Mardown se puede crear muchos tipos de reportes a partir de un único archivo *.Rmd. Se pueden generar documentos HTML, PDF, MS_Word, ODT, RTF, presentaciones pptx, Beamer, slidy.js, ioslides y slideshow.js slideshows; y sitios web, paneles, libros, folletos, viñetas de paquetes, etc.

Ejemplos de aplicación

Tareas en RPubs

Existen una gran cantidad de tareas en el sitio web https://RPubs.com (una plataforma de publicación gratuita proporcionada por RStudio), que muestra que R Markdown es lo suficientemente fácil y conveniente para que los estudiantes hagan sus tareas.

Libros

Aplicando bookdown, un paquete R que permite escribir libros e informes largos con múltiples archivos Rmd. A partir de este paquete surgieron una gran cantidad de libros, muchos pueden otros solo tienen versiones gratuitas en línea que pueden encontrarse en https://bookdown.org.

Paginas web

Utilizando el paquete de R, blogdown se pueden crear sitios web (estáticos) de uso general (webs personales, blogs, …) con R Markdown. https://bookdown.org/yihui/blogdown/

Documento básico de R Markdown

R Markdown fue diseñado para reproducir de forma fácil tanto el código como texto en el mismo documento. un documento R Markdown mínimo, que debería ser un archivo de texto sin formato, con la extensión convencional .Rmd:

Hay tres componentes básicos de un documento de R Markdown:

Los metadatos se escriben entre un par de tres guiones – – –

---
title: "Untitled"
author: "Teresa Boca"
date: "9/16/2019"
output: html_document
---

La sintaxis de los metadatos es YAML (https://en.wikipedia.org/wiki/YAML)

La sintaxis para el texto es Markdown

Un fragmento de código (chunk) comienza con tres comillas como:

{r} donde r indica el nombre del idioma

Formatos de salidas

Una vez seleccionado el formato de salida del informe, aparecerá en los metadatos que contiene por defecto el título, autor, fecha y formato de salida del informe. En este caso he seleccionado como formato de salida una página Web por lo que pone “html_document”.

Podremos generar informes en Word, PDF o HTML (formato página web visible con cualquier navegador).En cada formato cambia el aspecto del mismo.

Salida en PDF

  • Los informes que generan un PDF usan tipografías tipo Times, con tamaño estándar para el cuerpo de 13 y 16 para títulos.
  • Para editar ficheros PDF se necesitan herramientas especiales como Adobe Acrobat u otras alternativas.
  • Se puede cambiar o editar el propio generador del PDF para obtener un documento final, que no necesite ninguna edición.

Salida en HMTL

  • Es útil para mantener actualizadas páginas web con análisis, o centros de mandos con gráficos, etc. Es visible en cualquier navegador o explorador.
  • Se puede editar con cualquier editor de páginas webs (o incluso con cualquier editor de textos).
  • Pero la idea es no tener que editar el documento final sino editar el generador de informes y obtener el informe final.

Salida en Word

  • Cuando se genera el informe en fichero Word, el documento es completamente editable.
  • Los gráficos se verán como imágenes en el documento de Word.
  • El título del documento se genera en tipo de letra Calibrí, tamaño 18 puntos, en un color azul marino.
  • El cuerpo del documento usa la tipografía Cambria con tamaño 12.
  • Esto puede cambiar según el sistema operativo, o incluso puede cambiar con actualizaciones siguientes.

Edición del formato de los textos

Existe mucha bibliografía online y muchas tablas de referencias, en español podemos encontrar:

https://www.rstudio.com/wp-content/uploads/2015/03/rmarkdown-spanish.pdf

Cualquier texto que se incluya en el fichero generador del informe aparecerá tal cual. Si queremos incluir subtítulos, o caracteres en negrita, o ecuaciones, tendremos que introducir una sintaxis específica. Por ejemplo, para introducir títulos, subtítulos, y cabeceras podemos usar el carácter #. Texto en el generador del informe:

# Este es el título

## Este es un subtítulo

### Este es un subsubtítulo

Formato de palabras o frases

Para resaltar una palabra o una frase debemos ponerla entre doble asteriscos (**), por ejeplo si escribimos:.

Dentro de una frase se pueden resaltar **varias palabras**. 

Dentro de una frase se pueden resaltar varias palabras.

Para poner una palabra (o una frase) en cursiva debemos ponerla entre asteriscos simples (*)

Dentro de una frase se pueden resaltar *varias palabras*.

Dentro de una frase se pueden resaltar varias palabras.

Para ver más referencia tambien podemos buscarlas en:

Incluir código de R en el informe

Una vez que controlamos como poner títulos, subtítulos y cabeceras y texto, podemos incluir análisis y resultados de R en el informe. Para ello debemos escribir el codigo de R entre una cabecera y pie que permite interpretar la sintáxis de R incluyendo un trozo o “chunk”:

Base de datos caso de estudio

Existen en internet mucha información que podria interesarnos analizar y armar un informe acerca de los resultados. Tomenos el caso de las información publicada acerca de los niveles de las series historicas de esperanza de vida, nivel de educación y empleo de las mujeres de Argentina comparadas con los paises vecinos. esperanza.vida.M=“Esperanza de vida al nacer, mujeres (años)”,
* desempleo.M= “Desempleo, mujeres (% de la población activa femenina) (estimación modelado OIT)” ,
* empleo.M = “Empleo vulnerable, mujeres (% del empleo femenino)”,
* M.vs.V.terc=“Proporción de inscripciones de mujeres con respecto a varones en la educación terciaria (%)” ,
* M.vs.V.sec= “Proporción de inscripciones de mujeres con respecto a varones en la educación secundaria (%)” ,
* M.vs.V.prim=“Proporción de inscripciones de mujeres con respecto a varones en la educación primaria (%)”,
* M.vs.V.alfab= “Proporción de mujeres con respecto a varones de jóvenes alfabetizados (% de jóvenes entre 15 y 24 años de edad)”

Esta información puede obtenerse en el sitio del Banco Mundial

https://www.bancomundial.org/

library(readxl)
datos <- read_excel("educacion_banco_mundial.xlsx")
summary(datos)
##      pais               fecha      esperanza.vida.M  desempleo.M    
##  Length:168         Min.   :1991   Min.   :57.41    Min.   : 2.668  
##  Class :character   1st Qu.:1998   1st Qu.:72.08    1st Qu.: 6.603  
##  Mode  :character   Median :2004   Median :76.96    Median : 9.479  
##                     Mean   :2004   Mean   :75.11    Mean   : 9.771  
##                     3rd Qu.:2011   3rd Qu.:79.32    3rd Qu.:12.434  
##                     Max.   :2018   Max.   :82.09    Max.   :22.225  
##                                    NA's   :6                        
##     empleo.M      M.vs.V.terc       M.vs.V.sec      M.vs.V.prim    
##  Min.   :16.06   Min.   :0.8456   Min.   :0.9187   Min.   :0.9292  
##  1st Qu.:22.00   1st Qu.:1.1233   1st Qu.:1.0136   1st Qu.:0.9658  
##  Median :25.09   Median :1.3478   Median :1.0505   Median :0.9723  
##  Mean   :35.67   Mean   :1.3285   Mean   :1.0531   Mean   :0.9725  
##  3rd Qu.:50.35   3rd Qu.:1.5168   3rd Qu.:1.0965   3rd Qu.:0.9853  
##  Max.   :77.88   Max.   :2.0312   Max.   :1.3264   Max.   :1.0006  
##                  NA's   :89       NA's   :56       NA's   :34      
##   M.vs.V.alfab   
##  Min.   :0.9507  
##  1st Qu.:1.0009  
##  Median :1.0051  
##  Mean   :1.0040  
##  3rd Qu.:1.0081  
##  Max.   :1.0331  
##  NA's   :107

Opciones de los chunk

La salida de chunk se puede personalizar con las opciones de a traves de argumentos establecidos.En la Guía de referencia de R Markdown se encuentra una lista completa de las opciones de los chunk. Los argumentos más comunes son los siguientes:

  • include = FALSE evita que el código y los resultados aparezcan en el archivo terminado. R Markdown todavía ejecuta el código en el fragmento, y los resultados pueden ser utilizados por otros fragmentos. echo = FALSE impide el código, pero no aparecen los resultados en el archivo terminado. Esta es una forma útil de incrustar figuras.
  • message = FALSE evita que los mensajes generados por el código aparezcan en el archivo terminado.
  • warning = FALSE evita que las advertencias generadas por el código aparezcan en el final.
  • fig.cap = “…” agrega un título a los resultados gráficos.

Una vez incluido el chunk, a la derecha aparece un icono que nos muestra como configurar algunas de estas opciones de foma sencilla:

Por ejemplo queremos definir una nueva variable a utilizar en un análisis posterior: y queremos que se ejecute el codigo, pero no se muestre en el reporte utizaremos las opción: include=FALSE

Tablas

Podemos crear distintas tablas resumen utilizando las librerias library(kableExtra) y library(knitr)

library(plyr)
library(kableExtra)
library(knitr)
resumen <-ddply(datos, .(pais , decada), summarise, esperanza.vida=mean(esperanza.vida.M, na.rm = TRUE), porc.desempleo = mean(desempleo.M, na.rm = TRUE),  porc.empleo = mean(empleo.M, na.rm = TRUE), educa_terc=mean(M.vs.V.terc, na.rm = TRUE), educa_sec=mean(M.vs.V.sec, na.rm = TRUE), educa_prim=mean(M.vs.V.prim, na.rm = TRUE), alfabetizacion=mean(M.vs.V.alfab, na.rm = TRUE))
kable(resumen,digits = 2, caption = "Valores promedios de los indices (educ: proporcion M/V)")
Valores promedios de los indices (educ: proporcion M/V)
pais decada esperanza.vida porc.desempleo porc.empleo educa_terc educa_sec educa_prim alfabetizacion
Argentina 90 76.37 14.14 23.86 1.63 1.08 0.99 1.00
Argentina 00 78.45 14.19 18.51 1.50 1.09 0.99 1.00
Argentina 10 79.96 9.07 17.40 1.60 1.08 0.99 1.00
Bolivia 90 59.77 3.99 76.94 NaN 0.93 0.95 0.95
Bolivia 00 65.50 3.91 69.10 NaN 0.94 0.98 0.99
Bolivia 10 70.56 3.33 63.16 NaN 0.99 0.98 1.00
Brasil 90 71.58 9.50 31.28 1.25 NaN 0.97 NaN
Brasil 00 75.68 11.78 30.61 1.29 1.11 0.94 1.02
Brasil 10 78.53 10.94 23.07 1.35 1.08 0.96 1.01
Chile 90 78.26 7.79 23.98 0.87 1.04 0.97 1.01
Chile 00 80.45 12.17 24.40 0.98 1.02 0.96 1.00
Chile 10 81.52 7.89 24.44 1.12 1.02 0.97 1.00
Paraguay 90 71.26 11.64 55.27 1.15 1.05 0.97 0.99
Paraguay 00 73.31 8.51 51.25 1.35 1.03 0.97 1.00
Paraguay 10 75.01 5.85 43.26 1.42 1.06 0.96 1.00
Uruguay 90 77.46 17.06 20.73 1.80 1.22 0.99 1.01
Uruguay 00 79.24 14.51 22.84 1.86 1.13 0.97 1.01
Uruguay 10 80.56 8.89 21.74 NaN 1.17 0.98 1.01
kable(resumen,digits = 2, caption = "Valores promedios de los indices (educ: proporcion M/V)") %>%
  kable_styling(bootstrap_options = "striped", full_width = F, font_size = 10) %>%
                row_spec(1:3, bold = T, color = "white", background = "blue")
Valores promedios de los indices (educ: proporcion M/V)
pais decada esperanza.vida porc.desempleo porc.empleo educa_terc educa_sec educa_prim alfabetizacion
Argentina 90 76.37 14.14 23.86 1.63 1.08 0.99 1.00
Argentina 00 78.45 14.19 18.51 1.50 1.09 0.99 1.00
Argentina 10 79.96 9.07 17.40 1.60 1.08 0.99 1.00
Bolivia 90 59.77 3.99 76.94 NaN 0.93 0.95 0.95
Bolivia 00 65.50 3.91 69.10 NaN 0.94 0.98 0.99
Bolivia 10 70.56 3.33 63.16 NaN 0.99 0.98 1.00
Brasil 90 71.58 9.50 31.28 1.25 NaN 0.97 NaN
Brasil 00 75.68 11.78 30.61 1.29 1.11 0.94 1.02
Brasil 10 78.53 10.94 23.07 1.35 1.08 0.96 1.01
Chile 90 78.26 7.79 23.98 0.87 1.04 0.97 1.01
Chile 00 80.45 12.17 24.40 0.98 1.02 0.96 1.00
Chile 10 81.52 7.89 24.44 1.12 1.02 0.97 1.00
Paraguay 90 71.26 11.64 55.27 1.15 1.05 0.97 0.99
Paraguay 00 73.31 8.51 51.25 1.35 1.03 0.97 1.00
Paraguay 10 75.01 5.85 43.26 1.42 1.06 0.96 1.00
Uruguay 90 77.46 17.06 20.73 1.80 1.22 0.99 1.01
Uruguay 00 79.24 14.51 22.84 1.86 1.13 0.97 1.01
Uruguay 10 80.56 8.89 21.74 NaN 1.17 0.98 1.01

Muchas más opciones de configuración de las tablas se pueden encontrar en:

https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html

Gráficos

Uno de las librerias más completas es library(ggplot2) .

https://ggplot2.tidyverse.org/

Utilizando esta libreria y a partir de la tabla resumen podemos obtener distintos gráficos

##graficos de barras con los promedios

library(RColorBrewer)
library(ggplot2)
p <- ggplot(resumen, aes(pais, esperanza.vida))
p +geom_col(aes(fill = pais) )+ facet_grid(decada~., scales = "free_y") + theme_bw() +ylim(c(0,100))

p <- ggplot(resumen, aes(decada, porc.empleo))
p +geom_col(fill =  "green")+ facet_grid(.~pais, scales = "free_y") + theme_bw()+ylim(c(0,100))

p <- ggplot(resumen, aes(decada, porc.desempleo))
p +geom_col(fill="skyblue1"  )+ facet_grid(.~pais, scales = "free_y") + theme_bw()+ylim(c(0,50))

p <- ggplot(resumen, aes(decada, alfabetizacion))
p +geom_col(fill= "salmon3"  )+ facet_grid(.~pais, scales = "free_y") + theme_bw()
## Warning: Removed 1 rows containing missing values (position_stack).

p <- ggplot(resumen, aes(decada, educa_prim))
p +geom_col(fill= "wheat3")+ facet_grid(.~pais, scales = "free_y") + theme_bw()

Si estamos interesados en ver las interelaciones entre las variables podemos utilizar las libreria

library(GGally)

library(ggplot2)
library(GGally)
ggpairs(datos[,c(2,3,6:8)], diag = NULL,  mapping=aes(color=datos$pais),  upper = list(continuous = wrap("cor", size = 2)) )

Utilización de código html

Html son las siglas en inglés de HyperText Markup Language (lenguaje de marcas de hipertexto), hace referencia al lenguaje de marcado para la elaboración de páginas web. Es un estándar que sirve de referencia del software que conecta con la elaboración de páginas web en sus diferentes versiones, define una estructura básica y un código (denominado código HTML) para la definición de contenido de una página web, como texto. Por ejemplo si quisieramos cambiar el tamaño de la tipografía podriamos usar el siguiente comando:

#   < font size="20"> Qué fácil es usar markdownR!!! </font>

Qué fácil es usar markdownR!!!

#   <h1><strong><span style="color: #ff0000;">Qué fácil es usar markdownR!!!</span></strong></h1>

Hola

Para modificaciones sencillas podemos usar cualquier editor de html y copiar el código. Existen varios online que son sencillos de utilizar

https://htmlg.com/html-editor/

Inclusión de formulas matemáticas

La forma de incluir fórmulas matemáticas en R Markdown se basa en la sintaxis del sistema de composición de textos científicos LATEX.

Para las fórmulas o ecuaciones dentro del mismo párrafo, se escribe el código entre dos signos pesos

$código$

Para las fórmulas o ecuaciones aparezcan centradas en una línea aparte, se debe escribir el código entre dos dobles $:

$$código$$

Por ejemplo la inclusión del siguiente codigo:

Las raíces de la ecuación $xˆ2= 2$ son $x=\sqrt{ 2}$ y $x=-\sqrt{2} $ en general, las raíces de $axˆ2+b x+c=0$, con $a\neq 0$, vienen dadas por la fórmula $$x=\frac{-b\pm\sqrt{bˆ2-4 a c}}{2a}.$$

Producirá este parrafo

Las raíces de la ecuación \(xˆ2= 2\) son \(x=\sqrt{ 2}\) y $x=- $ en general, las raíces de \(axˆ2+b x+c=0\), con \(a\neq 0\), vienen dadas por la fórmula \[x=\frac{-b\pm\sqrt{bˆ2-4 a c}}{2a}.\]

Tipos de documentos

Hay dos tipos de formatos de salida en el paquete rmarkdown: documentos y presentaciones. Todos los formatos disponibles se enumeran a continuación:

Ya hemos visto como generar los documentos que están en negrita, ahora veremos como generar presentaciones

Presentaciones

Para crear una presentación desde R Markdown, especifique el formato de salida slidy_presentation en los metadatos YAML de su documento.

Por defecto el formato de salida será: output: ioslides_presentation, pero podemos modificarlo a traves de las opciones

Si quisieramos realizar una presentación ppt buscamos las opción:

la plantilla básica como ppt no aparece la siguiente presentación:

Puede crear una presentación de diapositivas dividida en secciones usando la etiqueta de encabezado ## (también puede crear una nueva diapositiva sin encabezado usando una regla horizontal (—).

  • Las imágenes y las tablas siempre se colocarán en nuevas diapositivas.
  • Los únicos elementos que pueden coexistir con una imagen o tabla en una diapositiva son el encabezado de la diapositiva y el título de la imagen / tabla.
  • Cuando tiene un párrafo de texto y una imagen en la misma diapositiva, la imagen se moverá a una nueva diapositiva automáticamente.
# ---
 title: "Investigación área agronomía"
# author: "Teresa Boca"
# date: "9/14/2019"
# output:
#   powerpoint_presentation: default
#   ioslides_presentation: default
# ---
 {r message=FALSE, warning=FALSE, include=FALSE, paged.print=FALSE} 
 # datos<- read.csv("agricolas.csv")
# ```

# ## Tabla: Porcentaje investigadores por sexo según disciplina
# # ```{r echo=FALSE, message=FALSE, warning=FALSE}
# library(knitr)
# T1<-xtabs(~datos$area_descripcion +sexo, datos)
# table.1<-100*round(prop.table(T1,1),3)
# kable(table.1,digits = 2) 

#  ## Gráfico:Porcentaje investigadores por sexo según disciplina 
#  ```{r echo=FALSE, message=FALSE, warning=FALSE} 
#  library(broom) 
#  library(ggplot2) 
#  proporciones<-tidy(table.1) 
#  names(proporciones)<-c("area","sexo", "proporcion") 
#  bp<- ggplot(proporciones, aes(x="", y=proporcion, fill=sexo))+ 
#  geom_bar(width = 1, stat = "identity")+ facet_grid(.~area)+
#  theme(strip.text.x = element_text(size = 8, colour = "black", angle = 45)) 
#  bp + coord_polar("y", start=0)+ theme(legend.position="top") 

## Tabla: Rangos de edad segun categorias

# {r echo=FALSE, message=FALSE, warning=FALSE}
# datos$grupo.edad<-cut(datos$edad,breaks = seq(15, 100, by = 10), 
# labels =c( "< 25]" ,"(25-35]", "(35-45]", "(45-55]", "(55-65]", "(65-75]", "(75-85]" ,"(85-95]"))
# T2<-xtabs(~area_descripcion +grupo.edad, datos)
# kable((table.2<-100*round(prop.table(T2,2),3)))
# ```

## Gráfico: Rangos de edad según áreas
#  ```{r echo=FALSE, message=FALSE, warning=FALSE}
# library(ggplot2)
# c <- ggplot(datos, aes(grupo.edad, fill=sexo))
# (cc<-c + geom_bar(aes(y = (..count..)/tapply(..count..,..PANEL..,sum)[..PANEL..]))  + facet_grid(.~area_descripcion  ))
# (ccc<-cc + theme(strip.text.x = element_text(size = 8, colour = "black", angle = 45)))
# (ccc1<-ccc + theme(axis.text.x = element_text(angle=90, vjust=1, size=8))+ theme(legend.position="top"))
# (cccc1<-ccc1+ggtitle("Distribución por genero") + theme(plot.title = element_text(lineheight=.8, face="bold",colour="black"))+ ylab("proporcion"))
# print(cccc1)

# ## Tabla edad según las áereas y los años
# ```{r echo=FALSE, message=FALSE, warning=FALSE}
# library(plyr)
# kable((resumen <-ddply(datos, .(area_descripcion , anio), summarise, edad.media=mean(edad, na.rm = TRUE))), digits = 2)
# ```

## Gráfico edad según las áereas y los años
# ```{r echo=FALSE}
# library(ggplot2)
# ggplot(resumen, aes(anio, edad.media,  color = area_descripcion)) + geom_line(size=1)+ geom_point() +  theme_bw()
# ggplot(datos, aes(area_descripcion,edad) )+ geom_boxplot( )+  theme(axis.text.x = element_text(angle=90, vjust=1, # # # #size=8))+facet_grid(.~sexo)+coord_flip()+  theme_bw()
 

Con los comandos antes de detallado obtenemos por defecto esta presentación:

Presentaciones personalizadas

4.4.1 Plantillas personalizadas Al igual que los documentos de Word (Sección 3.4), puede personalizar la apariencia de las presentaciones de PowerPoint pasando un documento de referencia personalizado via patrón de diapositivas en el menú de power.point:

---
título: "Presentacion ppt"
output: powerpoint_presentation
  reference_doc: plantilla.curso.pptx
---

Podemos crear un nuevo archivo *.pptx desde el menú de PowerPoint Archivo -> Nuevo con la plantilla deseada, guardar el nuevo archivo y usarlo como documento de referencia (plantilla) a través de la opción reference_doc. Pandoc leerá los estilos en la plantilla y los aplicará a la presentación de PowerPoint que se creará desde R Markdown.