【问题标题】:How to create simple linear prediction model in shiny?如何在闪亮中创建简单的线性预测模型?
【发布时间】:2020-04-03 17:47:32
【问题描述】:

最近我正在尝试创建一个交互式闪亮应用程序。在这个应用程序中,我想要一个线性模型来预测用户的给定值。此外,用户可以选择预测变量和解释变量。在此之后,模型简单地返回应用程序显示的预测值。但是,我无法弄清楚如何让应用程序使用现有数据框并返回预测值。运行应用程序时出现以下错误:

Warning in storage.mode(v) <- "double" : NAs introduced by coercion
Warning: Error in contrasts<-: contrasts can be applied only to factors with 2 or more levels
[No stack trace available]

脚本本身类似于 Sean Kross (https://seankross.com/developing-data-products/shiny.html#reactivity) 的代码。我使用了下面提供的脚本导致错误:

librar(shiny)
#Create random data frame with three vectors
df          <- data.frame(V1=1:100, V2=100:1*runif(100, min=0, max=1), V3=1:100*runif(100, min=0, max=1))

ui          <- fluidPage(
  headerPanel("Regression"), 
  sidebarPanel(
    p("Select explanatory variable"),
    selectInput(inputId = "ExpVar", label = "Explanatory variable", choices = colnames(df)),
    p("Select predictor variable"),
    selectInput(inputId = "PreVar", label = "Predictor variable", choices = colnames(df)), 
    numericInput(inputId = "Pred", label = "Predict chosen value", value = 10),
    h3("Prediction"),
    textOutput("prediction")))

server      <- function(input, output){

    modpred <- reactive({
    Pre     <- input$Pred
    Pname   <- input$PreVar
    mod     <- lm(input$PreVar~input$ExpVar, data=df)
    predict(mod, newdata = data.frame(Pname = Pre))})

    output$prediction <- renderText({modpred()})

}

shinyApp(ui, server)

提前感谢您的宝贵时间

【问题讨论】:

    标签: r shiny model linear-regression


    【解决方案1】:

    对此可能有不同的方法。一种可能是使用varSelectInput 并在ui 中从df 中选择变量名(这会返回一个符号)。

    这里我们留下selectInput 并使用字符串。在使用lm之前,您需要根据这些字符串创建公式,因为它们不是符号。

    为此,您可以使用as.formulareformulate(后者在此处完成)。这将生成您的公式(例如,V2 ~ V1)。

    此外,对于predict,您需要将new_df 的列名设置为Pname。前面的代码会将列本身命名为Pname,而不是Pname 等于的字符串。

    modpred <- reactive({
      Pre     <- input$Pred
      Pname   <- input$PreVar
      mod     <- lm(reformulate(input$PreVar, input$ExpVar), data=df)
      new_df  <- data.frame(Pre)
      names(new_df) <- Pname
      predict(mod, newdata = new_df)
    })
    

    【讨论】:

    • 是的,这行得通,谢谢!!令我困惑的是,输入/输出没有在服务器功能之外定义。反应函数的使用也不同于普通的 R 函数。闪亮的网站提供了一些示例,但大多数都非常关注绘图的显示,而不是模型预测的简单示例。有人对 Shiny 中应用的模型的简单示例有一些建议吗?
    猜你喜欢
    • 2020-07-17
    • 1970-01-01
    • 2016-07-25
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多