2016-12-14 5 views
1

Ich versuche eine Anwendung in RShiny zu entwickeln. Mein Ziel: Eine Anwendung, die logistische Regression durchführen und die Ausgabe anzeigen kann.Logistische Regression durch R Shiny

Schritte:

  1. Benutzer wird die CSV (1. TAB)
  2. Benutzer wählen Sie die unabhängige Variable (2. TAB)
  3. Benutzer Wählen Sie die anderen Variablen (2. TAB)
  4. Mainpanel laden in 2. TAB zeigt die Zusammenfassung der logistischen Regression an.

Mein Code:

library(shiny) 
ui<-navbarPage("Model Developement by Subhasish", 
       tabPanel("Data Import",sidebarLayout(sidebarPanel(fileInput("file","Upload your CSV",multiple = FALSE), 
                    tags$hr(), 
                    h5(helpText("Select the read.table parameters below")), 
                    checkboxInput(inputId = 'header', label = 'Header', value = FALSE), 
                    checkboxInput(inputId = "stringAsFactors", "stringAsFactors", FALSE), 
                    radioButtons(inputId = 'sep', label = 'Separator', choices = c(Comma=',',Semicolon=';',Tab='\t', Space=''), selected = ',') 
       ), 
       mainPanel(uiOutput("tb1")) 
       )), 
       tabPanel("Model_dev",sidebarLayout(sidebarPanel(uiOutput("model_select"),uiOutput("var1_select"),uiOutput("rest_var_select")),mainPanel(helpText("Your Selected variables"),verbatimTextOutput("other_val_show")))) 
) 
server<-function(input,output) { data <- reactive({ 
    file1 <- input$file 
    if(is.null(file1)){return()} 
    read.table(file=file1$datapath, sep=input$sep, header = input$header, stringsAsFactors = input$stringAsFactors) 

}) 
output$table <- renderTable({ 
    if(is.null(data())){return()} 
    data() 
}) 
output$tb1 <- renderUI({ 
    tableOutput("table") 
}) 
output$model_select<-renderUI({ 
    selectInput("modelselect","Select Algo",choices = c("Logistic_reg"="logreg","SVM"="svm")) 
}) 
output$var1_select<-renderUI({ 
    selectInput("ind_var_select","Select Independent Var", choices =as.list(names(data())),multiple = FALSE) 
}) 
output$rest_var_select<-renderUI({ 
    checkboxGroupInput("other_var_select","Select other Var",choices =as.list(names(data()))) 
}) 
output$other_val_show<-renderPrint({ 
    input$other_var_select 

    #f<-data() 
    #library(caret) 
    #logreg<-glm(f[,1]~.,family = binomial,data=f) 
    #summary(logreg) 

}) 

} 
shinyApp(ui=ui,server=server) 

Bis jetzt Das CSV Upoload Teil abgeschlossen ist. Problem konfrontiert als Glm() Funktion req Struktur wie: Glm (var 1 ~ var 2 + var 3+ var 4, Familie = binomial, Daten = df)

Wie kann ich die Kontrollkästchen Werte wie var 2+ var 3..? Ich benutze Shiny R von der letzten 1 Woche. Es könnte also eine einfachere Lösung geben, die ich nicht entdecken kann.

Vielen Dank im Voraus

+0

Hatte eine vorläufige Antwort, aber ich habe es geändert. Das ist wahrscheinlich das, was du willst. –

Antwort

2

Sie waren ganz in der Nähe, wenn ich was verstehen Sie es nur ein paar Zeilen tun musste, versuchten sie vervollständigen. Es ist ein schönes Beispiel für das Laden eines Datenrahmens in glänzend, Auswahl der Spalten in diesem Rahmen für eine glm, und sie führen es aus.

Sie können String-Variablen in glm mithilfe der as.forumla-Funktion verwenden. Siehe Eric Green Beispiel http://stackoverflow.com/questions/17024685/how-to-use-a-character-string-in-formula,

ich messed um mit Ihrem Programm und bekam dies funktioniert - man beachte es eine Spalte mit Werten zwischen 0 und 1 zu arbeiten braucht - ich RANDU- Datensatz verwendet (write.csv(randu,"randu.csv"):

library(shiny) 
ui<-navbarPage("Model Developement by Subhasish", 
       tabPanel("Data Import", 
         sidebarLayout(sidebarPanel(fileInput("file","Upload your CSV",multiple = FALSE), 
           tags$hr(), 
           h5(helpText("Select the read.table parameters below")), 
           checkboxInput(inputId = 'header', label = 'Header', value = FALSE), 
           checkboxInput(inputId = "stringAsFactors", "stringAsFactors", FALSE), 
              radioButtons(inputId = 'sep', label = 'Separator', 
             choices = c(Comma=',',Semicolon=';',Tab='\t', Space=''), selected = ',') 
       ), 
       mainPanel(uiOutput("tb1")) 
       )), 
       tabPanel("Model_dev", 
         sidebarLayout(sidebarPanel(
          uiOutput("model_select"), 
          uiOutput("var1_select"), 
          uiOutput("rest_var_select")), 
          mainPanel(helpText("Your Selected variables"), 
            verbatimTextOutput("other_val_show")))) 
) 
server<-function(input,output) { data <- reactive({ 
    file1 <- input$file 
    if(is.null(file1)){return()} 
    read.table(file=file1$datapath, sep=input$sep, header = input$header, stringsAsFactors = input$stringAsFactors) 

}) 
output$table <- renderTable({ 
    if(is.null(data())){return()} 
    data() 
}) 
output$tb1 <- renderUI({ 
    tableOutput("table") 
}) 
output$model_select<-renderUI({ 
    selectInput("modelselect","Select Algo",choices = c("Logistic_reg"="logreg","SVM"="svm")) 
}) 
output$var1_select<-renderUI({ 
    selectInput("ind_var_select","Select Independent Var", choices =as.list(names(data())),multiple = FALSE) 
}) 
output$rest_var_select<-renderUI({ 
    checkboxGroupInput("other_var_select","Select other Var",choices =as.list(names(data()))) 
}) 
output$other_val_show<-renderPrint({ 
    input$other_var_select 
    input$ind_var_select 
    f<-data() 

    library(caret) 
    form <- sprintf("%s~%s",input$ind_var_select,paste0(input$other_var_select,collapse="+")) 
    print(form) 

    logreg <-glm(as.formula(form),family=binomial(),data=f) 
    print(summary(logreg)) 

}) 

} 
shinyApp(ui=ui,server=server) 

hier werden die Daten von randu.csv geladen enter image description here

Und hier ist die konfigurierbare glm:

enter image description here

+0

Danke Mike, für deinen Code & Anleitung ... Ich habe nur ein paar Zeilen in die Ausgabe eingefügt $ renderprint section ........ 'if (is.null (Eingabe $ other_var_select)) {" Du musst auswählen altleast eine Variable außer unabhängig ein "} else { f <-Daten() Bibliothek (Caret) Form <- sprintf (" % s ~% s“, Eingang $ ind_var_select, paste0 (Eingang $ other_var_select, Kollaps = "+")) print (Form) LogReg <-glm (as.formula (Form), Familie = binomischen(), data = f) print (Zusammenfassung (LogReg)) } ' – Subhasish1315

+0

@MikeWise .. Ich habe eine kleine Frage hier ... Logreg hält die logistische Regressionsausgabe.also kann ich es in einer anderen Ausgabefunktion verwenden oder eine andere Eigenschaft wie Varimp für variable Wichtigkeit anzeigen, die ich brauche, um die logistische Regression wieder aufzubauen ?? – Subhasish1315

+1

Ein nützlicher Hack ist es, ihn global zu machen, indem Sie den Operator "<< -" verwenden. Dann können Sie es wiederverwenden. –

Verwandte Themen