Вы обнаружите, что для этого гораздо проще использовать пакет fable, чем пакет прогнозов, не в последнюю очередь потому, что он намного лучше обрабатывает ежедневные данные. Вот код, который, как я думаю, делает то, что вы хотите.
library(tidyverse)
library(lubridate)
library(tsibble)
library(fable)
# Generate artificial data and create a tsibble object
set.seed(1500)
DF <- tibble(
Date = seq(as.Date("2010-01-01"),
to = as.Date("2020-07-09"),
by = "day"),
Flow = runif(length(Date), 25, 75)
) %>%
mutate(
Year = year(Date),
Month = month(Date),
) %>%
as_tsibble(index=Date)
DF
#> # A tsibble: 3,843 x 4 [1D]
#> Date Flow Year Month
#> <date> <dbl> <dbl> <dbl>
#> 1 2010-01-01 56.2 2010 1
#> 2 2010-01-02 73.6 2010 1
#> 3 2010-01-03 58.0 2010 1
#> 4 2010-01-04 42.1 2010 1
#> 5 2010-01-05 40.5 2010 1
#> 6 2010-01-06 37.9 2010 1
#> 7 2010-01-07 44.8 2010 1
#> 8 2010-01-08 73.1 2010 1
#> 9 2010-01-09 72.5 2010 1
#> 10 2010-01-10 65.7 2010 1
#> # … with 3,833 more rows
# Fit model to July/August from 2011, 2012, 2015, 2017
modelFit <- DF %>% filter(
Year %in% c(2011, 2012, 2015, 2017),
between(Month, 7, 8)
) %>%
# Add NAs to fill in the missing observations
fill_gaps() %>%
# Estimate non-seasonal ARIMA model
model(
ARIMA(Flow ~ PDQ(0,0,0))
)
modelFit
#> # A mable: 1 x 1
#> `ARIMA(Flow ~ PDQ(0, 0, 0))`
#> <model>
#> 1 <ARIMA(1,0,0) w/ mean>
modelFit %>%
# Apply to all data up to 9 July 2020 without re-estimating parameters
refit(new_data = DF) %>%
# Forecast to end of August 2020
forecast(
new_data=tsibble(Date = seq(as.Date("2020-07-10"),
to = as.Date("2020-08-31"),
by = "day"),
index=Date)
)
#> # A fable: 53 x 4 [1D]
#> # Key: .model [1]
#> .model Date Flow .mean
#> <chr> <date> <dist> <dbl>
#> 1 ARIMA(Flow ~ PDQ(0, 0, 0)) 2020-07-10 N(49, 208) 49.4
#> 2 ARIMA(Flow ~ PDQ(0, 0, 0)) 2020-07-11 N(50, 208) 49.6
#> 3 ARIMA(Flow ~ PDQ(0, 0, 0)) 2020-07-12 N(50, 208) 49.6
#> 4 ARIMA(Flow ~ PDQ(0, 0, 0)) 2020-07-13 N(50, 208) 49.6
#> 5 ARIMA(Flow ~ PDQ(0, 0, 0)) 2020-07-14 N(50, 208) 49.6
#> 6 ARIMA(Flow ~ PDQ(0, 0, 0)) 2020-07-15 N(50, 208) 49.6
#> 7 ARIMA(Flow ~ PDQ(0, 0, 0)) 2020-07-16 N(50, 208) 49.6
#> 8 ARIMA(Flow ~ PDQ(0, 0, 0)) 2020-07-17 N(50, 208) 49.6
#> 9 ARIMA(Flow ~ PDQ(0, 0, 0)) 2020-07-18 N(50, 208) 49.6
#> 10 ARIMA(Flow ~ PDQ(0, 0, 0)) 2020-07-19 N(50, 208) 49.6
#> # … with 43 more rows
Создан 10.07.2020 с помощью пакета REPEX (v0.3.0)