使用 R Shiny 进行多元线性回归(SelectInput --> multiple=TRUE) [英] Using R Shiny for Multiple Linear Regression (SelectInput --> multiple=TRUE)

查看:108
本文介绍了使用 R Shiny 进行多元线性回归(SelectInput --> multiple=TRUE)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使用 R Shiny 代码生成动态仪表板时遇到了一些问题,用户可以在其中选择线性回归模型中的 1 个或多个自变量并打印结果.我已经能够成功地遵循用户只输入一个自变量的示例,但是对于多个自变量,我没有找到同样的运气.我不确定我做错了什么,但我收到一条错误消息,显示模型公式中的术语无效".

I'm having some trouble getting my R Shiny code to produce a dynamic dashboard where the user can select 1 or more independent variables in a linear regression model and print the results. I've been able to successfully follow examples where the user only inputted one independent variable, but with multiple independent variables, I have not found the same luck. I'm not sure what I am doing wrong, but I get an error that reads, "invalid term in model formula".

以下是我目前使用的代码:

Below is the code I've used so far:

library(shinythemes)
library(shinyWidgets)
library(shiny)
library(shinydashboard)


#data(mtcars)

AttributeChoices=c("cyl","disp","hp","drat","wt","qsec","vs")


# Define UI for application
ui = fluidPage(
    navbarPage("R Shiny Dashboard",
        tabPanel("Welcome",
                 tabName = "welcome",
                 icon=icon("door-open"),

          fluidPage(theme=shinytheme("cerulean"),
                    h1("Welcome to my Shiny Dashboard!"),
                    br(),
                    p(strong(tags$u("What is this dashboard all about?"))),
                    p("I'm going to do stuff."),  
                    br(),
                    p(strong(tags$u("Here's another question."))),
                    p("Here's my answer."),
                    br(),
                    p(strong(tags$u("How can I use this dashboard?"))),
                    p("You can click on any of the tabs above to see a different analysis of the data.")
                    )),

              tabPanel("Regression",
                       tabname="regression",
                       icon=icon("calculator"),
                       selectInput(inputId = "indep", label = "Independent Variables", 
                                   multiple = TRUE, choices = as.list(AttributeChoices), selected = AttributeChoices[1]),
                       verbatimTextOutput(outputId = "RegOut")


          )
        ))
# Define server logic 
server <- function(input, output) {

#-------------------REGRESSION-------------------#


  lm_reg <- reactive(
  lm(as.formula(paste(mtcars$mpg," ~ ",paste(input$indep,collapse="+"))),data=CFD)
  )


  output$RegOut = renderPrint({summary(lm_reg())})

}

# Run the application 
shinyApp(ui = ui, server = server)

在 StackOverflow 上阅读类似的帖子似乎表明问题可能出在列名有空格上,但在本示例中并非如此.我不知道如何解决这个问题.任何人都可以帮助我指出正确的方向吗?谢谢!

Reading similar posts on StackOverflow seem to suggest the problem might be with the column names having spaces, but that's not the case here in this example. I am not sure how to resolve this issue. Can anyone help point me in the right direction? Thank you!

推荐答案

给你,我喜欢用recipe包解决这样的问题,而不是依赖非常难的字符串操作,诀窍是使用!!!运算符,你甚至可以花哨,让用户传递一些选择助手

Here you go, I like to use the recipe package for problems like this instead of relying on very hard string manipulation, the trick is to use the !!! operator, you can even get fancy and let the user pass some select helpers

library(shinythemes)
library(shinyWidgets)
library(shiny)
library(shinydashboard)
library(recipes)
#data(mtcars)

AttributeChoices=c("cyl","disp","hp","drat","wt","qsec","vs")


# Define UI for application
ui = fluidPage(
  navbarPage("R Shiny Dashboard",
             tabPanel("Welcome",
                      tabName = "welcome",
                      icon=icon("door-open"),

                      fluidPage(theme=shinytheme("cerulean"),
                                h1("Welcome to my Shiny Dashboard!"),
                                br(),
                                p(strong(tags$u("What is this dashboard all about?"))),
                                p("I'm going to do stuff."),  
                                br(),
                                p(strong(tags$u("Here's another question."))),
                                p("Here's my answer."),
                                br(),
                                p(strong(tags$u("How can I use this dashboard?"))),
                                p("You can click on any of the tabs above to see a different analysis of the data.")
                      )),

             tabPanel("Regression",
                      tabname="regression",
                      icon=icon("calculator"),
                      selectInput(inputId = "indep", label = "Independent Variables", 
                                  multiple = TRUE, choices = as.list(AttributeChoices), selected = AttributeChoices[1]),
                      verbatimTextOutput(outputId = "RegOut")

             )
  ))
# Define server logic 
server <- function(input, output) {

  #-------------------REGRESSION-------------------#

recipe_formula <- reactive(mtcars %>%
    recipe() %>%
    update_role(mpg,new_role = "outcome") %>%
    update_role(!!!input$indep,new_role = "predictor") %>% 
    formula())

  lm_reg <- reactive(
    lm(recipe_formula(),data = mtcars)
  )


  output$RegOut = renderPrint({summary(lm_reg())})

}

# Run the application 
shinyApp(ui = ui, server = server)

这篇关于使用 R Shiny 进行多元线性回归(SelectInput --> multiple=TRUE)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆