我在大量时间序列上使用一个大(isplit)循环来测试 ARIMA 模型。为此,我正在使用包中的auto.arima
功能forecast
。
为此,我创建了一个函数,用于遍历所有时间序列,同时跟踪进度并存储拟合模型和统计数据(例如准确性和模型参数)。现在我正在处理auto.arima
函数生成的错误。更准确地说;由 OCSB 季节性测试引起。
我将此函数用于“每月”时间序列以及“每周”时间序列。对于每月时间序列 a 没有问题(几乎 50000,包括很多“零”值)。对于每周时间序列,我遇到了问题。但我无法找到错误的真正原因。
我试图重新创建错误。我认为它与许多 0(或相同)值与 52 频率周期相结合有关。但我仍然不能把矛头指向问题所在。
请参阅下面的示例。一些信息:时间序列集是每周值(频率 = 52),从 2010 年第 1 周开始。长度为 122 个样本(直到 2012 年第 18 周)。因此我测试了 122 的长度,我可以为此生成错误。我仍然认为这与频率和“运行相同的值”有关......
对于某些错误会产生,对于某些不会。
例1【随机数,长度=122】>没问题:
ts_element <- ts(sample(0:30, 122, replace=TRUE), frequency = 52, start = c(2010, 1))
fit <- auto.arima(ts_element, trace=FALSE, seasonal.test="ocsb", allowdrift=TRUE, stepwise=TRUE)
示例 2 [只有 0 个值,长度 = 122] > OCSB 测试错误(通常我会假设一个不同的错误...参见示例 3):
ts_element <- ts(sample(0:0, 122, replace=TRUE), frequency = 52, start = c(2010, 1))
fit <- auto.arima(ts_element, trace=FALSE, seasonal.test="ocsb", allowdrift=TRUE, stepwise=TRUE)
Error in OCSBtest(x, m) : subscript out of bounds
示例 3 [只有 0 个值,长度 = 100] > '零/相等值' 错误,我假设这个,这个例子不是问题,但要指出长度是相关的(与示例 2 比较):
ts_element <- ts(sample(0:0, 100, replace=TRUE), frequency = 52, start = c(2010, 1))
fit <- auto.arima(ts_element, trace=FALSE, seasonal.test="ocsb", allowdrift=TRUE, stepwise=TRUE)
Error in if (PVAL == min(tablep)) warning("p-value smaller than printed p-value") else warning("p-value greater than printed p-value") :
missing value where TRUE/FALSE needed
示例 4 [与 ex.3 几乎相同,但有一个非 0 值,长度 = 100] > 没有问题了:
ts_element[30] <- 1
fit <- auto.arima(ts_element, trace=FALSE, seasonal.test="ocsb", allowdrift=TRUE, stepwise=TRUE)
示例 5 [与 ex.4 几乎相同,但长度=122] > OCSB 测试错误:
ts_element <- ts(sample(0:0, 122, replace=TRUE), frequency = 52, start = c(2010, 1))
ts_element[30] <- 1
fit <- auto.arima(ts_element, trace=FALSE, seasonal.test="ocsb", allowdrift=TRUE, stepwise=TRUE)
Error in OCSBtest(x, m) : subscript out of bounds
示例 6 [随机 1 和 0,长度=122] > 没问题:
ts_element <- ts(sample(0:1, 122, replace=TRUE), frequency = 52, start = c(2010, 1))
fit <- auto.arima(ts_element, trace=FALSE, seasonal.test="ocsb", allowdrift=TRUE, stepwise=TRUE)
例 7【随机数,长度小于 50】> 没问题:
ts_element <- ts(sample(1:34, 50, replace=TRUE), frequency = 52, start = c(2010, 1))
fit <- auto.arima(ts_element, trace=FALSE, seasonal.test="ocsb", allowdrift=TRUE, stepwise=TRUE)
有谁知道 OCSB 越界错误的原因是什么?如何识别?
主要问题是,每当我在本文开头描述的函数中出现此错误时,该函数不会输出我收集的所有信息。因此,等待的时间是徒劳的。因此,如果无法找到根本原因,我还可以通过一些代码来处理错误以“忽略”它们(跳过该时间序列)并走得更远。或者忽略,但仍然输出当时收集到的信息。
有怎样的解决方法?
注意:零错误不是问题。我在我的功能中介绍了这一点。