我有一个像这样的时间序列数据列表:
> str(ffz2$time_series)
List of 89
$ 1_1 : Time-Series [1:47] from 2013 to 2017: 6.95 7.03 7.06 7.03 7.09 ...
$ 1_10 : Time-Series [1:47] from 2013 to 2017: 7.1 7.13 7.12 7.13 7.21 ...
$ 1_2 : Time-Series [1:47] from 2013 to 2017: 7.28 7.31 7.3 7.32 7.35 ...
$ 1_3 : Time-Series [1:47] from 2013 to 2017: 6.85 6.92 6.92 6.92 6.98 ...
当我将预测包中的auto.arima()函数映射到它时,它可以正常工作。
ffz2_models <- ffz2 %>%
mutate(
model = time_series %>% map(auto.arima)
)
但是,如果我执行子集操作,则map或auto.arima函数似乎停止工作。
train <- dam_models$time_series %>%
map(subset, end = 36)
> str(train)
List of 89
$ 1_1 : Time-Series [1:36] from 2013 to 2016: 6.95 7.03 7.06 7.03 7.09 ...
$ 1_10 : Time-Series [1:36] from 2013 to 2016: 7.1 7.13 7.12 7.13 7.21 ...
$ 1_2 : Time-Series [1:36] from 2013 to 2016: 7.28 7.31 7.3 7.32 7.35 ...
$ 1_3 : Time-Series [1:36] from 2013 to 2016: 6.85 6.92 6.92 6.92 6.98 ...
然后地图(auto.arima)返回此错误:
> trainingmodels <- train %>%
+ map(auto.arima)
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
0 (non-NA) cases
此外,如果我从列表中提取单个时间序列并将其作为单独的值存储,则对该值执行auto.arima - 它可以工作!
> timeseries1_2 <- train$`1_2`
> modeltimeseries1_2 <- auto.arima(timeseries1_2)
> head(modeltimeseries1_2)
$coef
ma1 drift
-0.43701717 0.01173471
$sigma2
[1] 0.0004384713
$var.coef
ma1 drift
ma1 0.02429125831 -0.000025689037
drift -0.00002568904 0.000003959022
$mask
[1] TRUE TRUE
$loglik
[1] 86.63868
$aic
[1] -167.2774
这里的解决方法是我可以将列表中的每个单独项目提取到自己的值,并在不使用map()或lapply()的情况下分别对每个项目运行auto.arima,但是我有89个。这就是我试图建模的89套训练数据,以及另外89个要提取的测试集(假设我使用这种方法)和预测。
非常感谢任何有关将auto.arima映射到时间序列子集的帮助!