Introducción

Tiene por objetivo general mostrar conceptos y herramientas detrás de la presentación de análisis de datos de una manera reproducible.

Investigación reproducible (Reproducible Research): es la idea de que el análisis de datos y los argumentos estadísticos se publiquen con sus datos y código para que otros puedan verificar los resultados y construir sobre ellos. https://www.coursera.org/course/repdata

Esta presentación usa RStudio y RMarkdown para llevar a cabo el objetivo de la investigación reproducible.

Ideas básicas

Réplica

  • Ayuda a aumentar el impacto de los hallazgos científicos.
  • Investigadores por su cuenta puedan llegar a los mismos hallazgos.
  • A veces no es posible replicar de forma exacta un estudio es debido a:
    • Tiempo: un estudio que duró 20 años
    • Dinero: sin fondos para replicarlo
    • Único: un estudio que es único
  • Sin embargo, un punto intermedio muy importante es reproducibility.

Reproducibilidad (Reproducibility)

  • Poner disponible los datos del estudio original.
  • Métodos computacionales disponibles.
  • Así, otros puedan ejecutarlos y llegar a tus mismos resultados.
  • Es una forma de validación del análisis realizado.

Flujo de la investigación

flujo

flujo

Algunos esfuerzos para ampliar la Reproducibility

R, & RStudio

Sofware Libre (libertades)

  1. Libertad de correr el programa para cualquier propósito.
  2. Libertad de estudiar cómo funciona el programa, adaptarlo a tus necesidades. Se puede acceder al código fuente.
  3. Libertad de re-distribuir copias.
  4. Libertad de mejorar el programa y liberar tus mejoras al público de tal manera que se beneficie toda la comunidad.

Comparación

Veamos las similitudes y diferencias entre R y RStudio: libros libros

Algunos recursos

Disponibles en el CRAN (https://cran.r-project.org/)

  • An Introduction to R
  • R Data Import/Export
  • R Installation and Administration
  • Writing R Extensions
  • R Internals

Libros

  • Matloff (2011). The art of R programming, William Pollock.
  • Albert (2012). R by example, Springer.

En general, la colección de libros USE R! son excelentes.

Markdown

Es una herramienta de conversión text-a-HTML para escritores web. Markdown te permite escribir usando un formato de texto plano de fácil escritura y lectura, luego convertirlo en un HTML estructurado válido (John Gruber, creador de Markdown)

Ejemplo 1: Plantilla

  • Nuevo RMarkdown
libros

libros

  • Agregar un título y escoger formato
libros

libros

  • Guardar el archivo y Knirt HTML: tiene una plantilla para los documentos, así:
libros

libros

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

You can also embed plots, for example:

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.

Veamos algunas características:

Énfasis

*itálico*       **bold**
_itálico_       __bold__

Títulos

# Título 1

## Título 2

### Título 3

Listas

Listas sin orden

* Item 1
* Item 2
    + Item 2a
    + Item 2b

Listas con orden

1. Item 1
2. Item 2
3. Item 3
    + Item 3a
    + Item 3b

Chunks

El código será evaluado e impreso

summary(cars$dist)
summary(cars$speed)

Código inline

Mediante este código podemoa evaluar una función del código de R en el cuerpo del texto

There were `r nrow(cars)` cars studied

Links

Adjunta la dirección http en texto plano o junto a una frase:

http://example.com

[linked phrase](http://example.com)

Imágenes

![alt text](http://example.com/logo.png)

![alt text](figures/img.png)

![](http://www.reactiongifs.com/r/srcstc.gif) # Una animación .gif

Citas

Un amigo decía:

> Es mejor dar 
> que recibir

Ecuaciones LaTeX Ecuaciones inline

$equation$

Mostrar ecuación

$$ equation $$

Tablas

Aquí pueden encontrar una página que convierte formatos de tablas: LaTeX, HTML, Text, Markdown.

First Header  | Second Header
------------- | -------------
Content Cell  | Content Cell
Content Cell  | Content Cell
First Header Second Header
Content Cell Content Cell
Content Cell Content Cell

Compartir Una vez que han compilado con Knit HTLM, se genera una página web en su directorio de trabajo. Pueden poner esta página en su nube de preferencia (dropbox, googledrive, onedrive, icloud) y compartir el vínculo.

Widgets HTML

En informática, un widget o artilugio es una pequeña aplicación o programa, usualmente presentado en archivos o ficheros pequeños que son ejecutados por un motor de widgets o Widget Engine.

Ejemplos

  • leaflet, es una librería creada para hacer mapas dinámicos, se puede usar anitaciones como marcas, polígosnos, entre otros.
# devtools::install_github("rstudio/leaflet")
library(leaflet)
## Warning: package 'leaflet' was built under R version 3.4.4
m <- leaflet()
m <- addTiles(m) # Se añaden títulos por defecto de OpenStreetMap
m <- addMarkers(m, lng=-78.5089133, lat=-0.208785, popup="Semana de la Estadística, Universidad Central del Ecuador")
m

Dado que leaflet aún no están en el CRAN, suele haber un error con las escalas. Para arreglarlo debes actualizar tu versión de scales, así: update.packages(ask = FALSE, repos = 'http://cran.rstudio.com')

  • dygraphs, provee facilidades para graficar series de tiempo. Permite hacer zoom y señalar los puntos de la serie.
library(dygraphs)
## Warning: package 'dygraphs' was built under R version 3.4.4
dygraph(nhtemp, main = "Temperatura en New Haven") %>% 
  dyRangeSelector(dateWindow = c("1920-01-01", "1960-01-01"))
library(networkD3)
## 
## Attaching package: 'networkD3'
## The following object is masked from 'package:leaflet':
## 
##     JS
data(MisLinks, MisNodes)
forceNetwork(Links = MisLinks, Nodes = MisNodes, Source = "source",
             Target = "target", Value = "value", NodeID = "name",
             Group = "group", opacity = 0.4)
  • DataTables, permite desplegar matrices y data frames de forma interactiva según los filtros/ordenamientos deseados.
library(DT)
## 
## Attaching package: 'DT'
## The following object is masked from 'package:networkD3':
## 
##     JS
datatable(iris, options = list(pageLength = 5))
library(threejs)
## Loading required package: igraph
## 
## Attaching package: 'igraph'
## The following objects are masked from 'package:stats':
## 
##     decompose, spectrum
## The following object is masked from 'package:base':
## 
##     union
z <- seq(-10, 10, 0.01)
x <- cos(z)
y <- sin(z)
scatterplot3js(x,y,z, color=rainbow(length(z)))

ShinyApps

Shiny es un paquete de Rque nos permite hacer aplicaciones dinámicas en la web.

Primero, instalar shiny

install.packages("shiny")

Veamos un ejemplo

library(shiny)
runExample("01_hello")

La estructura de la aplicación

Tiene dos componentes:

  • Un script para la interface del usuario
  • Un script para el servidor

ui.R

library(shiny)

# Se define UI para la aplicación que grafica el histograma
shinyUI(fluidPage(
  
  # Título de la aplicación
  titlePanel("Hello Shiny!"),
  
  # Barra lateral con un slider para el número de clases
  sidebarLayout(
    sidebarPanel(
      sliderInput("bins",
                  "Número de clases:",
                  min = 1,
                  max = 50,
                  value = 30)
    ),
    
    # Muestra un gráfico con la distribución generada
    mainPanel(
      plotOutput("distPlot")
    )
  )
))

El server.R contiene instrucciones que tu comoutador necesita par construir la app. Por ejemplo:

server.R

library(shiny)

# Ae define las instrucciones que el servidor requiere para graficar el histograma
shinyServer(function(input, output) {
  
  # Expresion que genera el histograma. Esta expresion es:
  # wrapped es un call a renderPlot para indicar que:
  #
  #  1) Es "reactive" y por lo lo tanto debe re-ejecutarse automaticamente
  #     cuando se ingresa el rango
  #  2) El tipo de output es un gráfico
  
  output$distPlot <- renderPlot({
    x    <- faithful[, 2]  # Datos de faithfull: tiempo entre erupciones
    bins <- seq(min(x), max(x), length.out = input$bins + 1)
    
    # Dibuja el histigrama en el numero de clases especificada
    hist(x, breaks = bins, col = 'darkgray', border = 'white')
  })
})

El server.R es muy simple (de cierta forma), hace cálculos y luego grafica el histograma según el número de clases.

Su turno

Cremos un directorio llamado App-1 en su directorio de trabajo. Copiamos los código de ui.R y server.R en dos scripts en esta carpeta:

libros

libros

Cargamos la aplicación con runApp("App-1")

setwd("~/Documents/UV/Computacion Estadística/Pres2/")
runApp("App-1")

Si deseo que aparezca el código de ui.R y server.R:

runApp("App-1", display.mode = "showcase")

Plantillas

Para crear aplicaciones, pueden copiar, pegar y modificar las aplicaciones existentes. La galería de shiny contiene varios ejemplos. Algunos de los ejemplos más usados son:

system.file("examples", package="shiny")

runExample("01_hello") # un histograma
runExample("02_text") # tablas y data frames
runExample("03_reactivity") # un ejémplo de resultados dinámicos
runExample("04_mpg") # variables globales
runExample("05_sliders") # barras desplazables
runExample("06_tabsets") # tabbed panels
runExample("07_widgets") # Texto de ayuda y botones
runExample("08_html") # Shiny app construida desde HTML
runExample("09_upload") # Subir archivos
runExample("10_download") # Descargar archivos
runExample("11_timer") # Un timer

Cada una muestra los códigos ui.R y server.R para que puedan usarlos a su conveniencia.

¿Cómo subir mi app a la web?

1.

Poner la aplicación en una carpeta pública (dropbox, onedrive,googledrive) como un zip y enviar el link al usuario.

  • Este usuario debe descargar la app y fijar el directorio de trabajo, instalar shiny y ejecutar:
# https://dl.dropboxusercontent.com/u/19384613/App-1.zip # Vínculo de la carpeta
# install.packages("shiny")
library(shiny)
runApp("App-1")

La limitante de este método es que el usuario debe tener instalado R y shiny en sus computadores.

2.

Otra opción interesante es usar Shinyapps.io. Existen opciones pagadas y libres.

  • Primero deben crear una cuenta.
  • Una vez que lo hayan hecho, seguiremos los siguientes pasos:

Configurar la cuenta Una vez que crearon la cuenta, deben configurar el paquete shinyapps use SU cuenta. Shinyapps.io genera automáticamente un código token (clave) que el paquete shinyapps debe utilizar para acceder a su cuenta:

libros

libros

Ahora, debemos configurar el paquete shinyapps a tu cuenta de usuario: - Has click en el ícono de candado del token:

libros

libros

Aparecerá un comando con el código del token. Debes pegar este comando y ejecutarlo en la consola de RStudio. Esto hace que su configuración haya terminado.

Finalmente, ejecutan la aplicación y:

libros

libros

  • Se despliega una página web donde su aplicación está subida y pueden compartir el link

  • Otro ejemplo puede ser encontrado en el siguiente link

Referecias

-Shinyapps.io

-RMarkdown

GRACIAS