将auto.arima()映射到子集时间序列列表

时间:2018-05-21 04:57:37

标签: r forecasting purrr broom

我有一个像这样的时间序列数据列表:

> 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映射到时间序列子集的帮助!

0 个答案:

没有答案