【问题标题】:R Shiny - Display Linear, Polynomial and Cubic Regression Summaries in Seperate TablesR Shiny - 在单独的表格中显示线性、多项式和三次回归摘要
【发布时间】:2020-10-01 00:08:22
【问题描述】:

我是 R 和 R Shiny 的新手。我目前正在尝试创建一个 R Shiny 应用程序来显示年度线性 (y~x)、二次 (y~x^2+x) 和三次 (y~x^3x^2+x) 回归结果的摘要选定位置在选定时期内的海平面值。时间段由用户从范围滑块中选择开始年份和结束年份来确定,而位置由用户从下拉框中选择。然后,我想从用户选择的数据中生成线性、二次和三次回归模型,并将每个回归汇总结果显示在单独的表格中。

到目前为止,我已经成功地根据上面用户选择的参数生成了一个过滤数据表,其中的列包含回归模型的线性、二次和三次项。但是,当我尝试使用从answer to a similar question previously asked elsewhere on here 获取和修改的LinearModel <- lm(input$var ~ ., data = dt) 生成回归结果时,我收到错误Error in as.data.frame.default(data, optional = TRUE) : cannot coerce class ‘"function"’ to a data.frame

用于线性、二次和三次回归的数据表分别在我的代码中显示。这是为了提供信息,也可以作为一个占位符,用相关的回归结果替换。

最后,我希望数据显示为整数,但是当我尝试使用 my_data[,-1] <-round(my_data[,-1],0) 将数据框中的数据转换为整数时,它仍然显示为两位小数?

非常感谢

布莱恩。

library(shiny)

Year <- c(2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009)
Year2 <- Year^2
Year3 <- Year^3
Auckland <- c(1760, 1549, 1388, 1967, 1326, 1765, 1814, 1693, 1502, 1751)
Wellington <- c(2176, 3154, 1138, 1196, 2132, 3176, 4181, 5169, 3150, 4175)
Lyttelton <- c(2176, 3154, 1138, 1196, 2132, 3176, 4181, 5169, 3150, 4175)
my_data <- as.data.frame(cbind(Year,Year2,Year3, Auckland,Wellington, Lyttelton))
my_data[,-1] <-round(my_data[,-1],0) #Convert my_data to integers - doesn't work? 

ui <- fluidPage(
  titlePanel("New Zealand Annual Mean Sea Level (MSL) Regression Summary"),

  sidebarLayout(
    sidebarPanel(
      helpText("Annual Mean Sea Level Summary for various locations around NZ."),

      selectInput("var", 
                  label = "Choose a Location",
                  choices = c("Auckland",
                              "Lyttelton",
                              "Wellington"),
                  selected = "Auckland"),

      sliderInput("range", 
                  label = "Choose a start and end year:",
                  min = min(my_data$Year), max = max(my_data$Year), value = c(2003, 2008),sep = "",)
    ),
    mainPanel(
      tableOutput("LinearRegression"),
      tableOutput("QuadraticRegression"),
      tableOutput("CubicRegression")
    )
  )
)
server <- function(input, output) {

  output$LinearRegression <- renderTable({
    dt <- my_data[my_data$Year >= input$range[1] & my_data$Year <= input$range[2],]
    dt[,c(input$var,"Year")]
  },include.rownames=FALSE)
  #Below line doesn't work?
  #LinearModel <- lm(input$var ~ ., data = dt)

  output$QuadraticRegression <- renderTable({
    dt <- my_data[my_data$Year >= input$range[1] & my_data$Year <= input$range[2],]
    dt[,c(input$var,"Year","Year2")]
  },include.rownames=FALSE)
  #Below line doesn't work?
  #QuadraticModel <- lm(input$var ~ ., data = dt)

  output$CubicRegression <- renderTable({
    dt <- my_data[my_data$Year >= input$range[1] & my_data$Year <= input$range[2],]
    dt[,c(input$var,"Year","Year2","Year3")]
  },include.rownames=FALSE)
  #Below line doesn't work?
  #CubicModel <- lm(input$var ~ ., data = dt) 
}
shinyApp(ui, server)

【问题讨论】:

    标签: r dataframe shiny regression linear-regression


    【解决方案1】:

    您从各种renderXXXX 调用中取出每个模型的数据,并使其成为反应式。您可以使用 is 作为表渲染器和回归摘要输出的输入。此外,lm 的输出不是表格,因此您不能使用renderTable 来呈现它。最后,将input$var 的值插入您的lm 调用时出现问题。

    所以,我已将您的 tableOutput("LinearRegression") 更改为 VerbatimTextOutput("LinearRegression")。然后,在服务器中...

      filteredData <- reactive({
        dt <- my_data[my_data$Year >= input$range[1] & my_data$Year <= input$range[2],]
        dt[,c(input$var,"Year")]
        dt
      })
    
      output$LinearRegression <- renderPrint({
        lm(formula(paste(input$var, "~ .")), data = filteredData())
      })
    

    您可以以类似的方式修改其他输出。

    顺便说一句,您的数据不是tidy。我强烈建议你这样做。现在的一点点努力,将来会减轻你的痛苦。

    【讨论】:

    • 谢谢@Limey。为迟到的回应道歉。我已经进行了您上面建议的更改,并将summary() 添加到每个output$renderprint 命令以获得output$renderprint &lt;- renderPrint(summary({lm(formula(paste(input$var, "~ .")), data = filteredData()) })),这正是我想要的。将查看您提供的“整理”链接以尝试整理我的数据。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 2021-03-11
    • 2023-03-11
    • 2020-02-01
    相关资源
    最近更新 更多