9 jun 2019

Shiny RStudio: convergencia de una distribución T-Student a normal

Los pasos para crear la aplicación son 4:

1 library(shiny)
2 ui <- fluidPage()
3 server <- function(input, output, session) {}
4 shinyApp(ui = ui, server = server)

Ahora, se muestra un ejemplo básico del uso de esta herramienta. En el mismo se crean dos gráficos: 1 de densidad y un qq-norm, para comparar una secuencia aleatoria t-student con una normal, mientras se van modificando los grados de libertad y el numero de observaciones de la variable aleatoria [ver aplicación].



library(shiny)

Luego de activar el paquete, en la primera parte del código se definen los inputs que irán siendo modificados en los gráficos y se colocan en un panel, que aparece en la parte derecha de la aplicación. Adicionalmente, mediante la función mainpanel, se colocan los nombres de los gráficos de salida.

 # Define UI for application that draws a histogram
ui <- fluidPage(
 # Título
   titlePanel("Convergencia de una T-Student a normal"),
# Crea un panel en la parte derecha de la aplicación para modificar los glb
     sidebarLayout(
      sidebarPanel(
         sliderInput(inputId = "glb",
                     label = "Grados de libertad",
                     min = 1,
                     max = 100,
                     value = 10),

         sliderInput(inputId = "obs",
                     label = "Observaciones",
                     min = 5,
                     max = 100000,
                     value = 10)
      ),

    mainPanel(plotOutput("distPlot"),
                   plotOutput("distPlot1")
      )
   )
)

Posteriormetne, se crear la función server donde se definen los input y los gráficos que serán utilizados en la aplicación. Estos deben estar en función de los argumentos modificables que atribuimos al panel anterior.

server <- function(input, output) {

    output$distPlot <- renderPlot({
        # generate inputs
         glb <- input$glb
         obs <- input$obs

      # draw the histogram with the specified number of bins
      curve(dt(x, df = glb), from = -5, to = 5, col = "sky blue",
           xlab = "Quantiles", ylab = "Probabilidad", lwd = 3)

      curve(dnorm(x,mean=0,sd=1), from = -5, to = 5,
               col = "grey40", add = TRUE, lwd = 2)

      legend("topleft", legend = c("T","Normal"),
             col = c("sky blue","grey40"),
             lty = 1, lwd = 2)
   })

   output$distPlot1 <- renderPlot({
     # generate bins based on input$bins from ui.R
     glb <- input$glb
     obs <- input$obs

     # draw the histogram with the specified number of bins
     qqnorm(rt(obs, df=glb))
     abline(0,1)
   })

}

Finalmente, se corre la aplicación.

shinyApp(ui = ui, server = server)

Referencias:

Quick-R. Probability Plots. https://www.statmethods.net/advgraphs/probability.html    

Magnusson, Kristoffer. Understanding the t-distribution and its normal approximation. an interactive visualization. https://rpsychologist.com/d3/tdist/


Tutorial: Building 'Shiny' Applications with R - GitHub Pages. https://rstudio.github.io/shiny/tutorial/.


Creando variables por grupos en dplyr (group_by + mutate)

  Simulemos una base de hogares, donde se identifica el hogar, el sexo (1 mujer) y provincia y edad para cada miembro.   # Definir la lista ...