2017-08-31 4 views
2

J'essaie de définir une formule pour la régression logistique multinomiale, il faut prendre l'entrée de la liste déroulante jusqu'à 6 variables indépendantes. (SelectInput, Multiple = TRUE) dans R Shiny. Pas en mesure de comprendre comment résoudre ce ..Comment définir une formule dynamiquement à partir de l'entrée select (multiple = TRUE) dans R brillant

Voici un exemple de code ... Formule

Multiformula <- reactive ({ as.formula(paste(input$outcome,'~'input$predictor) })

Modèle

MultiModel <- reactive({ 
    multinom(Multiformula(), data = filtered()) 
    }) 

ci-dessus fonctionne le code pour une variable unique, mais pour plus d'une variable indépendante, l'approche peut être différente. J'ai essayé le bas, mais pas de chance

indvar6 <- reactive({ 
    filter(forest_data_model[,input$predictor]) 
    }) 

redéfinie la formule ... mais cela n'a pas

Multiformula <- reactive ({as.formula(paste(input$outcome,'~'indvar6())}) 

sera très appréciée Toute orientation ... grâce

+0

Essayez 'as.formula (pâte (input $ result, '~', paste (entrée $ p redictor, collapse = "+"))) ' – akrun

+0

Merci beaucoup pour la solution rapide ... fonctionne bien – nab

Répondre

1

Nous pourrions essayer

library(shiny) 
library(nnet) 
library(foreign) 
fmnom <- function(data = NULL, depVar, indepVar) { 

    ui <- fluidPage(
    headerPanel("Multinomial analysis"), 
    sidebarPanel(
     p("Select inputs for the Dependent Variable"), 
     selectInput(inputId = "dep", label = "Dependent Variables", multiple = FALSE, 
         choices = as.list(depVar)), 
     p("Select input for the Independent Variable"), 
     selectInput(inputId = "indep", label = "Independent Variables", 
        multiple = TRUE, choices = as.list(indepVar), selected = indepVar[1]) 
    ), 
    mainPanel(
     verbatimTextOutput(outputId = "RegOut"), 
     verbatimTextOutput(outputId = "IndPrint"), 
     verbatimTextOutput(outputId = "DepPrint") 

    ) 
) 

    server <- function(input, output) { 

    mlt <- reactive(
        {multinom(reformulate(input$indep, input$dep), data = data)}) 

    output$DepPrint <- renderPrint({input$dep}) 
    output$IndPrint <- renderPrint({input$indep}) 
    output$RegOut <- renderPrint({summary(mlt())}) 

    } 



    shinyApp(ui= ui, server = server) 
} 

-data

ml <- read.dta("https://stats.idre.ucla.edu/stat/data/hsbdemo.dta") 

-run brillant

fmnom(ml, depVar = c("prog", "schtyp"), indepVar = c("ses", "read", "write")) 

-output seule variable indépendante

enter image description here

plusieurs variables indépendantes

-sorties

enter image description here

+0

Pouvons-nous tracer le graphique des effets pour les variables sélectionnées? J'utilise le code ci-dessous pour un prédicteur output $ plot <- renderPlot ({ plot <-effect (entrée $ predictor, model()) plot (plot, style = "empilé", tapis = FALSE, ci.style = " bandes ", show.strip.values ​​= TRUE, show.fitted = VRAI, multiligne = VRAI) }) – nab

+0

@nab Pourriez-vous s'il vous plaît envoyer une nouvelle question car elle n'est pas claire pour moi – akrun

+1

Bien sûr, je poste un nouveau question – nab