29/09, 2020

Tipos de presentaciones en R

Como abrir nueva presentación

Se escribe igual que Rmarkdown

  • ## es para pasar de una a otra diapo
  • {.smaller} texto mas pequeño
  • {.build} empezando de a poco

para que funcione KableExtra

Ecuaciones

$$
  \begin{aligned}
  \dot{x} & = \sigma(y-x) \\
  \end{aligned}
$$  

\[ \begin{aligned} \dot{x} & = \sigma(y-x) \\ \end{aligned} \]

  • acá pueden ver varios ejemplos de como hacer ecuaciones

Shiny

Shiny!!!!!!!!

  • Dos archivos, server y app

server, donde se hacen las cosas

  • Generamos gráficos, tablas, calculos, modelos, etc.
  • Estos outputs se crean en base a inputs que bienen de ui
  • la función principal es renderAlgo (renderTable, renderPlot, renderDataTable, etc.)
  • El orden no importa

ui donde se muestran las cosas y

  • Generamos inputs en sliders, cajas de selección, etc.
  • Al mover los inputs cambiamos los outputs
  • Escribimos tiulos parrafos y seleccionamos estilos
  • El orden importa

Generando nuestro primer server

library(shiny)
library(ggplot2)
data("mtcars")

shinyServer(function(input, output) {
    
    output$distPlot <- renderPlot({
        ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point()
    })
    
})

shinyServer(function(input, output) {
    
    output$distPlot <- renderPlot({
        ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point()
    })
    output$Table <- renderTable({
        mtcars
    })
    
})

Arreglemos el UI

library(shiny)

shinyUI(fluidPage(
  
  titlePanel("Old Faithful Geyser Data"),
  
  sidebarLayout(
    sidebarPanel(
       sliderInput("bins",
                   "Number of bins:",
                   min = 1,
                   max = 50,
                   value = 30)
    ),
    mainPanel(
       plotOutput("distPlot")
    )
  )
))

arreglemos la UI

library(shiny)

shinyUI(fluidPage(
  
  titlePanel("Datos de motor trends de 1974"),
  
  sidebarLayout(
    sidebarPanel(
       sliderInput("bins",
                   "Number of bins:",
                   min = 1,
                   max = 50,
                   value = 30)
    ),
    mainPanel(
       plotOutput("distPlot"),
       tableOutput("Table")
    )
  )
))

Agreguemos un input a la UI

library(shiny)

shinyUI(fluidPage(
  
  titlePanel("Datos de motor trends de 1974"),
  
  sidebarLayout(
    sidebarPanel(
      selectInput("Variable",
                  "Selecciona la Variable y:",
                  choices = c("cyl", "disp", "hp", "drat", "wt", "qsec", "vs", "am", 
                              "gear", "carb"),
                  selected = "wt")
    ),
    mainPanel(
       plotOutput("distPlot"),
       tableOutput("Table")
    )
  )
))

Ha interactuar con el input!!!!!!

  • Vamos a server
  • Saquemos la tabla por ahora
shinyServer(function(input, output) {
    
    output$distPlot <- renderPlot({
        ggplot(mtcars, aes_string(x = input$Variable, y = "mpg")) + geom_point()
    })
    output$Table <- renderTable({
        mtcars
    })
    
})

Generando mas interacción

  • UI
mainPanel(plotOutput("distPlot"), selectInput("Modelo", "Selecciona el tipo de modelo:", 
    choices = c("lm", "loess", "gam"), selected = "lm"))
  • Server
output$distPlot <- renderPlot({
    ggplot(mtcars, aes_string(x = input$Variable, y = "mpg")) + geom_smooth(method = input$Modelo) + 
        geom_point()
})

Otros tipos de input (slider)

  • UI
sidebarPanel(selectInput("Variable", "Selecciona la Variable x:", choices = c("cyl", 
    "disp", "hp", "drat", "wt", "qsec", "vs", "am", "gear", "carb"), selected = "wt"), 
    sliderInput("YLIM", "Selecciona los límites del eje y:", min = 0, max = 40, 
        step = 2, value = c(0, 20)))
  • Server
output$distPlot <- renderPlot({
    p <- ggplot(mtcars, aes_string(x = input$Variable, y = "mpg")) + geom_smooth(method = input$Modelo) + 
        geom_point()
    p + ylim(input$YLIM)
})

Otros tipos de input (text)

  • UI
mainPanel(plotOutput("distPlot"), textInput("Formula", "Escribe la formula de tu modelo:", 
    value = "y ~ x + I(x^2)"))
  • Server
output$distPlot <- renderPlot({
    p <- ggplot(mtcars, aes_string(x = input$Variable, y = "mpg")) + stat_smooth(method = "lm", 
        formula = input$Formula) + geom_point()
    p + ylim(input$YLIM)
})

Botón de submit

mainPanel(plotOutput("distPlot"), textInput("Formula", "Escribe la formula de tu modelo:", 
    value = "y ~ x + I(x^2)"), submitButton("Actualizar modelo", icon("refresh")))

Transformemos algunas variables en factores?

  • ui
sliderInput("YLIM", "Selecciona los límites del eje y:", min = 0, max = 40, 
                  step = 2, value = c(0,20)
                  ),
checkboxGroupInput("Factores", "Transformar en factores:",
                   c("cyl", "disp", "hp", "drat", "wt", "qsec", "vs", "am", 
                      "gear", "carb"), selected = "am")
  • Server
output$distPlot <- renderPlot({
    mt <- as.data.frame(map_at(mtcars, factor, .at = input$Factores))
    p <- ggplot(mt, aes_string(x = input$Variable, y = "mpg")) + stat_smooth(method = "lm", 
        formula = input$Formula) + geom_point()
    p + ylim(input$YLIM)
})

Variables en factores (Para que?)

output$distPlot <- renderPlot({
    mt <- as.data.frame(map_at(mtcars, factor, .at = input$Factores))
    p <- ggplot(mt, aes_string(x = input$Variable, y = "mpg"))
    if (class(mt[, input$Variable]) == "numeric") {
        p <- p + stat_smooth(method = "lm", formula = input$Formula) + geom_point()
    }
    if (class(mt[, input$Variable]) == "factor") {
        p <- p + geom_boxplot()
    }
    p + ylim(input$YLIM)
})

Relleno según otra variable

  • UI
checkboxGroupInput("Factores", "Transformar en factores:",
                         c("cyl", "disp", "hp", "drat", "wt", "qsec", "vs", "am", 
                           "gear", "carb"), selected = "am"),
      selectInput("Color",
                  "Color segun la variable:",
                  choices = c("cyl", "disp", "hp", "drat", "wt", "qsec", "vs", "am", 
                              "gear", "carb"))
  • server
output$distPlot <- renderPlot({
    mt <- as.data.frame(map_at(mtcars, factor, .at = input$Factores))
    p <- ggplot(mt, aes_string(x = input$Variable, y = "mpg"))
    if (class(mt[, input$Variable]) == "numeric") {
        p <- p + stat_smooth(method = "lm", formula = input$Formula, aes_string(fill = input$Color)) + 
            geom_point()
    }
    if (class(mt[, input$Variable]) == "factor") {
        p <- p + geom_boxplot(aes_string(fill = input$Color))
    }
    p + ylim(input$YLIM)
})

Evaluación Final

Evaluación final (Viernes 14 de Septiembre)

  • Informe en PDF
  • Debe tener
    • Introducción
    • Métodos
    • Resultados
    • Conclusiones
    • Bibliografía