自己回帰和分移動平均モデル

統計学や計量経済学、特に時系列分析において、**自己回帰和分移動平均**（じこかいきわぶんいどうへいきん、、略称: ARIMA）モデルは、自己回帰移動平均（ARMA）モデルの一般化である。これらのモデルは、データの理解を深めるため、または将来のポイントを予測するために、時系列データに適用される。

ARIMAモデルは、データが（分散/自己共分散ではなく）平均に関して非定常性を示す場合に適用され、初期の差分ステップ（モデルの「Integrated 和分」部分に対応）を 1回以上適用して平均関数（すなわち、トレンド）の非定常性を排除することができる。時系列に季節性が見られる場合は、季節成分を除去するために季節的差分を適用することができる。ウォルドの分解定理によれば、ARMAモデルは**規則的な**（つまり純粋に非決定論的な）広義の定常時系列を記述するのに理論的には十分であるので、ARMAモデルを使用する前に、例えば差分を使用して非定常時系列を定常化することが主な動機となる。時系列に**予測可能**なサブプロセス（純粋な正弦波や複素数指数プロセス）が含まれている場合、予測可能な成分はARIMAのフレームワークでは平均非ゼロで周期的な（つまり季節的な）成分として扱われるので、季節的な差分処理によって除去されることに注意が必要である。

ARIMAのAR（autoregressive、自己回帰）の部分は、関心のある展開する変数がそれ自体の遅延した値（すなわち、以前の値）に回帰されることを示している。MA（moving average、移動平均）の部分は、回帰誤差が実際には、同時期および過去の様々な時点で発生した誤差項の線型結合であることを示している。I （integrated 和分）の部分は、データの値が過去の値との差分に置き換えられていることを示している（この差分処理は複数回行われる場合もある）。これらの特徴の目的は、モデルがデータにできるだけ適合するようにすることである。

非季節ARIMAモデルは、一般に\mathrm{ARIMA}(p, d, q) と表記される。パラメータ*p*、*d*、*q*は非負の整数で、pは自己回帰モデルの次数（タイムラグの数）、*d*は差分の階数（データの過去の値を差し引いた回数）、*q*は移動平均モデルの次数を表す。

季節ARIMAモデルは、通常\mathrm{ARIMA}(p, d, q)(P, D, Q)_m と表記される。ここで、*m*は各季節の期間の数を意味し、大文字の*P*、*D*、*Q*はARIMAモデルの季節部分の自己回帰項、差分項、移動平均項を意味する 。

3つの項のうち2つがゼロの場合、モデルを表す頭字語のうちゼロではないパラメータを用いてモデルを記載することができる。例えば、\mathrm{ARIMA}(1, 0, 0) は \mathrm{AR}(1)、\mathrm{ARIMA}(0, 1, 0) は \mathrm{I}(1)、\mathrm{ARIMA}(0, 0, 1) は \mathrm{MA}(1) と記載される。

ARIMAモデルは、ボックス・ジェンキンス法に従って推定することができる。

## 定義
時系列データ*X<small>t</small>*（*t*は整数インデックス、*X<sub>t</sub>*は実数）が与えられたとき、\text{ARMA}(p',q) モデルは下記のようになる。

: X_t-\alpha_1X_{t-1}- \dots -\alpha_{p'}X_{t-p'} = \varepsilon_t + \theta_1 \varepsilon_{t-1} + \cdots +\theta_q \varepsilon_{t-q},

または同等に

: 
\left(
 1 - \sum_{i=1}^{p'} \alpha_i L^i
\right) X_t
=
\left(
 1 + \sum_{i=1}^q \theta_i L^i
\right) \varepsilon_t \,


ここで、Lはラグ演算子、\alpha_iはモデルの自己回帰部分のパラメーター、\theta_iは移動平均部分のパラメータ、\varepsilon_tは誤差項である。誤差項\varepsilon_tは、一般に、平均ゼロの正規分布からサンプリングされた独立同分布の変数であるとみなされる。

ここで、多項式 \textstyle \left( 1 - \sum_{i=1}^{p'} \alpha_i L^i \right) が多重度*d*の単位根（因子*1 - L*）を持つ場合、次のように書き換えることができる。

: 
\left(
 1 - \sum_{i=1}^{p'} \alpha_i L^i
\right)
=
\left(
 1 - \sum_{i=1}^{p'-d} \varphi_i L^i
\right)
\left(
 1 - L
\right)^d.


\mathrm{ARIMA}(p, d, q) プロセスでは、*p* = *p'-d*で用いて、次のように表す。

: 
\left( 1 - \sum_{i=1}^p \varphi_i L^i \right)
(1-L)^d X_t
= \left( 1 + \sum_{i=1}^q \theta_i L^i \right) \varepsilon_t \,


したがって、*d*個の単位根を持つ自己回帰多項式を持つ\mathrm{ARMA}(p + d, q) プロセスの特殊なケースと考えることができる。 このため、*d > 0* のARIMAモデルで正確に記述されるプロセスは広義の定常ではない。

上記は次のように一般化できる。

: 
\left( 1 - \sum_{i=1}^p \varphi_i L^i\right)
(1-L)^d X_t = \delta + \left( 1 + \sum_{i=1}^q \theta_i L^i \right) \varepsilon_t . \,


これは、**ドリフト <math> \frac{\delta}{1 - \sum \varphi_i} </math>** を伴う *<math>\mathrm{ARIMA}(p, d, q)</math>* プロセスを定義する。

## 差分
定常時系列の性質は、観測された時刻に依存しない。具体的には、広義の定常時系列では、平均と分散/自己共分散は時間の経過とともに一定になる。統計における**差分**とは、非定常時系列を**平均的な意味で**定常化するために（つまり、非定常トレンドを除去するために）適用される変換であり、分散/自己共分散の非定常性とは関係がない。同様に、季節性時系列に**季節差分**を適用して季節成分を除去する。信号処理、特にフーリエ・スペクトル解析理論の観点からは、トレンドは非定常時系列のスペクトルにおける低周波数部分であり、季節はそのスペクトルにおける周期的な周波数部分である。したがって、差分はハイパス（つまり、ローストップ）フィルタとして、季節差分はコムフィルタとして機能し、それぞれ低周波のトレンドと周期的な周波数の季節を（時間領域で直接ではなく）スペクトル領域で抑制することができる。この観点から、差分と季節差分の哲学、数学、力、欠点を説明することができる。

データの差分を取るために、連続した観測値の差を計算する。数学的には次のようになる。

: 
y_t'= y_t - y_{t-1} \,


差分は時系列のレベルの変化を取り除き、トレンドと季節性を排除し、結果的に時系列の平均値を安定させる。

定常時系列を得るために、2回に渡ってデータの差分を取る必要がある場合もあり、これは **2次差分**と呼ばれる。

: 
\begin{align}
y_t^* & = y_t' - y_{t-1}' \\
& =(y_t - y_{t-1})-(y_{t-1} - y_{t-2}) \\
& =y_ t - 2y_{t-1} + y_{t-2}
\end{align}


データの差分を取るもう一つの方法として、季節差分がある。これは、観測値と前の季節（例えば1年）の対応する観測値との差を計算するものである。これは次のように示される。

: 
y_t'= y_t - y_{t-m} \quad \text{where } m=\text{duration of season}.


そして、この差分を取ったデータを用いて、ARMAモデルを推定する。

## 例
いくつかのよく知られていた特殊なケースは、自然に生じたり、他の一般的な予測モデルと数学的に同等であったりする。例えば：

* \mathrm{ARIMA}(0, 1, 0) モデル（または \mathrm{I}(1) モデル）は次の式で与えられ、ランダムウォークを示す。
**  X_t = X_{t-1} + \varepsilon_t 
* 定数項を伴う \mathrm{ARIMA}(0, 1, 0) モデルは次の式で与えられ、ドリフトを伴うランダムウォークを示す。
** X_t = c + X_{t-1} + \varepsilon_t 
* \mathrm{ARIMA}(0, 0, 0) モデルはホワイトノイズモデルである。
* \mathrm{ARIMA}(0, 1, 2) モデルは、減衰を伴う Holt のモデルである。
* 定数項のない \mathrm{ARIMA}(0, 1, 1) モデルは、基本的な指数平滑化モデルである。 
* \mathrm{ARIMA}(0, 2, 2) モデルは次の式で与えられ、加法誤差または二重指数平滑化を使用したHoltの線型法と同等である。
** X_t = 2X_{t-1} - X_{t-2} +(\alpha + \beta - 2) \varepsilon_{t-1} + (1-\alpha)\varepsilon_{t-2} + \varepsilon_{t}

## 次数の選択
次数*p*および*q*は、サンプル自己相関関数（ACF）、偏自己相関関数（PACF）、拡張自己相関関数（EACF）法を用いて決定することができる。

その他の代替法として、AIC、BICなどがある。非季節性ARIMAモデルの次数を決定するためには赤池情報量規準（AIC）が有用である。AICは次のように書かれる。

:  \text{AIC} = -2\log(L)+2(p+q+k), 

ここで、*L*はデータの尤度、*p*は自己回帰モデル部分の次数、*q*は移動平均モデル部分の次数であり、*k' はARIMAモデルの切片を表す。AICでは *k* = 1の場合はARIMAモデルに切片があり（*c* ≠ 0）、*k* = 0 の場合はARIMAモデルに切片がない（*c* = 0）ことになる。

ARIMAモデルの補正AICは、次のように書くことができる。

: <math>\text{AICc}= \text{AIC}+ \frac{2(p+q+k)(p+q+k+1)}{T-p-q-k-1}.</math>

[[ベイズ情報量規準]]（BIC）は、次のように書くことができる。

: <math>\text{BIC}= \text{AIC}+((\log T)-2)(p+q+k).</math>

目標は、良いモデルのAIC、AICc、BICの値を最小化することである。調査するモデルの範囲でこれらの基準の一つの値が低ければ低いほど、そのモデルはデータに適している。AICとBICは 2つのまったく異なる目的で使用される。AICがモデルを現実の状況に近づけようとするのに対し、BICは完全な適合性をみつけようとする。BICのアプローチは、現実の複雑なデータに完璧にフィットすることはないと批判されることが多いが、AICに比べてパラメータが多いことでモデルに大きなペナルティを与えるため、選択のための有効な手法であることに変わりはない。

AICcは、差分の次数が等しいARIMAモデルの比較にのみ使用できる。差分の次数が異なるARIMAモデルについては、[[二乗平均平方根誤差|RMSE]]をモデルの比較に使用することができる。

== 係数の推定 ==

== ARIMAモデルを使用した予測 ==
ARIMAモデルは、2つのモデルの「カスケード」と見なすことができる。1つ目は非定常である：

: <math>
Y_t = (1-L)^d X_t
</math>

2番目は[[定常過程|広義の定常]]である：

: <math>
\left( 1 - \sum_{i=1}^p \varphi_i L^i \right) Y_t =
\left( 1 + \sum_{i=1}^q \theta_i L^i \right) \varepsilon_t \, .
</math>

こうして、プロセスYtを自己回帰予測法の一般化を用いて予測することができる。

=== 予測区間 ===
ARIMAモデルの予測区間（予測の[[信頼区間]]）は、残差が無相関で正規分布しているという仮定に基づいている。これらの仮定のいずれかが当てはまらない場合、予測間隔が正しくない可能性がある。このため、研究者は予測区間を作成する前に、過程をチェックするために残差のACFとヒストグラムをプロットする。

95%の予測区間は

<math>\hat{y}_{T+h\,\mid\, T}\pm1.96\sqrt{v_{T+h\,\mid\, T}}</math>

ここで、<math>v_{T+h\mid T}</math> は <math>y_{T+h} \mid y_1,\dots,y_T</math> の分散である

<math>h = 1, \, v_{T+h\,\mid\, T}=\hat{\sigma}^2</math> のとき、パラメータや次数に関係なく、すべてのARIMAモデルに適用される。対して。

<math>\mathrm{ARIMA}(0, 0, q)</math> の場合、 <math>y_t=e_t+\sum_{i=1}^q\theta_ie_{t-i}.</math>

: <math>v_{T+h\,\mid\, T} = \hat{\sigma}^2 \left[1+\sum_{i=1}^{h-1}\theta_ie_{t-i}\right], \text{ for } h=2,3,\ldots </math><sup class="noprint Inline-Template Template-Fact" data-ve-ignore="true" style="white-space:nowrap;">&#x5B;**&#x5D;</sup>

一般に、ARIMAモデルからの予測区間は、予測期間が長くなるにつれて広がる。

== バリエーションと拡張 ==
ARIMAモデルにはいくつかのバリエーションがある。複数の時系列を使用する場合は <math>X_t</math> をベクトルと考えることができ、VARIMAモデルが適切な場合がある。モデルに季節効果が疑われるときは、モデルのARやMAの次数を増やすよりも、SARIMA（季節ARIMA）モデルを使用する方が一般的には良いと考えられる。時系列が長距離依存性を示すと疑われる場合、フラクショナルARIMA（FARIMAまたはARFIMA）モデルとも呼ばれる自己回帰フラクショナル和分移動平均モデルでは、*d* パラメーターに非整数値を持たせることができる。

== ソフトウェアの実装 ==
ARIMAモデルに適切なパラメータを見つけるため、Box-Jenkinsパラメータ最適化のような方法論を適用する様々なパッケージがある。

* EViews：広範なARIMAおよびSARIMA機能を備えている
* [[Julia (プログラミング言語)|Julia]]：TimeModelsパッケージにARIMA実装が含まれている
* [[Mathematica]]：[http://reference.wolfram.com/mathematica/ref/ARIMAProcess.html ARIMAProcess]関数が含まれている
* [[MATLAB]]：[http://www.mathworks.com/products/econometrics/ Econometrics Toolbox] には、[http://www.mathworks.com/help/econ/arimaclass.html ARIMAモデル] と [http://www.mathworks.com/help/econ/regarimaclass.html ARIMAエラーを伴う回帰]が含まれる
* NCSS：ARIMA ィッティングと予測のためのいくつかの手順が含まれる   
* [[Python]]：[https://www.statsmodels.org/ statsmodels]パッケージには、時系列分析のモデル（AR、ARIMA、VARなど）や時系列分析のプロセスモデルが含まれている。
* [[R言語|R]]：標準のR statsパッケージには、 [http://search.r-project.org/R/library/stats/html/arima.html ARIMA Modelling of Time Series] に記載されている *arima* 関数が含まれている。この他に <math>\mathrm{ARIMA}(p, d, q)</math> の部分では、この関数は季節要因、切片項、外性変数（*xreg* 、「外部回帰因子」と呼ばれる）も含む。[https://cran.r-project.org/web/views/TimeSeries.html CRAN task view on Time Series] が参考になり、さらに多くのリンクがある。[[R言語|R]]の [https://cran.r-project.org/web/packages/forecast/index.html forcast] パッケージは  関数を用いて与えられた時系列のARIMAモデルを自動的に選択することができ、また、 関数を用いて季節性および非季節性のARIMAモデルをシミュレートすることができる。
* [[Ruby]]：[https://rubygems.org/gems/statsample-timeseries statsample-timeseries] gemは、ARIMAモデルやカルマンフィルターなどの時系列分析に使用される。
* [[JavaScript]]：[https://www.npmjs.com/package/arima arima] パッケージには、時系列分析と予測のモデルが含まれている（ARIMA、SARIMA、SARIMAX、AutoARIMA）
* [[C言語|C]]：[https://github.com/rafat/ctsa/ ctsa] パッケージには、ARIMA、SARIMA、SARIMAX、AutoARIMA、および時系列分析のための複数の方法が含まれている
* [http://www.safetoolboxes.com SAFE TOOLBOXES]：[http://www.safetoolboxes.com/howto_fitarimamodel.html ARIMA モデリング]と[http://www.safetoolboxes.com/howto_transformtimeseries.html ARIMAエラーを伴う回帰]が含まる
* SAS：計量経済学および時系列分析システム（SAS/ETS）に広範なARIMA処理が含まれている
* IBM [[SPSS]]：StatisticsパッケージとModeler statisticalパッケージにARIMAモデリングが含まれている。デフォルトのExpert Modeler機能は、様々な季節性および非季節性の自己回帰 *p*、和分 *d*、移動平均 *q* の設定と、7つの指数平滑化モデルを評価する。Expert Modelerは、対象となる時系列データを平方根や自然対数に変換することもできる。 また、Expert ModelerをARIMAモデルに限定したり、Expert Modelerを使用せずにARIMAの季節性および非季節性の *p*、*d*、*q'' 設定を手動で入力するオプションもある。7種類の外れ値の自動検出が可能で、この機能が選択されている場合、検出された外れ値は時系列モデルに収容される。
* SAP：SAP ERPのAPO-FCSパッケージ は ARIMA モデルの作成とボックス・ジェンキンスの方法論によるフィッティングを可能にする
* SQL Server Analysis Services：MicrosoftのデータマイニングアルゴリズムとしてARIMAが含まれている
* Stata：Stata 9以降のARIMAモデリング（arimaコマンドを使用）が含まれている
* StatSim：ForecastWeb アプリにARIMAモデルが含まれている
* Teradata Vantage：機械学習エンジンの一部としてARIMA機能を備えている
* TOL（Time Oriented Language）：ARIMAモデル（SARIMA、ARIMAX、DSARIMAXを含む）をモデル化するように設計されているhttps://web.archive.org/web/20170327171617/https://www.tol-project.org/
* Scala：spark-timeseriesライブラリには、Scala、Java、Python用のARIMA実装が含まれ、Apache Spark上で動作するように設計されている
* PostgreSQL / MadLib：Time Series Analysis/ARIMA
* X-12-ARIMA：米国国勢調査局

## 関連項目
* 自己相関
* 自己回帰移動平均モデル
* 
* 有限インパルス応答
* 無限インパルス応答
* ボックス・ジェンキンス法

## 脚注
### 出典

## 参考文献
* 
* 
* 

## 外部リンク
* ARIMA を使用した「季節調整済み」データ（米国国勢調査局）
* ARIMAモデルに関する講義ノート（Robert Nau、デューク大学）