Abril, 2019

Motivación

Motivación

Una variedad de estudios recientes, principalmente en el campo biomédico, han revelado que un número grande de resultados de investigación encontrados en la literatura fallan en reproducibilidad, debido a métodos experimentales descuidados, análisis estadísticos defectuosos o, en algunos casos, fraude

Motivación

A medida que vamos trabajando con datos, nos vamos dando cuenta de lo poco convincentes que son algunos de los artículos que hemos leído o revisado y que muy probablemente se han cometido errores en términos de metodología experimental y que dichos trabajos no son fácilmente reproducibles

Qué deseamos?

Posibilidad de evaluar críticamente la exactitud de las afirmaciones científicas y conclusiones extraídas por otros científicos

Posibilidad de reproducir nuestros trabajos en el tiempo

Para ello, se requiere de una descripción precisa del procedimiento experimental y del posterior análisis de los datos, así como una cuidadosa atención a las posibles fuentes de error

Definición

Reproducibilidad

Capacidad de un investigador para duplicar los resultados de un estudio anterior utilizando los mismos materiales que utilizó el investigador original

Replicabilidad

Capacidad de un investigador para duplicar los resultados de un estudio anterior si se siguen los mismos procedimientos pero se recopilan datos nuevos

Cómo reproducimos esta figura pues no se incluyeron las unidades?

Necesitamos

  • El Conjunto de Datos

  • El diccionario del conjunto de datos para entender cada uno de los atributos

  • El código para generar el gráfico

  • La versión del software / paquetes utilizados

  • etc…

Qué podemos hacer?

Literate Programming

Término introducido por Donald Knuth a principios de los años 80

Un programa tradicional consiste en un archivo de texto que contiene el código del programa y dispersos entre el código hay comentarios que describen las distintas partes del mismo

En LITERATE PROGRAMMING se invierte el énfasis

Literate Programming

Permite escribir documentación que contiene código

El programa se convierte principalmente en un documento dirigido a los seres humanos

\[ Literate \: Programming = (Texto) + (Código)\]

Literate Programming

D. Knuth introduce WEB que enlaza TeX con Pascal

Posteriormente aparecen otras alternativas

CWEB
Literate
Codnar
Axiom
Funnel WEB
Jupyter Notebooks
NoWeb
Molly
R Notebooks

Dynamic Documentation

En 2002 aparece SWEAVE (Friedrich Leisch)

Código R en documentos LaTeX

Cada vez que hay cambios en los datos o en el análisis se actualiza el documento

En 2012 aparece Knitr (Yihui Xie) que combina R con LaTeX y Markdown

R Markdown

Markup

EL lenguaje de Markup es un sistema para hacer anotaciones en documentos de texto. Por ejemplo HTML utiliza tags como:

<h1>Heading</h1>
<h2>Sub-heading</h2>
<a href="www.webpage.com">Link</a>
<i>italic</i> <b>bold</b>
<ul>
  <li>List-item1</li>
  <li>List-item2</li>
  <li>List-item3</li>
</ul>

Markdown

Es un lenguaje de marcado que utiliza una sintaxis muy simple para ser lo más discreto posible de forma que no interfiera con la lectura del texto plano.

# Heading 

## Sub-heading

### Sub-sub-heading

[link](http://www.webpage.com).

_italic_, *italic*, **bold**, `monospace`

  * List-item1
  * List-item2
  * List-item3
  
  

R Markdown

Herramienta disponible en el ambiente de R que nos permite construir y compartir el flujo de trabajo utilizado para llegar a los resultados y conclusiones de nuestro estudio

Se basa en el lenguaje de marcado ligero Markdown diseñado para ser legible por el humano y flexible en su salida

\[ R \: Markdown = (Markdown) + (Código\:en\:R)\]

R Markdown

Necesitamos R y es deseable contar con el ambiente integrado de desarrollo de RStudio

es un entorno y lenguaje de programación para el análisis estadístico de datos

Características

  • distribuido bajo licencia GNU, es decir lo puedes utilizar y mejorar

  • multiplataforma

  • posee alta capacidad gráfica

  • es compatible con una gran cantidad de formatos

  • es ampliable

Instalación de R

Ambiente R

es un entorno de desarrollo integrado (IDE) para R

Incluye una consola, editor de sintaxis que apoya la ejecución de código, así como herramientas para la depuración y la gestión del espacio de trabajo

Instalación de RStudio

RStudio facilita

  • Trabajar con R y gráficos de R de forma interactiva

  • Organizar el código y mantener múltiples proyectos

  • Mantenimiento de los paquetes de R

  • Crear y compartir informes

  • Compartir código y colaborar con otros usuarios

  • NO realiza ninguna operación estadística. Solo facilita realizar dichas operaciones sobre R.

Características de RStudio

  • Integración de la consola de R
    Ejecución de comandos de R directamente en la consola de RStudio
  • Ejecución de cdigo directamente a partir de un script
  • Resaltado de la sintaxis
    Coloración automática de los instrucciones y de las funciones
  • Ayuda con los paréntesis, corchetes y comillas
    Autocompletación de estos símbolos al abrirlos
  • Completa los comandos mientras se escriben usando la tecla Tab

Características de RStudio

  • Se pueden inspeccionar todos los objetos de la sesión R
  • Gestión del historial de comandos
  • Importación y visualización de datos en formato de tabla
  • Integración de gráficos: manipulación, zoom y exportación
  • Gestión de proyectos: se puede cambiar de un proyecto a otro fácilmente
  • Control de versión: se integra bien con git y svn
  • Generación de documentos: del tipo PDF, HTML y otros más avanzados con un solo click

Un poco de R

Espacio y directorio de trabajo

El workspace es el espacio de trabajo en donde se incluyen todos los objetos definidos por el usuario

Se almacena en memoria intermedia mientras trabajas con R

Cuando termina una sesión de R o RStudio te pregunta si quieres guardar el workspace para usos futuros

Este espacio se recarga al volver a iniciar la sesión

Directorio de trabajo es el directorio donde por defecto lee R

También es donde guardará el workspace al finalizar la sesión y donde buscará un workspace guardado al inicio

Funciones para el manejo del workspace

Función Acción
getwd() Muestra el directorio de trabajo
setwd(midirectorio) Ajusta el directorio de trabajo al especificado
ls() o dir() Lista lo que hay en el directorio de trabajo
history() Muestra los últimos comandos ejecutados
savehistory() Guarda el historial de comandos por defecto en .RHistory
loadhistory() Carga el historial de comandos
save.image(“mywspace.R”) Guarda los objetos del workspace, por defecto en .RData
load(“mywspace.R”) Carga el workspace mywspace.R

Lenguaje R

Todo lo que es precedido por #, R lo considera un comentario y no lo interpreta

El operador <- o el = se utiliza para hacer asignaciones

Las variables no se declaran, se crean al asignarles un valor

variable <- 10
copia = 25
variable
## [1] 10
copia
## [1] 25

set.seed(1)
x <- rnorm(50)
x
##  [1] -0.62645381  0.18364332 -0.83562861  1.59528080  0.32950777 -0.82046838
##  [7]  0.48742905  0.73832471  0.57578135 -0.30538839  1.51178117  0.38984324
## [13] -0.62124058 -2.21469989  1.12493092 -0.04493361 -0.01619026  0.94383621
## [19]  0.82122120  0.59390132  0.91897737  0.78213630  0.07456498 -1.98935170
## [25]  0.61982575 -0.05612874 -0.15579551 -1.47075238 -0.47815006  0.41794156
## [31]  1.35867955 -0.10278773  0.38767161 -0.05380504 -1.37705956 -0.41499456
## [37] -0.39428995 -0.05931340  1.10002537  0.76317575 -0.16452360 -0.25336168
## [43]  0.69696338  0.55666320 -0.68875569 -0.70749516  0.36458196  0.76853292
## [49] -0.11234621  0.88110773

summary(x)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -2.2147 -0.3721  0.1291  0.1004  0.7280  1.5953
mean(x)
## [1] 0.1004483
median(x)
## [1] 0.1291042
class(x)
## [1] "numeric"

par(mfrow=c(1,2))
hist(x)
boxplot(x)

R como calculadora

4+2*10
## [1] 24
5^2
## [1] 25
10/3
## [1] 3.333333

Muchas funciones matemáticas están disponibles: sqrt, exp, log, sin, cos, tan, etc

sqrt(2)
## [1] 1.414214
log(32); log2(32)
## [1] 3.465736
## [1] 5
sin(45)
## [1] 0.8509035

Vectores

En general, necesitaremos trabajar con colecciones de números o vectores

Pueden ser creados de distinas maneras:

  • Comando concatenar (c)
peso <- c(50.5,48.2,70.5,25.5,66,69.12,89.5)
edad <- c(21,23,40,13,50,60,43)
peso
## [1] 50.50 48.20 70.50 25.50 66.00 69.12 89.50
edad
## [1] 21 23 40 13 50 60 43
length(peso)
## [1] 7

Vectores

  • Comando secuencia (seq)

Genera secuencias regulares de números seq(mínimo, máximo, incremento)

seq(1,10,1)
##  [1]  1  2  3  4  5  6  7  8  9 10
seq(2000, 2020, 2)
##  [1] 2000 2002 2004 2006 2008 2010 2012 2014 2016 2018 2020
seq(0,1,0.1)
##  [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

Vectores

  • Comando replicar (rep)

Genera secuencias regulares de un cierto patrón

rep(1,10)
##  [1] 1 1 1 1 1 1 1 1 1 1
rep(1:5,2)
##  [1] 1 2 3 4 5 1 2 3 4 5
rep(c("Si","No"),4)
## [1] "Si" "No" "Si" "No" "Si" "No" "Si" "No"

Vectores

Todas las operaciones aritméticas y funciones pueden ser aplicadas a vectores

a <- 1:10
a
##  [1]  1  2  3  4  5  6  7  8  9 10
b <- rep(c(1,2),5)
b
##  [1] 1 2 1 2 1 2 1 2 1 2
a+b
##  [1]  2  4  4  6  6  8  8 10 10 12
sqrt(a)
##  [1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751 2.828427
##  [9] 3.000000 3.162278
a^2
##  [1]   1   4   9  16  25  36  49  64  81 100

Vectores

Además de las funciones matemáticas, existen muchas otras funciones aplicables a vectores

Función Acción
length(v) Longitud del vector
min(v) Mínimo valor del vector
max(v) Máximo valor del vector
sum(v) Suma de los elementos del vector
mean(v) Promedio de los elementos del vector
var(v) Varianza muestral
sort(v) Ordena los elementos del vector en forma creciente

Vector

Para extraer un elemento en particular del vector se especifica el índice entre

También se pueden especificar rangos o un conjunto de índices

peso
## [1] 50.50 48.20 70.50 25.50 66.00 69.12 89.50
peso[2]
## [1] 48.2
peso[2:3]
## [1] 48.2 70.5
peso[c(1,3,5,7)]
## [1] 50.5 70.5 66.0 89.5

Valores Lógicos

Existen dos valores lógicos:

  • verdadero (TRUE)

  • falso (FALSE)

Los siguientes operadores producen valores lógicos

> Mayor que
< Menor que
<= Menor o igual que
>= Mayor o igual que
== Igual a
!= Distinto a

peso;edad
## [1] 50.50 48.20 70.50 25.50 66.00 69.12 89.50
## [1] 21 23 40 13 50 60 43
peso > 55
## [1] FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE
sum(peso>55); sum(peso[peso>55])
## [1] 4
## [1] 295.12
peso[edad>21]
## [1] 48.20 70.50 66.00 69.12 89.50

Matrices

Una matrix contiene una serie de elementos del mismo tipo organizados por filas y columnas

miMatriz <- matrix(1:10,nrow=2,ncol=5)
miMatriz
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    3    5    7    9
## [2,]    2    4    6    8   10
class(miMatriz)
## [1] "matrix"
dim(miMatriz)
## [1] 2 5

Matrices

Otra forma para crear matrices

y<- (1:10)
y
##  [1]  1  2  3  4  5  6  7  8  9 10
dim(y) <- c(2,5)
y
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    3    5    7    9
## [2,]    2    4    6    8   10

Matrices

También se pueden crear juntando filas (rbind) o columnas (cbind)

a <- seq(1,10,2)
b <- seq(2,10,2)
a; b
## [1] 1 3 5 7 9
## [1]  2  4  6  8 10
z <- rbind(a,b) 
z
##   [,1] [,2] [,3] [,4] [,5]
## a    1    3    5    7    9
## b    2    4    6    8   10
dim(z)
## [1] 2 5

Operaciones con Matrices

Podemos sumar, restar, multiplicar y dividir dos matrices pero la operación se lleva a cabo elemento por elemento

Para multiplicar matrices utilizamos el operador %*%

z*y
##   [,1] [,2] [,3] [,4] [,5]
## a    1    9   25   49   81
## b    4   16   36   64  100
z %*% t(y)
##   [,1] [,2]
## a  165  190
## b  190  220

Data frames

Generalmente necesitamos trabajar con datos de distintos tipos (caracteres, números, valores lógicos, etc.)

Los data frames nos permiten esto

data(mtcars)   # Carga un data set de R 
head(mtcars)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
class(mtcars)
## [1] "data.frame"

Acceso a la información en Data Frames

mtcars[,1]   # Accede el atributo mpg de mtcars
##  [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
## [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
## [31] 15.0 21.4
mtcars[1,1]  # 
## [1] 21
mtcars$mpg
##  [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
## [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
## [31] 15.0 21.4
mtcars$qsec
##  [1] 16.46 17.02 18.61 19.44 17.02 20.22 15.84 20.00 22.90 18.30 18.90 17.40
## [13] 17.60 18.00 17.98 17.82 17.42 19.47 18.52 19.90 20.01 16.87 17.30 15.41
## [25] 17.05 18.90 16.70 16.90 14.50 15.50 14.60 18.60

apply(mtcars[,1:4],2,max)  # Aplica la funcion max sobre las columnas 1 a 4
##   mpg   cyl  disp    hp 
##  33.9   8.0 472.0 335.0
apply(mtcars[,1:4],2,mean) # Aplica la funcion mean sobre las columnas 1 a 4
##       mpg       cyl      disp        hp 
##  20.09062   6.18750 230.72188 146.68750

Estructura de un documento en RMarkadown

  • Cabecera

    YAML Ain't Markup Language o Yet Another Markup Language
    Utiliza la sintaxis de YAML para especificar información sobre el documento a generar

  • Cuerpo del Documento en RMarkdown

Cabecera

Aparece al inicio del documento entre dos líneas ---

Permite establecer las características del documento a generar

---
title: "Mi primer Documento Dinámico" 
author: "Angela Di Serio"
date: "Abril, 2019"
output: 
  html_document:            # HTML
    toc: true               # incluir Tabla de contenidos 
    toc_float: true         # toc flotante a la izquierda del doc
    collapsed: false 
    smooth_scroll: false
    number_sections: true     
---

Ejemplo para generar un documento en HTML - Word o PDF

---
title: "Demostración"
author: "Angela Di Serio"
date: "April 26, 2019"
output:
  word_document:
    toc: yes
    toc_depth: '3'
  pdf_document:
    number_sections: yes
    toc: yes
    toc_depth: 3
  html_document:
    collapsed: no
    number_sections: yes
    smooth_scroll: no
    toc: yes
    toc_float: yes
---

Ejemplo

Para mejorar la apariencia de las tablas usamos df_print (kable, tibble, default)

---
title: "Demostración"
author: "Angela Di Serio"
date: "April 26, 2019"
output:
  pdf_document:
    number_sections: yes
    toc: yes
    toc_depth: 3
    df_print: kable
---

Cuerpo del Documento - R Markdown

Cuerpo del Documento

  • El cuerpo del documento está a continuación de los metadatos

  • La prosa o narración es Markdown

  • Hay dos tipos de código que pueden ser incluido dentro de la narración:

    • Fragmento de código que comienza con tres backticks como ```{r} donde r indica el nombre del lenguaje de programación. El fragmento o bloque termina con tres backticks. Entre las llaves se pueden especificar las opciones del fragmento como por ejemplo, establecer la altura de la figura en 5 pulgadas: ```{r, fig.height = 5}

    • Una expresión de código R en línea que comienza con un backtick r y termina con un backticks `

Texto

  • Simplemente lo que escribimos formará parte de la narrativa de nuestro documento final

  • Para iniciar un nuevo parráfo debemos agregar dos espacios al final de la línea

  • Itálica se indica colocando la frase entre un asterisco *itálica* itálica

  • Negrilla colocamos la frase entre dos asteriscos **negrilla** negrilla

Texto

  • Frase de forma literal se coloca entre backtick texto literal

  • Subíndices usamos el caracter ^ C^2^ C2

  • Superíndices usamos el caracter ~ C~2~ C2

Ecuaciones

  • En bloque se especifica entre dos signos de $ $$\int_{a}^{b} x^2 dx$$ \[\int_{a}^{b} x^2 dx\]
  • Entre líneas de texto se especifica entre un signo $ $\int_{a}^{b} x^2 dx$ \(\int_{a}^{b} x^2 dx\)

Texto

Para especificar las secciones de un documento se utiliza el símbolo # para el primer nivel, ## para el segundo nivel, ### para el tercer nivel y asi sucesivamente

Si alguna sección no debe ser enumerada se agrega {-} o {.unnumbered} después del título de la sección

# Prefacio {-}

Texto

Para citas se utiliza el símbolo > >“I thoroughly disapprove of duels. If a man should challenge me,
I would take him kindly and forgivingly by the hand and lead him
to a quiet place and kill him.”
>
> — Mark Twain

“I thoroughly disapprove of duels. If a man should challenge me, I would take him kindly and forgivingly by the hand and lead him to a quiet place and kill him.”

— Mark Twain

  • Item1
  • Item2
    • sub item 2.1
    • sub item 2.2
  • Item3
    • sub item 3.1
      • sub item 3.1.1

  1. Una lista que continuará después de un párrafo

aqui va un texto cualquiera
puedo tener varias líneas de texto
y la enumeración continuará cuando lo indique

  1. por estos lados continúa la lista enumerada

Creación de un fichero RMD

Formatos de Artículos para R Markdown

Librería rticles

Contiene un conjunto de formatos de R Markdown y plantillas para la creación de artículos de revistas y presentaciones de conferencias

install.packages(“rticles”) para su instalación desde RStudio

También existe la posibilidad de instalar la versión en desarrollo que puede contener formatos nuevos

remotes::install_github(“rstudio/rticles”)

ACM articles

ACS articles

AEA journal submissions

AGU journal submissions

AMS articles

Biometrics articles

Bulletin de l’AMQ journal submissions

CTeX documents

Elsevier journal submissions

IEEE Transaction journal submissions

JSS articles

MDPI journal submissions

Monthly Notices of the Royal Astronomical Society articles

NNRAS journal submissions

PeerJ articles

Royal Society Open Science journal submissions

Sage journal submissions

Springer journal submissions

Statistics in Medicine journal submissions

Copernicus Publications journal submissions

The R Journal articles