Блестящее приложение для моделирования TBATS из 3 различных типов данных - PullRequest
0 голосов
/ 29 апреля 2020

Я ищу способ интегрировать прогноз TBATS в приложение Shiny с графиком сезонной декомпозиции и простым графиком дневного объема. Данные поступают ежедневно с 3 различными типами XL, L и S. Моя цель - предоставить пользователям возможность выбрать 1 из 3 типов данных, ввести период прогноза и получить прогноз с учетом указанного c типа.

Пример данных:

 | CREATION_DATE | VOLUME  |  TYPE |
 |    2018-12-15 | 345768  |  XL   |
 |    2018-12-16 | 742892  |  XL   |
 |    2018-12-16 | 23467   |  L    |
 |    2018-12-15 | 34578   |  L    |
 |    2018-12-17 | 1346    |  S    |
 |    2018-12-15 | 2177    |  S    |

Чтобы подготовить данные для временных рядов, мне нужно работать с 3 отдельными кадрами данных,

mstsXL <- msts(XL_data$VOLUME, seasonal.periods = c(7, 365.25), start = decimal_date(as.Date("2018-12-15")))
mstsL <- msts(L_data$VOLUME, seasonal.periods = c(7, 365.25), start = decimal_date(as.Date("2018-12-15")))
mstsS <- msts(S_data$VOLUME, seasonal.periods = c(7, 365.25), start = decimal_date(as.Date("2018-12-15")))

и каким-то образом отобразить кадры данных в реактивный набор данных. функция на сервере:

        datasetInput <- reactive({
            combined_data %>% filter(TYPE == input$dataset)

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

Код пользовательского интерфейса с нефункциональной частью numericInput и submitButton:

library(shiny)

ui <- fluidPage(
    titlePanel(h2("Forecast Application",align = "center")),
    sidebarLayout(    
        sidebarPanel(

            selectInput(inputId = "dataset",
                        label = "Choose Location Class Type:",
                        choices = c("XL", "L", "S"),
                        selected = "L"),
            numericInput("ahead", "Days to Forecast Ahead:", 30),
            submitButton("Refresh View")),

        mainPanel(
            plotOutput("ts_plotL_MSTS"),
            plotOutput("ts_plotL_TBATS"),
            plotOutput("ts_plotL_SP")))

Код сервера, который работает с определенными переменными данных. Combined_data можно заменить на отдельные кадры данных (XL, L, S).

server <- shinyServer(

    function(input,output){

        datasetInput <- reactive({
            combined_data %>% filter(TYPE == input$dataset) 

        })


        # plot time series
        output$ts_plotL_MSTS <- renderPlot({

            dataset <- datasetInput()
            plot(mstsXL, main="Daily Amount", xlab="Year", ylab="Amount")

        })

        # plot TBATS model
        output$ts_plotL_TBATS <- renderPlot({

            dataset <- datasetInput()
            tbats <- tbats(mstsXL)
            plot(tbats, main = "Multiple Season Decomposition")

        })

        # plot Prediction
        output$ts_plotL_SP <- renderPlot({

            dataset <- datasetInput()
            sp <- predict(tbats, h=30)
            plot(sp, main = "TBATS Forecast", include = 30)

        })

    })

shinyApp(ui, server)

Не уверен, как настроить переменную msts (mstsXL / mstsL / mstsS), чтобы она автоматически определяла правильный на основе пользователь выбрал TYPE.

...