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.
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.
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
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.
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.
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.
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/
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
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.
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
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:
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”:
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
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
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:
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
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)")
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")
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
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)) )
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>
Para modificaciones sencillas podemos usar cualquier editor de html y copiar el código. Existen varios online que son sencillos de utilizar
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}.\]
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
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 (—).
# ---
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:
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.