Abril, 2019
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
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
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
Capacidad de un investigador para duplicar los resultados de un estudio anterior utilizando los mismos materiales que utilizó el investigador original
Capacidad de un investigador para duplicar los resultados de un estudio anterior si se siguen los mismos procedimientos pero se recopilan datos nuevos
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…
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
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)\]
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
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
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>
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
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)\]
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
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
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.
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
| 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 |
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)
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
En general, necesitaremos trabajar con colecciones de números o vectores
Pueden ser creados de distinas maneras:
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
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
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"
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
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 |
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
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
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
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
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
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
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"
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
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
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 ---
--- 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 ---
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 ---
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 `
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
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
$$\int_{a}^{b} x^2 dx$$ \[\int_{a}^{b} x^2 dx\]$\int_{a}^{b} x^2 dx$ \(\int_{a}^{b} x^2 dx\)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 {-}
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
aqui va un texto cualquiera
puedo tener varias lÃneas de texto
y la enumeración continuará cuando lo indique
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