ARIMA モデルでテストするために、時系列の巨大なセットで大きな (isplit) ループを使用しています。このために、パッケージのauto.arima
関数を使用しています。forecast
このために、進行状況を追跡しながらすべての時系列をトラバースし、適合したモデルと統計 (精度やモデル パラメーターなど) を保存する関数を作成しました。現在、関数によって生成されたエラーを処理していauto.arima
ます。より正確には; OCSB の季節的なテストによって引き起こされます。
この関数は、「月単位」の時系列と「週単位」の時系列に使用しています。毎月の時系列の場合、問題はありません (「ゼロ」値の多くを含めて、ほぼ 50000)。毎週の時系列で問題に遭遇しました。しかし、エラーの本当の原因を見つけることができません。
エラーを再現しようとしました。私はそれが52の周波数期間と組み合わせて多くの0(または同じ)値と関係があると思っていました. しかし、私はまだ問題を指摘することはできません。
以下の例を参照してください。いくつかの情報: 時系列のセットは、2010 年の第 1 週から始まる週ごとの値 (freq=52) です。長さは 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] > 'ゼロ/等しい値' エラー。
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 以外の値が 1 つあり、長さ = 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の範囲外エラーの原因が何であるかを知っている人はいますか? 認識する方法は?
主な問題は、この投稿の冒頭で説明した関数でこのエラーが発生するたびに、関数が収集しているすべての情報を出力しないことです。そのため、何時間も待つ必要はありません。したがって、根本的な原因が見つからない場合は、エラーを「無視」して (その時系列をスキップして) さらに先に進む方法でエラーを処理するためのコードも非常に役立ちます。または無視しますが、その時点で収集された情報を出力します。
解決方法は?
注: ゼロエラーは問題ではありません。私は自分の機能でこれをカバーしています。