2016-12-14 9 views
1

Я пытаюсь разработать приложение в RShiny. My Objective: Приложение, которое может выполнять логистическую регрессию и отображать вывод.Логистическая регрессия через R Shiny

Шаги:

  1. Пользователь будет загрузить CSV (первый TAB)
  2. пользователя выбрать независимую переменную (второй TAB)
  3. пользователя Выберите другие переменные (2-й TAB)
  4. Mainpanel в 2nd TAB отобразит сводку логистики регрессии.

Мой код:

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) 

До сих пор CSV Upoload часть завершена. Проблема, с которой столкнулась структура функции glm(), как: glm (var 1 ~ var 2 + var 3+ var 4, family = binomial, data = df)

Как использовать значения флажка, такие как var 2+ var 3 ..? Я использую Shiny R с последних 1 недели. поэтому может быть любое более легкое решение, которое я не могу обнаружить.

Заранее спасибо

+0

Был предварительный ответ, но я изменил его. Это, вероятно, то, что вы хотите. –

ответ

2

Вы были очень близки, как только я понял, что вы пытались сделать это нужно только пару строк, чтобы завершить его. Это хороший пример загрузки фрейма данных в блестящий, выбор столбцов в этом фрейме для glm и их выполнение.

Вы можете использовать строковые переменные в glm с помощью функции as.forumla. Смотрите пример Эрика Грина http://stackoverflow.com/questions/17024685/how-to-use-a-character-string-in-formula,

я возился с вашей программой и получил эту работу - обратите внимание, что требуется столбец со значениями от 0 до 1 для работы - я использовал Randu набор данных (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) 

здесь данные загружаются из randu.csv enter image description here

А вот конфигурируемый glm:

enter image description here

+0

Спасибо, Майк, за ваш код и руководство ... Я просто добавил несколько строк в разделе вывода $ renderprint ........ 'if (is.null (input $ other_var_select)) {« Вы должны выбрать altleast одной переменной, кроме одного независимого "} еще { е <-data() библиотека (каретки) форма <- Sprintf (" % s ~% s», вход $ ind_var_select, paste0 (вход $ other_var_select, коллапс = "+")) печати (форма) logreg <-glm (as.formula (форма), семейство биномиальное =(), данные = е) печати (резюме (logreg)) } ' – Subhasish1315

+0

@MikeWise .. У меня здесь небольшой вопрос ... logreg имеет выход логистической регрессии.поэтому я могу использовать его в другой выходной функции или для отображения другого свойства, такого как varimp для переменной важности. Мне нужно снова восстановить логистическую регрессию? – Subhasish1315

+1

Полезный взлом - сделать его глобальным с помощью оператора «<< -». Затем вы можете его повторно использовать. –

Смежные вопросы