Licença

This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.

License: CC BY-SA 4.0

Citação

Sugestão de citação: FIGUEIREDO, Adriano Marcos Rodrigues. Econometria básica: Shiny code para regressão múltipla em R. Campo Grande-MS,Brasil: RStudio/Rpubs, 2019. Disponível em http://rpubs.com/amrofi/Econometrics_shiny_regressao_af. DOI: 10.13140/RG.2.2.25495.70563/1. https://www.researchgate.net/publication/352380686_Econometria_basica_Shiny_code_para_regressao_multipla_em_R

1 Introdução

O ensino de econometria e estatística tem sempre a dificuldade de melhorar a compreensão dos iniciantes nestas temáticas. Assim, elaborei um pequeno e simples código em R para ilustrar a regressão linear múltipla em um aplicativo (app) Shiny (CHANG et al., 2021). Este arquivo traz o código para executá-lo ou reproduzi-lo e adaptá-lo.

O code está hospedado em Meu github , https://github.com/amrofi/shiny_regressao_af.

Mais materiais sobre Econometria básica estão em meu canal do Youtube: Youtube Playlist de Econometria Básica.

2 Execução direta

Para aqueles que desejam apenas executar o app diretamente, apenas execute o chunk abaixo em seu console. Sugerimos o RStudio. É necessário ter o R e RStudio instalados, assim como o pacote shiny.

O app solicitará a entrada de um arquivo em formato .csv contendo a variável dependente na primeira coluna, e as demais nas colunas ao lado. Será melhor trabalhar com rótulos das variáveis na primeira linha do arquivo .csv.

Coloquei um print de exemplo dos dados abaixo, em que CRIM seja a variável dependente e as demais as independentes em um modelo do tipo (Figura 2)

\[CRIM=\beta_0+\sum_{i=ZN}^{i=MEDV} (\beta_iX_i)\],

em que \(i=i(ZN,INDUS,CHAS,NOX,RM,AGE,DIS,RAD,TAX,PTRATIO,LSTAT,MEDV)\).

O app permitirá selecionar uma ou mais variáveis do conjunto i.

Tabela exemplo dos dados do arquivo .csv. Fonte: elaboração própria.

Tabela exemplo dos dados do arquivo .csv. Fonte: elaboração própria.

# launch directly typing the code below in your RStudio console the code is
# hosted on https://github.com/amrofi/shiny_regressao_af
library(shiny)
runUrl("https://github.com/amrofi/shiny_regressao_af/raw/main/shiny_regressao_af.zip")

3 O código do app

Aqueles que desejarem aperfeiçoar ou rodar o app de suas máquinas sem baixar do github, podem fazê-lo copiando e colando o código abaixo em seu projeto R. Ele está em formato de arquivo único de nome app.r, contendo as partes básicas de qualquer aplicativo Shiny: ui, server, e shinyApp(ui = ui, server = server). Uma sugestão interessante é que o usuário iniciante assista os tutoriais de Learn Shiny - Get Started, elaborados pela equipe RStudio.

# This is a Shiny web application based on starja
# https://stackoverflow.com/questions/65415824/linear-regression-r-shiny-
# application-with-multiple-independent-variable-selecti
# runUrl(
# "https://github.com/amrofi/shiny_regressao_af/raw/main/shiny_regressao_af.zip"
# )
#  
library(shiny) 
library(DT)
library(shinyWidgets) 

ui <- fluidPage(
    titlePanel("Linear Model: multiple regression"),
    h3("Regressão linear múltipla em R:"),
    h4("Adaptado por Adriano Marcos Rodrigues Figueiredo a partir de `starja` 
    comment on stackoverflow"),
    h5("E-mail: adriano.figueiredo@ufms.br"),
    helpText("Entrar com seu arquivo em extensão .csv, contendo rótulos das 
    variáveis na primeira linha."),
    helpText("O menu drowdown surgirá após especificar o modelo, sugerindo a 
    primeira coluna como variável dependente e a segunda coluna em diante 
    como independente."),
    sidebarPanel(
        fileInput(
            inputId = "filedata",
            label = "Upload data .csv - Selecione seu arquivo .csv",
            multiple = FALSE,
            accept = c(".csv"),
            buttonLabel = "Choosing ...",
            placeholder = "No files selected yet"
        ),
        uiOutput("yvariable"),
        uiOutput("xvariable")
    ),   #sidebarpanel
    
    mainPanel( #DTOutput("tb1"), 
        fluidRow(column(6, verbatimTextOutput('lmSummary')) , 
        column(6, plotOutput('diagnosticPlot')))
    )
) #fluidpage


server <- function(input, output) {
    
    data <- reactive({
        req(input$filedata)
        inData <- input$filedata
        if (is.null(inData)){ return(NULL) }
        mydata <- read.csv(inData$datapath, header = TRUE, sep=",")
    })
    output$tb1 <- renderDT(data())
    
    output$xvariable <- renderUI({
        req(data())
        xa<-colnames(data())
        pickerInput(inputId = 'xvar',
                    label = 'Select x-axis variable',
                    choices = c(xa[1:length(xa)]), selected=xa[2],
                    options = list(`style` = "btn-info"),
                    multiple = TRUE)
        
    })
    output$yvariable <- renderUI({
        req(data())
        ya<-colnames(data()) 
        pickerInput(inputId = 'yvar',
                    label = 'Select y-axis variable',
                    choices = c(ya[1:length(ya)]), selected=ya[1],
                    options = list(`style` = "btn-info"),
                    multiple = FALSE)
        
    })
    
    lmModel <- reactive({
        req(data(),input$xvar,input$yvar)
        x <- as.numeric(data()[[as.name(input$xvar)]])
        y <- as.numeric(data()[[as.name(input$yvar)]])
        current_formula <- paste0(input$yvar, " ~ ", 
        paste0(input$xvar, collapse = " + "))
        current_formula <- as.formula(current_formula)
        model <- lm(current_formula, data = data(), na.action=na.exclude)
        return(model)
    })

    output$lmSummary <- renderPrint({
        req(lmModel())
        summary(lmModel())
    })
    
    output$diagnosticPlot <- renderPlot({
        req(lmModel())
        par(mfrow = c(2,2))
        plot(lmModel())
    })
}

shinyApp(ui = ui, server = server)

Uma imagem básica do app está na Figura 3.

Tela inicial do app de regressão linear múltipla. Fonte: elaboração própria.

Tela inicial do app de regressão linear múltipla. Fonte: elaboração própria.

Caso selecione o arquivo housing.csv (disponível no Meu github), aparecerá a tela como na Figura 4, para uma regressão simples tipo \(CRIM=\beta_0+\beta_{ZN}X_{ZN}\) :

Tela da seleçao de CRIM e ZN no dataset housing. Fonte: elaboração própria.

Tela da seleçao de CRIM e ZN no dataset housing. Fonte: elaboração própria.

A seleção múltipla pode ser feita clicando sobre os vários nomes das variáveis. Automaticamente o aplicativo atualiza a saída dos resultados e os gráficos de diagnóstico residual básico (Figura 5).

Tela da seleção múltipla no dataset housing. Fonte: elaboração própria.

Tela da seleção múltipla no dataset housing. Fonte: elaboração própria.

4 Considerações finais

O usuário pode usar e aperfeiçoar o código citando a origem. Sugere-se baixar o código do github para evitar erros de digitação. Qualquer sugestão será muito bem recebida.

Referências

CHANG, Winston; CHENG, Joe; ALLAIRE,JJ; SIEVERT, Carson; SCHLOERKE, Barret; XIE, Yihui; ALLEN, Jeff; MCPHERSON, Jonathan; DIPERT, Alan; BORGES, Barbara (2021). shiny: Web Application Framework for R. R package version 1.6.0. Disponível em https://CRAN.R-project.org/package=shiny, Acesso em 14.Jun.2021.