時間とともに変動する現象に対して時間の順序で測定・観測した結果の記録を時系列データと言い、略して時系列 (time series) と言う。時系列データは多くの分野で様々な目的で取り扱われる。日常の社会生活の中でよく見受けられるものには、心電図や脳波のような医療データ、気温や気圧のような気象データ、株価および為替レートのような金融・経済データなどがある。
時系列データは、常に変動を伴うものである。その振る舞いを統計的に分析し、データ変動の特徴を捉え、現象の解明と将来の変動を予測・制御しようとするのが時系列データ分析の主要な目的である。
ちなみに、2003年ノーベル経済学賞の受賞の対象となった内容は、経済時系列分析に関するものである。
2.時系列データの形式と操作
時系列データは、通常ある一定の離散的時間間隔で測定・観測したものである。観測・測定値 に関する標本サイズ の時系列データは、測定した時間 をインデックスに次のように表記される。
(1) Rにおける時系列データの属性と表示
Rでは、マトリックス、データフレームに並んで時系列データオブジェクト形式がある。
基本的な時系列データの操作と分析に関する関数はパッケージ stats に用意されている。パッケージ stats はRを起動して直接に利用することが可能となっている。
本稿では、Rの中に用意されている時系列データを用いて説明することにする。Rには、ある女性の血液中の黄体形成ホルモンについて10分の間隔で測定した48のデータ lh がある。次のコマンドが返す結果からデータ lh の属性が確認できる。返された結果 ts は時系列 (time series) の頭文字で、属性が時系列であることを意味する。
[1] "ts"
Rにおける時系列データオブジェクト ts は、データに時間などの情報を加えて構造化したものである。例えば、次に示すデータ lh の内部には、時系列が始まる時間を1、終わる時間を48として、観測データが記録されている。
Time Series:
Start = 1
End = 48
Frequency = 1
[1] 2.4 2.4 2.4 2.2 2.1 1.5 2.3 2.3 2.5 2.0 1.9 1.7 2.2 1.8 3.2
[16] 3.2 2.7 2.2 2.2 1.9 1.9 1.8 2.7 3.0 2.3 2.0 2.0 2.9 2.9 2.7
[31] 2.7 2.3 2.6 2.4 1.8 1.7 1.5 1.4 2.1 3.3 3.5 3.5 3.1 2.6 2.1
[46] 3.4 3.0 2.9
Rには1960年から1986年までのイギリスのガス消費量を四半期ごとに観測した時系列データ UKgas がある。関数 start、 end を用いて時系列データの開始時間と終了時間を、関数 frequency で時間ごとに観測した回数を返すことができる。
[1] 1960 1
> end(UKgas)
[1] 1986 4
> frequency(UKgas)
[1] 4
> UKgas
Qtr1 | Qtr2 | Qtr3 | Qtr4 | |
1960 |
160.1 | 129.7 | 84.8 | 120.1 |
1961 |
160.1 | 124.9 | 84.8 | 116.9 |
<中略> |
||||
1985 |
1087.0 | 534.7 | 281.8 | 787.6 |
1986 |
1163.9 | 613.1 | 347.4 | 782.8 |
Rでは関数 window を用いて、時系列の一部分を切り出すことができる。次にデータ UKgas を用いた関数 window の使用例を示す。
Qtr1 | Qtr2 | Qtr3 | Qtr4 | |
1975 | 321.8 | 177.7 | 409.8 | |
1976 | 593.9 | 329.8 | 176.1 | 483.5 |
1977 | 584.3 | 395.4 | 187.3 | 485.1 |
1978 | 669.2 | 421.0 | 216.1 | 509.1 |
1979 | 827.7 | 467.5 | 209.7 |
(2) 時系列の図示
時系列データは関数 ts.plot を用いて横軸を時間、縦軸を観測・測定値とした折れ線グラフを作成することができる。関数 ts.plot は、plot に略して用いることもできる。関数 plot は自動的にオブジェクトの属性を識別することができるので、オブジェクトが時系列の場合は自動的に関数 ts.plot の機能を用いて作図される。次にデータ lh、UKgas の時系列グラフの作成例を示し、その結果を図1、2に示す。

図1 データ lh の時系列プロット

図2 データ UKgas の時系列プロット
Rには、1974年から1979年までのイギリスで喘息、気管支炎、肺気腫による死亡数を月ごとに記録した時系列データ ldeaths、これを男女別に分けた mdeaths、fdeaths がある。この3種類のデータを1つのグラフに表すコマンドを次に示し、その結果を図3に示す。
> legend(locator(1),c("全体","男性","女性"),lty=c(1:3),col=c(1:3))
関数 legend の中の引数 locator(1) を用いることにより、作成した画面に凡例を置く場所をマウスで指定することができる。locator(2) にすると凡例の外枠が描かれない。

図3 3種類の deaths の時系列プロット
(3) データオブジェクトの作成
非時系列属性のデータは、関数 ts、as.ts を用いて時系列属性に変換することができる。関数 ts を用いる際は、開始時間 (start)、時間単位ごとの観測数 (frequency) を引数で指定することが必要である。例えば、1から120までの整数を1995年から2004年まで、1年に12回観測したデータとして時系列オブジェクトを作成するには、次のように関数 ts を用いる。
> class(temp)
[1] "ts"
> temp
Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec | |
1974 | 3035 | 2552 | 2704 | 2554 | 2014 | 1655 | 1721 | 1524 | 1596 | 2074 | 2199 | 2512 |
1975 | 2933 | 2889 | 2938 | 2497 | 1870 | 1726 | 1607 | 1545 | 1396 | 1787 | 2076 | 2837 |
1976 | 2787 | 3891 | 3179 | 2011 | 1636 | 1580 | 1489 | 1300 | 1356 | 1653 | 2013 | 2823 |
1977 | 3102 | 2294 | 2385 | 2444 | 1748 | 1554 | 1498 | 1361 | 1346 | 1564 | 1640 | 2293 |
1978 | 2815 | 3137 | 2679 | 1969 | 1870 | 1633 | 1529 | 1366 | 1357 | 1570 | 1535 | 2491 |
1979 | 3084 | 2605 | 2573 | 2143 | 1693 | 1504 | 1461 | 1354 | 1333 | 1492 | 1781 | 1915 |
Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec | |
1973 | 3035 | 2552 | 2704 | 2554 | 2014 | |||||||
1974 | 1655 | 1721 | 1524 | 1596 | 2074 | 2199 | 2512 | 2933 | 2889 | 2938 | 2497 | 1870 |
1975 | 1726 | 1607 | 1545 | 1396 | 1787 | 2076 | 2837 | 2787 | 3891 | 3179 | 2011 | 1636 |
1976 | 1580 | 1489 | 1300 | 1356 | 1653 | 2013 | 2823 | 3102 | 2294 | 2385 | 2444 | 1748 |
1977 | 1554 | 1498 | 1361 | 1346 | 1564 | 1640 | 2293 | 2815 | 3137 | 2679 | 1969 | 1870 |
1978 | 1633 | 1529 | 1366 | 1357 | 1570 | 1535 | 2491 | 3084 | 2605 | 2573 | 2143 | 1693 |
1979 | 1504 | 1461 | 1354 | 1333 | 1492 | 1781 | 1915 | |||||
また、Rには時系列データの併合などを行う関数 ts.union、ts.intersect が用意されている。
(4) 差分
値 yt からyt-1 を引いた値yt = yt − yt-1 を差分(階差)と呼ぶ。時系列データにトレンドを含む場合は、差分操作で線形関係のトレンドを除去することができる。
Rには差分を求める関数 diff が用意されている。次に時系列データ UKgas の差分を図示するコマンドを示し、その結果を図4に示す。図2と比べると分かるように右肩上がりの時系列データの差分yt ではそのトレンドが除去されている。

図4 UKgas の差分のプロット