Abstract
This is an undergrad student level instruction for class use.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
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
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.
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.
# 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")
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.
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.
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.
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.
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.