Выход регрессии в сиянии - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь создать блестящее приложение, которое позволяет пользователю выбрать зависимую и независимую переменную, а затем отображает таблицу с результатами. Это то, что у меня есть:


rule <- c("bb_rule", "pp_rule", "cb_rule")
dependent <- c("inning_fr", "innings_se", "inning_rain")

ui <- navbarPage(theme = shinytheme("simplex"), "App", 


                 tabPanel("Regression Results",
                          fluidPage(
                            h3("Have Rule Changes Transformed ODI Cricket?"),
                            tableOutput("regression"),
                            sidebarPanel(
                              selectInput("depInput", "Dependent Variable",
                                        choices=dependent),
                              selectInput("ruleInput", "Rule",
                                          choices=rule)
                              )
                          )) 
    )

server <- function(input, output) {

  load("./data/data.RData")

output$regression <-
    renderTable({
      data %>% 
        lm(input$depInput ~ input$ruleInput, data = .) %>%
        tidy(conf.int=TRUE) %>% 
        select(Variable = term,
               Estimate = estimate,
               `Lower Bound` = conf.low,
               `Upper Bound` = conf.high) %>%
        gt() %>% 
        tab_header(title = "Effect of Hours on Reported Approval Rating",
                   subtitle = "Data from TWT Archive")})

    })

}


shinyApp(ui = ui, server = server)

К сожалению, это не работает, и я получаю ошибку, которая Error: contrasts can be applied only to factors with 2 or more levels

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

1 Ответ

0 голосов
/ 04 мая 2020

@ phil комментарии о том, как заставить это работать, верны. Но я чувствую, что нужно больше контекста.

Обычно мы запускаем lm с именами переменных без кавычек:

lm(formula= Sepal.Width ~ Sepal.Length, data = iris)

Но input$rule и input$dep оцениваются как character. Таким образом, по сути, код просит shiny выполнить:

lm(formula= "Sepal.Width" ~ "Sepal.Length", data = iris)

, что приведет к ошибке. Чтобы использовать блестящие входные данные в lm, мы должны преобразовать в символ (sym), а затем форсировать раннюю оценку (!!), как показало @phil.

...