Я ищу способ интегрировать прогноз 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.