【发布时间】:2012-06-09 13:22:15
【问题描述】:
我在大量时间序列上使用一个大(isplit)循环来测试 ARIMA 模型。为此,我使用了 forecast 包中的 auto.arima 函数。
为此,我创建了一个函数,用于遍历所有时间序列,同时跟踪进度并存储拟合模型和统计数据(例如准确性和模型参数)。现在我正在处理由auto.arima 函数生成的错误。更准确地说;由 OCSB 季节性测试引起的。
我将此函数用于“每月”时间序列以及“每周”时间序列。对于每月时间序列 a 没有问题(几乎 50000,包括很多“零”值)。对于每周时间序列,我遇到了问题。但我无法找到错误的真正原因。
我试图重现错误。我认为它与许多 0(或相同)值与 52 频率周期相结合有关。但我还是不能把矛头指向问题所在。
请参阅下面的示例。一些信息:时间序列集是每周值(freq=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 [与示例 3 几乎相同,但有一个非 0 值,长度 = 100] > 没有问题了:
ts_element[30] <- 1
fit <- auto.arima(ts_element, trace=FALSE, seasonal.test="ocsb", allowdrift=TRUE, stepwise=TRUE)
示例 5 [与示例 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 越界错误的原因是什么吗? 如何识别?
主要问题是,每当我在本文开头描述的函数中出现此错误时,该函数不会输出我收集的所有信息。因此,等待的时间是徒劳的。 因此,如果无法找到根本原因,我还可以通过一些代码来处理错误以“忽略”它们(跳过该时间序列)并走得更远。或者忽略,但仍然输出当时收集到的信息。
如何解决?
注意:零错误不是问题。我将在我的函数中介绍这一点。
【问题讨论】:
标签: r