线性模型需要变量作为输入和输出

时间:2017-07-05 15:14:40

标签: r shiny

所以,我是编码,R和数据科学的新手,并且主要通过在线教程获得所有这些。我写了一个闪亮的应用程序,我试图实现一些事情:

  • 运行线性回归
  • 运行蒙特卡罗模拟
  • 充满活力

为此,我使用了Species数据集。该应用程序的目的是允许用户选择输入和输出变量,这些变量将传递给线性回归模型。然后,用户将为其选定的变量提出分布,并使用在蒙特卡罗模拟中生成的线性模型,并输出结果的直方图。

然而,有些东西看起来并不正确,因为当我在输入和输出下选择相同的变量时我只能生成直方图,而我似乎不知道为什么?我的意思是,例如,我需要在Select inputoutput下选择library(shiny) ui <- fluidPage( fluidRow( column(4, wellPanel( sliderInput("sampleSize","Please Select Sample Size:", min = 0,max = 5000,value = 1000,step = 100), uiOutput("invar"), uiOutput("outvar"), uiOutput("moC"))) ), mainPanel( plotOutput("histogram") ) ) server <- function(input, output) { sorted <- reactive({ data <- iris[ ,c(input$inv)] data}) output$invar<-renderUI({ selectizeInput('invar',"Select Regression Input Variables", choices = names(iris), multiple = TRUE) }) output$outvar<-renderUI({ selectizeInput('outvar',"Select Regression Output Variable", choices = names(iris), multiple = FALSE) }) sorted <- reactive({ iris[input$invar] }) output$moC <- renderUI({ numvar<- length(input$invar) lapply(1:numvar, function(i) { tagList( selectInput("inv",paste0("Please Select Probability Distribution of ", input$invar[i]), choices = c("Normal","Uniform")), conditionalPanel(condition = "input.inv=='Normal'", textInput("invarpdfmean","Please Select Input Variable Mean:",2), textInput("invarpdfsd","Please Select Input Variable Standard Deviation", 0.02)), conditionalPanel(condition = "input.inv=='Uniform'", textInput("invarpdfmin","Please Select Minimum Input Variable Value:",1), textInput("invarpdfmax","Please Select Maximum Input Variable Value", 5)) )})}) output$histogram <- renderPlot({ n <- input$sampleSize numvar<- length(input$invar) SelectedVars <- input$invar vartopredict <- input$outvar fmla <- reformulate(SelectedVars, response = vartopredict) lapply(1:numvar, function(i) { if(input$invar[i]=="Normal"){ invarpdfVec <- rnorm(n,mean = as.numeric(input$invarpdfmean),sd= as.numeric(input$invarpdfsd)) } if(input$invar[i]=="Uniform"){ invarpdfVec <- runif(n,min = as.numeric(input$invarpdfmin),max = as.numeric(input$invarpdfmax)) } }) MCtab <- iris[ , input$invar] pred.model=lm(fmla,MCtab) for (n in 1:input$sampleSize){ h <- predict(pred.model,MCtab) } h<- hist(h,breaks=30,col="red",freq=F) # Define the quartiles for the Min, Max, P10, P50 and P90 } ) } shinyApp(ui, server)

git push

1 个答案:

答案 0 :(得分:0)

您最有可能遇到的问题是MCtab变量。尝试

output$histogram <- renderPlot({
  #...
  MCtab <- iris[ , unique(c(SelectedVars, vartopredict)), drop=FALSE]
  #...
})

您需要确保将data.frame作为您正在创建的公式中尝试使用的所有变量。