Как удалить переменные и вернуть новую статистическую модель в пользовательском интерфейсе? - PullRequest
0 голосов
/ 19 февраля 2020

Я создаю приложение для анализа статистической модели. В нем пользователь размещает набор данных и возвращает регрессионную модель логистики c. Я хотел бы, чтобы незначимые переменные были исключены, чтобы я мог проанализировать новую модель. Что было бы моей ошибкой в ​​этом приложении? Любая помощь или направление будут оценены. Спасибо

     library(shiny)

        ui <- fluidPage(

          titlePanel("-"),

          sidebarLayout(

            sidebarPanel(

              fileInput(inputId="arquivo", "Selecione o arquivo",accept = ".csv"),

              selectInput(inputId = "insi", "Selecione as variaveis não significativas", choices = "" ,multiple = TRUE ),

              actionButton(inputId = "acao", label = "Refaça o modelo")

            ),

            mainPanel( 
              tabsetPanel(type = "tab",
                          tabPanel("Dados",tableOutput("dados")),
                          tabPanel("Ajuste", verbatimTextOutput("model"))
              )
            )
          )
        )

        server <- function(input, output, session) {

          k <- reactive({
            if(is.null(input$arquivo))     return(NULL)
            k <- read.csv(input$arquivo$datapath, header = TRUE, stringsAsFactors = FALSE)

            updateSelectInput(session = session, inputId = "insi", choices = names(k))
            return(k)
          })

           output$dados <- renderTable({
           k <- req(k())
           return(k)
           })

          output$model <- renderPrint({
            k <- req(k())

            v <- ncol(k)

            y <- k[, 1]
            x <- k[, -1]

            mData <- data.frame(vY = y, mX = x)
            colnames(mData) <- c("vY", paste("VX", 2:v, sep = ""))

            mod <- glm(vY ~ ., data = mData, family = binomial)

            print(summary(mod))

            if (input$acao == TRUE){ 

              v <- ncol(k)
              y <- k[, 1]
              x <- k[, -1]

              insi <- input$insi
              x <- x[ , - (insi)]

              mData <- data.frame(vY = y, mX = x)
              colnames(mData) <- c("vY", paste("VX", 2:v, sep = ""))

              mod <- glm(vY ~ ., data = mData, family = binomial)

              print(summary(mod))
            }

          })

        }

        shinyApp(ui = ui, server = server)

1 Ответ

0 голосов
/ 19 февраля 2020

Вы исключаете столбцы по имени, но ранее вы переименовали все столбцы предиктора в VX2, VX3 и т. Д. 1012 *. Вам необходимо сохранить исходные имена столбцов, чтобы вы знали, какие из них следует исключить.

Кроме того, в коде количество столбцов предикторов сохраняется как v; это должно произойти после того, как выбранные пользователем столбцы были удалены. В противном случае счет будет неправильным.

Это должно сработать:

output$model <- renderPrint({
  k <- req(k())

  v <- ncol(k)

  y <- k[, 1]
  x <- k[, -1]

  mData <- data.frame(vY = y, mX = x)
  real.cols = colnames(x)
  colnames(mData) <- c("vY", paste("VX", 2:v, sep = ""))

  mod <- glm(vY ~ ., data = mData, family = binomial)

  print(summary(mod))

  if (input$acao == TRUE){

    y <- k[, 1]
    x <- k[, -1]

    insi <- input$insi
    x <- data.frame(x[ , -which(real.cols %in% insi)])

    v <- ncol(x)

    mData <- data.frame(vY = y, mX = x)
    colnames(mData) <- c("vY", paste("VX", 2:(v+1), sep = ""))

    mod <- glm(vY ~ ., data = mData, family = binomial)

    print(summary(mod))
  }

})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...