ARIMA モデルによる予測
R で TSA パッケージを使用する
有馬
ARIMA -> 自己回帰統合移動平均
線形回帰、指数平滑法、ホルトウィンター法などよりも ARIMA モデルを使用する利点は、ARIMA モデルが一連の差分ステップを使用して非定常系列を定常系列に還元できることです。
観察された記録に基づいてランダムなプロセスの統計的推論または予測を行うには、定常性の仮定が満たされることが非常に重要です。
ステーショナリーシリーズとは何ですか?
定常性の基本的な考え方は、プロセスの挙動の確率は時間の経過とともに変化せず、プロセスは統計的に平衡状態にあると期待されるというものです。
プロセス {Yt} は、Yt1,Yt2,... Ytn の結合分布が、時点 t1 のすべての選択について Yt1_k Yt2_k,..., Ytn_k の結合分布と同じである場合、厳密に定常であると言われます。 t2、…、tn、およびタイムラグ k のすべての選択肢。
いくつかの定義
- {Yt} は、時間の経過に伴う観測の時系列プロセスです。 t =1 、 t =2 、 t…
- Yt1、Yt2、…の結合分布は、t(1-k)、t(2-k)、…の期間に関連する時系列プロセスの時間シフトを指します。
- タイムラグ k は時間のギャップを指し、タイムラグとして知られています。
- stationary — 一定の平均値を持たない時系列は非定常です
違いますか?
元の時系列の値は、特定の期間数だけシフトされた時系列の値から減算されます。この変換により、データの傾向と季節性が除去され、ランダムな定常成分のみが残ります。
例を見てみましょう:
library(tidyverse)
library(broom)
library(forecast)
library(scales)
data <- read.delim("C:/Data/oilspills.txt")
data %>% head()
data.ts <- ts(data$TotalSpills,freq=12,start=c(1970,1))
plot(data.ts, type='o',cex=0.5, main = "Time series plot", col = "steelblue")
自己相関プロットと部分自己相関プロットを確認できます
par(mfrow = c(1,2))
acf(data.ts,main = "Autocorrealtion plot")
pacf(data.ts,main = "")
title(main = "Partial autocorrelation plot")
ACF プロットの縦棒は青い破線の上にあるため、顕著な自己相関を示しています。
diff() 関数で差分を適用します
diff=diff(data.ts)
plot(diff, ylab='Difference of internet users', type='b',cex=0.5, col = "darkcyan")
title(main = "Differenced time-series")
ARIMA モデルの次数を見つける必要がありますか?
モデル選択の目的は、時系列データに最も適合する ARIMA モデルを見つけることです。
p,d,q -> ARIMA (p,d,q) -> ARIMA (AR,d,MA)
ARIMA モデルの pdq 値を選択するには、いくつかの異なる方法があります。
- ACF および PACF プロットの検査: ACF および PACF プロットを使用して、モデル内の自己回帰 (AR) コンポーネントと移動平均 (MA) コンポーネントの次数を識別できます。ACF または PACF プロットが「切れる」ラグは、それぞれの成分の順序を示唆している可能性があります。
- 自動モデル選択:
auto.arima()。この関数は、AIC 値に基づいて最適なモデルを推定するアプローチを使用します。 - 診断ツール: EACF プロット
- バックシフト演算子 (1 — phi * B) * (1 — B)² = (1 + theta * B)
これらの値を取得できる方法はいくつかありますが、モデルの選択は 1 回限りのプロセスではないことに注意することが重要です。選択したモデルの適切性は、診断テストと視覚化を使用して評価する必要があります。
ARIMA モデルの次数を決定するために使用されるグラフィカル ツールであるeacf (拡張自動相関関数) プロットを使用できます。
eacf(diff)
このモデルは AR = 1、MA = 0 のモデルである可能性があると思われます。
EACF プロットは、ARIMA モデルの適切な次数を決定するための 1 つのツールにすぎません。モデルの次数を見つけるには、統計的テストだけでなく目視検査も使用する必要があります。
最初のモデルを作成しましょう。
arima1 <- arima(data.ts, order=c(1,0,0))
arima1
- 残差プロット
- シャピロ・ウィルクス
- 通常の QQ プロット
残差プロット
plot(arima1$res,xlab='Time',ylab='Residuals',main='')
abline(h=0,col='red')
shapiro.test(arima1$res)
この場合、ARIMA モデルの残差は正規分布しません。
通常の QQ プロット
qqnorm(arima1$res)
qqline(arima1$res)
別のモデルを試してみます:
auto.arimaを実行できます。これは役立つかもしれません。
auto.arima(data.ts)
arima2 <-arima(x = diff, order = c(1, 1, 0))
shapiro.test(arima2$res)
qqnorm(arima2$res)
qqline(arima2$res)
残差
plot(arima2$res,xlab='Time',ylab='Residuals',main='Arima2 model')
abline(h=0,col='red')
arima2 モデルを使って予測してみましょう。
pred <- predict(arima2,n.ahead=5)
pred
結論
arima モデリングの大部分は、データに必要な正しい変換を見つけることに関係しています。この例では、ACF プロットが要件の明確な兆候を示していたため、データを差分する必要がありました。データの対数変換が必要な場合がありますが、覚えておくべき重要な概念は、統計テストを行う必要があるということです。プロットを見て、何が最も適切に見えるかを判断する必要があります。
EACF プロットは決して読みやすいプロットではありませんが、auto.arima ははるかに単純に見えます。残差プロットを見ることも非常に重要であり、有馬モデリングの場合、同様の確率法則が時間の経過とともにプロセスを支配する定常時系列を持つことが重要な原則です。差分、ログ、またはその両方によって定常性を作成したら、適切なモデルを当てはめて予測を作成できます。
記事をお楽しみいただき、お役に立てば幸いです。
R、Julia、Python、応用統計に関する記事をもっと見るには、私をフォローしてください。

![とにかく、リンクリストとは何ですか?[パート1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































