ts オブジェクトの構造
組み込みデータセットである co2 (大気中の二酸化炭素濃度の1959~1997年の月別観測値 (単位:ppm)) を見てみましょう。> data(co2) > class(co2) [1] "ts"
co2 は ts クラスのオブジェクトであることがわかります。unclass() してみます。
> unclass(co2) [1] 315.42 316.31 316.50 317.56 318.13 318.00 316.39 314.65 313.68 313.18 314.66 315.43 316.27 316.81 317.42 318.87 319.87 [18] 319.43 318.01 315.74 314.00 313.68 314.84 316.03 316.73 317.54 318.38 319.31 320.42 319.61 318.42 316.63 314.83 315.16 [35] 315.94 316.85 317.78 318.40 319.53 320.42 320.85 320.45 319.45 317.25 316.11 315.27 316.53 317.53 318.58 318.92 319.70 [52] 321.22 322.08 321.31 319.58 317.61 316.05 315.83 316.91 318.20 319.41 320.07 320.74 321.40 322.06 321.73 320.27 318.54 [69] 316.54 316.71 317.53 318.55 319.27 320.28 320.73 321.97 322.00 321.71 321.05 318.71 317.66 317.14 318.70 319.25 320.46 [86] 321.43 322.23 323.54 323.91 323.59 322.24 320.20 318.48 317.94 319.63 320.87 322.17 322.34 322.88 324.25 324.83 323.93 [103] 322.38 320.76 319.10 319.24 320.56 321.80 322.40 322.99 323.73 324.86 325.40 325.20 323.98 321.95 320.18 320.09 321.16 [120] 322.74 323.83 324.26 325.47 326.50 327.21 326.54 325.72 323.50 322.22 321.62 322.69 323.95 324.89 325.82 326.77 327.97 [137] 327.91 327.50 326.18 324.53 322.93 322.90 323.85 324.96 326.01 326.51 327.01 327.62 328.76 328.40 327.20 325.27 323.20 [154] 323.40 324.63 325.85 326.60 327.47 327.58 329.56 329.90 328.92 327.88 326.16 324.68 325.04 326.34 327.39 328.37 329.40 [171] 330.14 331.33 332.31 331.90 330.70 329.15 327.35 327.02 327.99 328.48 329.18 330.55 331.32 332.48 332.92 332.08 331.01 [188] 329.23 327.27 327.21 328.29 329.41 330.23 331.25 331.87 333.14 333.80 333.43 331.73 329.90 328.40 328.17 329.32 330.59 [205] 331.58 332.39 333.33 334.41 334.71 334.17 332.89 330.77 329.14 328.78 330.14 331.52 332.75 333.24 334.53 335.90 336.57 [222] 336.10 334.76 332.59 331.42 330.98 332.24 333.68 334.80 335.22 336.47 337.59 337.84 337.72 336.37 334.51 332.60 332.38 [239] 333.75 334.78 336.05 336.59 337.79 338.71 339.30 339.12 337.56 335.92 333.75 333.70 335.12 336.56 337.84 338.19 339.91 [256] 340.60 341.29 341.00 339.39 337.43 335.72 335.84 336.93 338.04 339.06 340.30 341.21 342.33 342.74 342.08 340.32 338.26 [273] 336.52 336.68 338.19 339.44 340.57 341.44 342.53 343.39 343.96 343.18 341.88 339.65 337.81 337.69 339.09 340.32 341.20 [290] 342.35 342.93 344.77 345.58 345.14 343.81 342.21 339.69 339.82 340.98 342.82 343.52 344.33 345.11 346.88 347.25 346.62 [307] 345.22 343.11 340.90 341.18 342.80 344.04 344.79 345.82 347.25 348.17 348.74 348.07 346.38 344.51 342.92 342.62 344.06 [324] 345.38 346.11 346.78 347.68 349.37 350.03 349.37 347.76 345.73 344.68 343.99 345.48 346.72 347.84 348.29 349.23 350.80 [341] 351.66 351.07 349.33 347.92 346.27 346.18 347.64 348.78 350.25 351.54 352.05 353.41 354.04 353.62 352.22 350.27 348.55 [358] 348.72 349.91 351.18 352.60 352.92 353.53 355.26 355.52 354.97 353.75 351.52 349.64 349.83 351.14 352.37 353.50 354.55 [375] 355.23 356.04 357.00 356.07 354.67 352.76 350.82 351.04 352.69 354.07 354.59 355.63 357.03 358.48 359.22 358.12 356.06 [392] 353.92 352.05 352.11 353.64 354.89 355.88 356.63 357.72 359.07 359.58 359.17 356.94 354.92 352.94 353.23 354.09 355.33 [409] 356.63 357.10 358.32 359.41 360.23 359.55 357.53 355.48 353.67 353.95 355.30 356.78 358.34 358.89 359.95 361.25 361.67 [426] 360.94 359.55 357.49 355.84 356.00 357.59 359.05 359.98 361.03 361.66 363.48 363.82 363.30 361.94 359.50 358.11 357.80 [443] 359.61 360.74 362.09 363.29 364.06 364.76 365.45 365.01 363.70 361.54 359.51 359.65 360.80 362.38 363.23 364.06 364.61 [460] 366.40 366.84 365.68 364.52 362.57 360.24 360.83 362.49 364.34 attr(,"tsp") [1] 1959.00 1997.92 12.00
co2 オブジェクトの実体は、数値ベクトルになっています。二酸化炭素濃度の観測値のベクトルですね。tsp という属性がついています。なんでしょう? ちょっと後で説明します。
さて、ts オブジェクトとして表示させてみましょう。
> co2 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 1959 315.42 316.31 316.50 317.56 318.13 318.00 316.39 314.65 313.68 313.18 314.66 315.43 1960 316.27 316.81 317.42 318.87 319.87 319.43 318.01 315.74 314.00 313.68 314.84 316.03 1961 316.73 317.54 318.38 319.31 320.42 319.61 318.42 316.63 314.83 315.16 315.94 316.85 1962 317.78 318.40 319.53 320.42 320.85 320.45 319.45 317.25 316.11 315.27 316.53 317.53 1963 318.58 318.92 319.70 321.22 322.08 321.31 319.58 317.61 316.05 315.83 316.91 318.20 1964 319.41 320.07 320.74 321.40 322.06 321.73 320.27 318.54 316.54 316.71 317.53 318.55 1965 319.27 320.28 320.73 321.97 322.00 321.71 321.05 318.71 317.66 317.14 318.70 319.25 1966 320.46 321.43 322.23 323.54 323.91 323.59 322.24 320.20 318.48 317.94 319.63 320.87 1967 322.17 322.34 322.88 324.25 324.83 323.93 322.38 320.76 319.10 319.24 320.56 321.80 1968 322.40 322.99 323.73 324.86 325.40 325.20 323.98 321.95 320.18 320.09 321.16 322.74 1969 323.83 324.26 325.47 326.50 327.21 326.54 325.72 323.50 322.22 321.62 322.69 323.95 1970 324.89 325.82 326.77 327.97 327.91 327.50 326.18 324.53 322.93 322.90 323.85 324.96 1971 326.01 326.51 327.01 327.62 328.76 328.40 327.20 325.27 323.20 323.40 324.63 325.85 1972 326.60 327.47 327.58 329.56 329.90 328.92 327.88 326.16 324.68 325.04 326.34 327.39 1973 328.37 329.40 330.14 331.33 332.31 331.90 330.70 329.15 327.35 327.02 327.99 328.48 1974 329.18 330.55 331.32 332.48 332.92 332.08 331.01 329.23 327.27 327.21 328.29 329.41 1975 330.23 331.25 331.87 333.14 333.80 333.43 331.73 329.90 328.40 328.17 329.32 330.59 1976 331.58 332.39 333.33 334.41 334.71 334.17 332.89 330.77 329.14 328.78 330.14 331.52 1977 332.75 333.24 334.53 335.90 336.57 336.10 334.76 332.59 331.42 330.98 332.24 333.68 1978 334.80 335.22 336.47 337.59 337.84 337.72 336.37 334.51 332.60 332.38 333.75 334.78 1979 336.05 336.59 337.79 338.71 339.30 339.12 337.56 335.92 333.75 333.70 335.12 336.56 1980 337.84 338.19 339.91 340.60 341.29 341.00 339.39 337.43 335.72 335.84 336.93 338.04 1981 339.06 340.30 341.21 342.33 342.74 342.08 340.32 338.26 336.52 336.68 338.19 339.44 1982 340.57 341.44 342.53 343.39 343.96 343.18 341.88 339.65 337.81 337.69 339.09 340.32 1983 341.20 342.35 342.93 344.77 345.58 345.14 343.81 342.21 339.69 339.82 340.98 342.82 1984 343.52 344.33 345.11 346.88 347.25 346.62 345.22 343.11 340.90 341.18 342.80 344.04 1985 344.79 345.82 347.25 348.17 348.74 348.07 346.38 344.51 342.92 342.62 344.06 345.38 1986 346.11 346.78 347.68 349.37 350.03 349.37 347.76 345.73 344.68 343.99 345.48 346.72 1987 347.84 348.29 349.23 350.80 351.66 351.07 349.33 347.92 346.27 346.18 347.64 348.78 1988 350.25 351.54 352.05 353.41 354.04 353.62 352.22 350.27 348.55 348.72 349.91 351.18 1989 352.60 352.92 353.53 355.26 355.52 354.97 353.75 351.52 349.64 349.83 351.14 352.37 1990 353.50 354.55 355.23 356.04 357.00 356.07 354.67 352.76 350.82 351.04 352.69 354.07 1991 354.59 355.63 357.03 358.48 359.22 358.12 356.06 353.92 352.05 352.11 353.64 354.89 1992 355.88 356.63 357.72 359.07 359.58 359.17 356.94 354.92 352.94 353.23 354.09 355.33 1993 356.63 357.10 358.32 359.41 360.23 359.55 357.53 355.48 353.67 353.95 355.30 356.78 1994 358.34 358.89 359.95 361.25 361.67 360.94 359.55 357.49 355.84 356.00 357.59 359.05 1995 359.98 361.03 361.66 363.48 363.82 363.30 361.94 359.50 358.11 357.80 359.61 360.74 1996 362.09 363.29 364.06 364.76 365.45 365.01 363.70 361.54 359.51 359.65 360.80 362.38 1997 363.23 364.06 364.61 366.40 366.84 365.68 364.52 362.57 360.24 360.83 362.49 364.34
co2 を表示すると、このように、年ごとの行と月ごとの列で表示されます。ts クラスの表示 (print.ts() 関数) では、月別データや四半期別データは特別扱いされていて、縦に年度、横に月または四半期を取った表形式で表示されるようになっています。
ts オブジェクトの作り方
ts オブジェクトは ts(data, start, frequency) 関数で作成します。data は観測値のベクトルまたは行列 (または行列化できるデータフレーム) で、data に指定した値がベクトルならば ts、行列ならば mts クラスのオブジェクトが生成されます。mts クラスについてはここでは割愛しますが、c("mts", "ts", "matrix") というクラス階層で、多変量時系列データを表現します。
start は観測値の先頭要素の「時刻」を示す値です。単一の数値で「自然な時間の単位」で数えた「時刻」を示す正整数を与えるか、2要素の数値ベクトルで「自然な時間の単位」で数えた「時刻」を示す正整数と、「自然な時間の単位」を後述の frequency の数に分割した際の番号 (1~frequency) を与えます。
frequency には「自然な時間の単位」内にいくつの観測値があるかを与えます。省略時は 1 です。「自然な時間の単位」は基本的には「年」が想定されています。したがって、frequency = 1 ならば年次データ、frequency = 4 ならば四半期毎データ、frequency = 12 なら月次データということになります。
start と同様の形式で end パラメータを与えれば、その時刻までのデータで ts オブジェクトを作ることもできます。frequency のかわりに deltat パラメータで観測値の時間間隔を与えることもできます。つまり、frequency=4 とするかわりに deltat=0.25 とすると、同じ意味になります。
これらの時間軸に関するパラメータは、tsp 属性に保存されます。
co2 オブジェクトの例だと、tsp は c(1959.00, 1997.92, 12.00) となっていました。start, end, frequency の意味になっています。1959年1月から1997年12月までの月次データという意味になります。
ts オブジェクトの生成例
ts オブジェクトの生成は難解だと思うので、他にも例を示しておきます。期間を指定しない場合
> ts(1:24) Time Series: Start = 1 End = 24 Frequency = 1 [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
データだけ渡すと、start = 1, frequency = 1 が既定値になっているので、上記のように作られます。end の値は start の値と data の要素数から自動的に決まります。
年次データとして生成する場合
1990年から始まる年次データとして取り扱いたければ、start を指定して、以下のようにします。> ts(1:24, start=1990) Time Series: Start = 1990 End = 2013 Frequency = 1 [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
四半期データとして生成する場合
1990年第2四半期から始まる四半期データならば、このようになる。> ts(1:24, start=c(1990, 2), frequency=4) Qtr1 Qtr2 Qtr3 Qtr4 1990 1 2 3 1991 4 5 6 7 1992 8 9 10 11 1993 12 13 14 15 1994 16 17 18 19 1995 20 21 22 23 1996 24
start を2要素のベクトルとして、第2要素に第2四半期の意味で 2 を指定します。
月次データとして生成する場合
1990年11月から始まる月次データであれば、こうです。> ts(1:24, start=c(1990, 11), frequency=12) Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 1990 1 2 1991 3 4 5 6 7 8 9 10 11 12 13 14 1992 15 16 17 18 19 20 21 22 23 24
frequency = 12 が print.ts() で月次と解釈されるので、列名が月名になりました。
半年毎のデータの場合
1990年から始まる半年毎のデータであれば、以下のようになります。> ts(1:24, start=1990, frequency=2) Time Series: Start = c(1990, 1) End = c(2001, 2) Frequency = 2 [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
frequency が4や12の場合は、print.ts() が四半期、月次として扱うという特別扱いをしてくれていました。しかし、それ以外の1ではない frequency については、特別扱いはありません。単純に Start, End, Frequency とデータベクトルを表示します。
start をスカラーで指定していても、frequency が 1 でない場合は start, end は2要素ベクトルで保持されており、そのまま表示されています。データも特別扱いがないため、平坦にベクトルとして表示されています。
実は、print.ts() には calendar というパラメータがあります。これを TRUE にすると、4, 12 以外の frequency でも、1年を frequency で分割したデータであるという想定で、カレンダー状に表示してくれます。
> print(ts(1:24, start=1990, frequency=2), calendar=TRUE) p1 p2 1990 1 2 1991 3 4 1992 5 6 1993 7 8 1994 9 10 1995 11 12 1996 13 14 1997 15 16 1998 17 18 1999 19 20 2000 21 22 2001 23 24
「自然な時間の単位」を秒に取った例
ここまでは、「自然な時間の単位」を年と考えた例を挙げましたが、高頻度データをあてはめることも可能ではあります。「自然な時間の単位」を秒に取り。2013年1月1日起点のミリ秒刻みのデータを持たせるとすると、以下のようになります。
> ts(1:1000, start=as.POSIXct("2013-01-01 00:00:00", "%Y-%m-%d %H:%M:%OS", tz=""), deltat=0.001) Time Series: Start = c(1356966000, 1) End = c(1356966000, 1000) Frequency = 1000 [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 (以下略)
start を POSIXct で指定してみました。POSIXct は内部構造が通算秒数のスカラー値なので、start に指定できます。ミリ秒を表すため、deltat に 0.001 を指定しています。
start を POSIXct で指定したものの、start, end はプリミティブな数値ベクトル化されてしまいました。POSIXct のまま保持することはできないのが残念ですが、一応保持できました。
生成元のデータに使用できるもの
ベクトル、行列、(行列化できる) データフレーム、ts オブジェクトからは、as.ts() によって ts オブジェクトを作成できます。as.ts() では元のオブジェクトに tsp 属性があれば、引き継がれます。ts() を使うと、引き継がれないので気を付けてください。例えば、ts オブジェクト x から ts オブジェクト y を生成するときは、y <- ts(x) だと tsp 属性が失われてしまいます。y <- as.ts(x) としましょう。
ts オブジェクトの情報の取得
ts オブジェクトの情報を取得する関数として、start(), end(), frequency(), tsp(), cycle(), time() が用意されています。start(), end(), frequency() はもうお分かりと思いますので割愛します。
tsp() は tsp 属性の取得・変更のための関数です。tsp 属性は前述の通り3要素の数値ベクトルで、start, end, frequency の値が入っています。start, end はパラメータに指定する際は2要素のベクトルですが、tsp 属性の中では frequency の値を考慮した1つの実数値で表現されています。計算方法で言えば、start[1] + (start[2] - 1) / frequency です。分かりにくいので例示すると、start = c(1990, 7)、frequency = 12 であれば、1990.5 です。1990年7月の頭は、1990年の真ん中なので、1990.5 という理屈ですね。
cycle() は、ts のデータを「自然な時間の単位」内での観測値の番号に置き換えた ts オブジェクトを返します。
> cycle(co2) Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 1959 1 2 3 4 5 6 7 8 9 10 11 12 1960 1 2 3 4 5 6 7 8 9 10 11 12 1961 1 2 3 4 5 6 7 8 9 10 11 12 1962 1 2 3 4 5 6 7 8 9 10 11 12 1963 1 2 3 4 5 6 7 8 9 10 11 12 1964 1 2 3 4 5 6 7 8 9 10 11 12 1965 1 2 3 4 5 6 7 8 9 10 11 12 1966 1 2 3 4 5 6 7 8 9 10 11 12 1967 1 2 3 4 5 6 7 8 9 10 11 12 1968 1 2 3 4 5 6 7 8 9 10 11 12 1969 1 2 3 4 5 6 7 8 9 10 11 12 1970 1 2 3 4 5 6 7 8 9 10 11 12 1971 1 2 3 4 5 6 7 8 9 10 11 12 1972 1 2 3 4 5 6 7 8 9 10 11 12 1973 1 2 3 4 5 6 7 8 9 10 11 12 1974 1 2 3 4 5 6 7 8 9 10 11 12 1975 1 2 3 4 5 6 7 8 9 10 11 12 1976 1 2 3 4 5 6 7 8 9 10 11 12 1977 1 2 3 4 5 6 7 8 9 10 11 12 1978 1 2 3 4 5 6 7 8 9 10 11 12 1979 1 2 3 4 5 6 7 8 9 10 11 12 1980 1 2 3 4 5 6 7 8 9 10 11 12 1981 1 2 3 4 5 6 7 8 9 10 11 12 1982 1 2 3 4 5 6 7 8 9 10 11 12 1983 1 2 3 4 5 6 7 8 9 10 11 12 1984 1 2 3 4 5 6 7 8 9 10 11 12 1985 1 2 3 4 5 6 7 8 9 10 11 12 1986 1 2 3 4 5 6 7 8 9 10 11 12 1987 1 2 3 4 5 6 7 8 9 10 11 12 1988 1 2 3 4 5 6 7 8 9 10 11 12 1989 1 2 3 4 5 6 7 8 9 10 11 12 1990 1 2 3 4 5 6 7 8 9 10 11 12 1991 1 2 3 4 5 6 7 8 9 10 11 12 1992 1 2 3 4 5 6 7 8 9 10 11 12 1993 1 2 3 4 5 6 7 8 9 10 11 12 1994 1 2 3 4 5 6 7 8 9 10 11 12 1995 1 2 3 4 5 6 7 8 9 10 11 12 1996 1 2 3 4 5 6 7 8 9 10 11 12 1997 1 2 3 4 5 6 7 8 9 10 11 12
time() は、ts のデータをその観測値の時刻を示す値に置き換えた ts オブジェクトを返す。
> time(co2) Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 1959 1959.00 1959.08 1959.17 1959.25 1959.33 1959.42 1959.50 1959.58 1959.67 1959.75 1959.83 1959.92 1960 1960.00 1960.08 1960.17 1960.25 1960.33 1960.42 1960.50 1960.58 1960.67 1960.75 1960.83 1960.92 1961 1961.00 1961.08 1961.17 1961.25 1961.33 1961.42 1961.50 1961.58 1961.67 1961.75 1961.83 1961.92 1962 1962.00 1962.08 1962.17 1962.25 1962.33 1962.42 1962.50 1962.58 1962.67 1962.75 1962.83 1962.92 1963 1963.00 1963.08 1963.17 1963.25 1963.33 1963.42 1963.50 1963.58 1963.67 1963.75 1963.83 1963.92 1964 1964.00 1964.08 1964.17 1964.25 1964.33 1964.42 1964.50 1964.58 1964.67 1964.75 1964.83 1964.92 1965 1965.00 1965.08 1965.17 1965.25 1965.33 1965.42 1965.50 1965.58 1965.67 1965.75 1965.83 1965.92 1966 1966.00 1966.08 1966.17 1966.25 1966.33 1966.42 1966.50 1966.58 1966.67 1966.75 1966.83 1966.92 1967 1967.00 1967.08 1967.17 1967.25 1967.33 1967.42 1967.50 1967.58 1967.67 1967.75 1967.83 1967.92 1968 1968.00 1968.08 1968.17 1968.25 1968.33 1968.42 1968.50 1968.58 1968.67 1968.75 1968.83 1968.92 1969 1969.00 1969.08 1969.17 1969.25 1969.33 1969.42 1969.50 1969.58 1969.67 1969.75 1969.83 1969.92 1970 1970.00 1970.08 1970.17 1970.25 1970.33 1970.42 1970.50 1970.58 1970.67 1970.75 1970.83 1970.92 1971 1971.00 1971.08 1971.17 1971.25 1971.33 1971.42 1971.50 1971.58 1971.67 1971.75 1971.83 1971.92 1972 1972.00 1972.08 1972.17 1972.25 1972.33 1972.42 1972.50 1972.58 1972.67 1972.75 1972.83 1972.92 1973 1973.00 1973.08 1973.17 1973.25 1973.33 1973.42 1973.50 1973.58 1973.67 1973.75 1973.83 1973.92 1974 1974.00 1974.08 1974.17 1974.25 1974.33 1974.42 1974.50 1974.58 1974.67 1974.75 1974.83 1974.92 1975 1975.00 1975.08 1975.17 1975.25 1975.33 1975.42 1975.50 1975.58 1975.67 1975.75 1975.83 1975.92 1976 1976.00 1976.08 1976.17 1976.25 1976.33 1976.42 1976.50 1976.58 1976.67 1976.75 1976.83 1976.92 1977 1977.00 1977.08 1977.17 1977.25 1977.33 1977.42 1977.50 1977.58 1977.67 1977.75 1977.83 1977.92 1978 1978.00 1978.08 1978.17 1978.25 1978.33 1978.42 1978.50 1978.58 1978.67 1978.75 1978.83 1978.92 1979 1979.00 1979.08 1979.17 1979.25 1979.33 1979.42 1979.50 1979.58 1979.67 1979.75 1979.83 1979.92 1980 1980.00 1980.08 1980.17 1980.25 1980.33 1980.42 1980.50 1980.58 1980.67 1980.75 1980.83 1980.92 1981 1981.00 1981.08 1981.17 1981.25 1981.33 1981.42 1981.50 1981.58 1981.67 1981.75 1981.83 1981.92 1982 1982.00 1982.08 1982.17 1982.25 1982.33 1982.42 1982.50 1982.58 1982.67 1982.75 1982.83 1982.92 1983 1983.00 1983.08 1983.17 1983.25 1983.33 1983.42 1983.50 1983.58 1983.67 1983.75 1983.83 1983.92 1984 1984.00 1984.08 1984.17 1984.25 1984.33 1984.42 1984.50 1984.58 1984.67 1984.75 1984.83 1984.92 1985 1985.00 1985.08 1985.17 1985.25 1985.33 1985.42 1985.50 1985.58 1985.67 1985.75 1985.83 1985.92 1986 1986.00 1986.08 1986.17 1986.25 1986.33 1986.42 1986.50 1986.58 1986.67 1986.75 1986.83 1986.92 1987 1987.00 1987.08 1987.17 1987.25 1987.33 1987.42 1987.50 1987.58 1987.67 1987.75 1987.83 1987.92 1988 1988.00 1988.08 1988.17 1988.25 1988.33 1988.42 1988.50 1988.58 1988.67 1988.75 1988.83 1988.92 1989 1989.00 1989.08 1989.17 1989.25 1989.33 1989.42 1989.50 1989.58 1989.67 1989.75 1989.83 1989.92 1990 1990.00 1990.08 1990.17 1990.25 1990.33 1990.42 1990.50 1990.58 1990.67 1990.75 1990.83 1990.92 1991 1991.00 1991.08 1991.17 1991.25 1991.33 1991.42 1991.50 1991.58 1991.67 1991.75 1991.83 1991.92 1992 1992.00 1992.08 1992.17 1992.25 1992.33 1992.42 1992.50 1992.58 1992.67 1992.75 1992.83 1992.92 1993 1993.00 1993.08 1993.17 1993.25 1993.33 1993.42 1993.50 1993.58 1993.67 1993.75 1993.83 1993.92 1994 1994.00 1994.08 1994.17 1994.25 1994.33 1994.42 1994.50 1994.58 1994.67 1994.75 1994.83 1994.92 1995 1995.00 1995.08 1995.17 1995.25 1995.33 1995.42 1995.50 1995.58 1995.67 1995.75 1995.83 1995.92 1996 1996.00 1996.08 1996.17 1996.25 1996.33 1996.42 1996.50 1996.58 1996.67 1996.75 1996.83 1996.92 1997 1997.00 1997.08 1997.17 1997.25 1997.33 1997.42 1997.50 1997.58 1997.67 1997.75 1997.83 1997.92
ts オブジェクトに対する操作
ts オブジェクトの実体はベクトル (または mts ならば行列) なので、ベクトル演算、行列演算は適用できます。それに加えて、時系列データ特有の操作関数が用意されています。ラグと階差
lag() は時系列のラグを作ります。ラグというのは、元の時系列データに対して時間軸をずらしたデータです。指定された数だけ時間軸をずらした時系列が得られます。例えば、lag(co2, -12) とすると12ヶ月ずらしたデータが得られます。1960年1月のところに、元データの1959年1月のデータ、つまり1年前の観測値が入ります。これを元のデータから引き算すると、1年前との差を計算することができます。ts オブジェクト同士の引き算は、時間軸の一致するところで計算されるので、このようなことができます。
> co2 - lag(co2, -12) Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 1960 0.85 0.50 0.92 1.31 1.74 1.43 1.62 1.09 0.32 0.50 0.18 0.60 1961 0.46 0.73 0.96 0.44 0.55 0.18 0.41 0.89 0.83 1.48 1.10 0.82 1962 1.05 0.86 1.15 1.11 0.43 0.84 1.03 0.62 1.28 0.11 0.59 0.68 1963 0.80 0.52 0.17 0.80 1.23 0.86 0.13 0.36 -0.06 0.56 0.38 0.67 1964 0.83 1.15 1.04 0.18 -0.02 0.42 0.69 0.93 0.49 0.88 0.62 0.35 1965 -0.14 0.21 -0.01 0.57 -0.06 -0.02 0.78 0.17 1.12 0.43 1.17 0.70 1966 1.19 1.15 1.50 1.57 1.91 1.88 1.19 1.49 0.82 0.80 0.93 1.62 1967 1.71 0.91 0.65 0.71 0.92 0.34 0.14 0.56 0.62 1.30 0.93 0.93 1968 0.23 0.65 0.85 0.61 0.57 1.27 1.60 1.19 1.08 0.85 0.60 0.94 1969 1.43 1.27 1.74 1.64 1.81 1.34 1.74 1.55 2.04 1.53 1.53 1.21 1970 1.06 1.56 1.30 1.47 0.70 0.96 0.46 1.03 0.71 1.28 1.16 1.01 1971 1.12 0.69 0.24 -0.35 0.85 0.90 1.02 0.74 0.27 0.50 0.78 0.89 1972 0.59 0.96 0.57 1.94 1.14 0.52 0.68 0.89 1.48 1.64 1.71 1.54 1973 1.77 1.93 2.56 1.77 2.41 2.98 2.82 2.99 2.67 1.98 1.65 1.09 1974 0.81 1.15 1.18 1.15 0.61 0.18 0.31 0.08 -0.08 0.19 0.30 0.93 1975 1.05 0.70 0.55 0.66 0.88 1.35 0.72 0.67 1.13 0.96 1.03 1.18 1976 1.35 1.14 1.46 1.27 0.91 0.74 1.16 0.87 0.74 0.61 0.82 0.93 1977 1.17 0.85 1.20 1.49 1.86 1.93 1.87 1.82 2.28 2.20 2.10 2.16 1978 2.05 1.98 1.94 1.69 1.27 1.62 1.61 1.92 1.18 1.40 1.51 1.10 1979 1.25 1.37 1.32 1.12 1.46 1.40 1.19 1.41 1.15 1.32 1.37 1.78 1980 1.79 1.60 2.12 1.89 1.99 1.88 1.83 1.51 1.97 2.14 1.81 1.48 1981 1.22 2.11 1.30 1.73 1.45 1.08 0.93 0.83 0.80 0.84 1.26 1.40 1982 1.51 1.14 1.32 1.06 1.22 1.10 1.56 1.39 1.29 1.01 0.90 0.88 1983 0.63 0.91 0.40 1.38 1.62 1.96 1.93 2.56 1.88 2.13 1.89 2.50 1984 2.32 1.98 2.18 2.11 1.67 1.48 1.41 0.90 1.21 1.36 1.82 1.22 1985 1.27 1.49 2.14 1.29 1.49 1.45 1.16 1.40 2.02 1.44 1.26 1.34 1986 1.32 0.96 0.43 1.20 1.29 1.30 1.38 1.22 1.76 1.37 1.42 1.34 1987 1.73 1.51 1.55 1.43 1.63 1.70 1.57 2.19 1.59 2.19 2.16 2.06 1988 2.41 3.25 2.82 2.61 2.38 2.55 2.89 2.35 2.28 2.54 2.27 2.40 1989 2.35 1.38 1.48 1.85 1.48 1.35 1.53 1.25 1.09 1.11 1.23 1.19 1990 0.90 1.63 1.70 0.78 1.48 1.10 0.92 1.24 1.18 1.21 1.55 1.70 1991 1.09 1.08 1.80 2.44 2.22 2.05 1.39 1.16 1.23 1.07 0.95 0.82 1992 1.29 1.00 0.69 0.59 0.36 1.05 0.88 1.00 0.89 1.12 0.45 0.44 1993 0.75 0.47 0.60 0.34 0.65 0.38 0.59 0.56 0.73 0.72 1.21 1.45 1994 1.71 1.79 1.63 1.84 1.44 1.39 2.02 2.01 2.17 2.05 2.29 2.27 1995 1.64 2.14 1.71 2.23 2.15 2.36 2.39 2.01 2.27 1.80 2.02 1.69 1996 2.11 2.26 2.40 1.28 1.63 1.71 1.76 2.04 1.40 1.85 1.19 1.64 1997 1.14 0.77 0.55 1.64 1.39 0.67 0.82 1.03 0.73 1.18 1.69 1.96
diff(x, lag=1, differences=1) は階差を取る関数で、時系列 x の、lag 分離れた要素の階差を返します。differences は多階階差 (階差の階差の…階差) をとりたい場合の回数を指定します。実は、前述の元データからラグを引き算することと同じ結果が diff で得られます。
> diff(co2, 12) Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 1960 0.85 0.50 0.92 1.31 1.74 1.43 1.62 1.09 0.32 0.50 0.18 0.60 1961 0.46 0.73 0.96 0.44 0.55 0.18 0.41 0.89 0.83 1.48 1.10 0.82 1962 1.05 0.86 1.15 1.11 0.43 0.84 1.03 0.62 1.28 0.11 0.59 0.68 1963 0.80 0.52 0.17 0.80 1.23 0.86 0.13 0.36 -0.06 0.56 0.38 0.67 1964 0.83 1.15 1.04 0.18 -0.02 0.42 0.69 0.93 0.49 0.88 0.62 0.35 1965 -0.14 0.21 -0.01 0.57 -0.06 -0.02 0.78 0.17 1.12 0.43 1.17 0.70 1966 1.19 1.15 1.50 1.57 1.91 1.88 1.19 1.49 0.82 0.80 0.93 1.62 1967 1.71 0.91 0.65 0.71 0.92 0.34 0.14 0.56 0.62 1.30 0.93 0.93 1968 0.23 0.65 0.85 0.61 0.57 1.27 1.60 1.19 1.08 0.85 0.60 0.94 1969 1.43 1.27 1.74 1.64 1.81 1.34 1.74 1.55 2.04 1.53 1.53 1.21 1970 1.06 1.56 1.30 1.47 0.70 0.96 0.46 1.03 0.71 1.28 1.16 1.01 1971 1.12 0.69 0.24 -0.35 0.85 0.90 1.02 0.74 0.27 0.50 0.78 0.89 1972 0.59 0.96 0.57 1.94 1.14 0.52 0.68 0.89 1.48 1.64 1.71 1.54 1973 1.77 1.93 2.56 1.77 2.41 2.98 2.82 2.99 2.67 1.98 1.65 1.09 1974 0.81 1.15 1.18 1.15 0.61 0.18 0.31 0.08 -0.08 0.19 0.30 0.93 1975 1.05 0.70 0.55 0.66 0.88 1.35 0.72 0.67 1.13 0.96 1.03 1.18 1976 1.35 1.14 1.46 1.27 0.91 0.74 1.16 0.87 0.74 0.61 0.82 0.93 1977 1.17 0.85 1.20 1.49 1.86 1.93 1.87 1.82 2.28 2.20 2.10 2.16 1978 2.05 1.98 1.94 1.69 1.27 1.62 1.61 1.92 1.18 1.40 1.51 1.10 1979 1.25 1.37 1.32 1.12 1.46 1.40 1.19 1.41 1.15 1.32 1.37 1.78 1980 1.79 1.60 2.12 1.89 1.99 1.88 1.83 1.51 1.97 2.14 1.81 1.48 1981 1.22 2.11 1.30 1.73 1.45 1.08 0.93 0.83 0.80 0.84 1.26 1.40 1982 1.51 1.14 1.32 1.06 1.22 1.10 1.56 1.39 1.29 1.01 0.90 0.88 1983 0.63 0.91 0.40 1.38 1.62 1.96 1.93 2.56 1.88 2.13 1.89 2.50 1984 2.32 1.98 2.18 2.11 1.67 1.48 1.41 0.90 1.21 1.36 1.82 1.22 1985 1.27 1.49 2.14 1.29 1.49 1.45 1.16 1.40 2.02 1.44 1.26 1.34 1986 1.32 0.96 0.43 1.20 1.29 1.30 1.38 1.22 1.76 1.37 1.42 1.34 1987 1.73 1.51 1.55 1.43 1.63 1.70 1.57 2.19 1.59 2.19 2.16 2.06 1988 2.41 3.25 2.82 2.61 2.38 2.55 2.89 2.35 2.28 2.54 2.27 2.40 1989 2.35 1.38 1.48 1.85 1.48 1.35 1.53 1.25 1.09 1.11 1.23 1.19 1990 0.90 1.63 1.70 0.78 1.48 1.10 0.92 1.24 1.18 1.21 1.55 1.70 1991 1.09 1.08 1.80 2.44 2.22 2.05 1.39 1.16 1.23 1.07 0.95 0.82 1992 1.29 1.00 0.69 0.59 0.36 1.05 0.88 1.00 0.89 1.12 0.45 0.44 1993 0.75 0.47 0.60 0.34 0.65 0.38 0.59 0.56 0.73 0.72 1.21 1.45 1994 1.71 1.79 1.63 1.84 1.44 1.39 2.02 2.01 2.17 2.05 2.29 2.27 1995 1.64 2.14 1.71 2.23 2.15 2.36 2.39 2.01 2.27 1.80 2.02 1.69 1996 2.11 2.26 2.40 1.28 1.63 1.71 1.76 2.04 1.40 1.85 1.19 1.64 1997 1.14 0.77 0.55 1.64 1.39 0.67 0.82 1.03 0.73 1.18 1.69 1.96
diffinv() は diff() の逆処理 (すなわち離散積分) を行います。cumsum() と似てますが、時系列データ用になっています。
融合・切り出し
ts.union(), ts.intersect() は、複数の時系列を融合する関数です。与える時系列オブジェクトは frequency が揃っている必要があり、start, end の違いを揃えて mts オブジェクトまたはデータフレーム (dframe=TRUE としたとき) として返します。ts.union() では一番若い start 値、一番大きい end 値に揃え (つまり全観測値を含む期間)、値のない箇所には NA を埋めます。ts.intersect() では、一番大きい start 値と一番若い end 値に揃えます (つまり全ての時系列に共通する期間)。window() は、1つの時系列オブジェクトから指定した start, end で指定した期間、frequency または deltat で指定した頻度のデータを切り出します。frequency は正確に要素が特定できるような適切な値 (整数倍して元の frequency になる値) でなければなりません。
> a <- window(co2, 1990, c(1990, 8)) > b <- window(co2, c(1990, 5), c(1990, 12)) > a Jan Feb Mar Apr May Jun Jul Aug 1990 353.50 354.55 355.23 356.04 357.00 356.07 354.67 352.76 > b May Jun Jul Aug Sep Oct Nov Dec 1990 357.00 356.07 354.67 352.76 350.82 351.04 352.69 354.07 > ts.union(a, b) a b Jan 1990 353.50 NA Feb 1990 354.55 NA Mar 1990 355.23 NA Apr 1990 356.04 NA May 1990 357.00 357.00 Jun 1990 356.07 356.07 Jul 1990 354.67 354.67 Aug 1990 352.76 352.76 Sep 1990 NA 350.82 Oct 1990 NA 351.04 Nov 1990 NA 352.69 Dec 1990 NA 354.07 > ts.intersect(a, b) a b May 1990 357.00 357.00 Jun 1990 356.07 356.07 Jul 1990 354.67 354.67 Aug 1990 352.76 352.76
集約
aggregate() は、nfrequency または ndeltat パラメータで指定した間隔ごとに FUN パラメータに指定した関数による集約を行います。frequency = 1 の時系列データ x があるとして、aggregate(x, nfrequency=0.5) とすれば、(FUN の既定値は sum なので) 観測値を2つずつ足し合わせた frequency = 0.5 の時系列が作られます。FUN=mean にすれば平均値で作られます。例えば、co2 を四半期の平均値で集約するには、以下のようにします。
> aggregate(co2, 4, mean) Qtr1 Qtr2 Qtr3 Qtr4 1959 316.0767 317.8967 314.9067 314.4233 1960 316.8333 319.3900 315.9167 314.8500 1961 317.5500 319.7800 316.6267 315.9833 1962 318.5700 320.5733 317.6033 316.4433 1963 319.0667 321.5367 317.7467 316.9800 1964 320.0733 321.7300 318.4500 317.5967 1965 320.0933 321.8933 319.1400 318.3633 1966 321.3733 323.6800 320.3067 319.4800 1967 322.4633 324.3367 320.7467 320.5333 1968 323.0400 325.1533 322.0367 321.3300 1969 324.5200 326.7500 323.8133 322.7533 1970 325.8267 327.7933 324.5467 323.9033 1971 326.5100 328.2600 325.2233 324.6267 1972 327.2167 329.4600 326.2400 326.2567 1973 329.3033 331.8467 329.0667 327.8300 1974 330.3500 332.4933 329.1700 328.3033 1975 331.1167 333.4567 330.0100 329.3600 1976 332.4333 334.4300 330.9333 330.1467 1977 333.5067 336.1900 332.9233 332.3000 1978 335.4967 337.7167 334.4933 333.6367 1979 336.8100 339.0433 335.7433 335.1267 1980 338.6467 340.9633 337.5133 336.9367 1981 340.1900 342.3833 338.3667 338.1033 1982 341.5133 343.5100 339.7800 339.0333 1983 342.1600 345.1633 341.9033 341.2067 1984 344.3200 346.9167 343.0767 342.6733 1985 345.9533 348.3267 344.6033 344.0200 1986 346.8567 349.5900 346.0567 345.3967 1987 348.4533 351.1767 347.8400 347.5333 1988 351.2800 353.6900 350.3467 349.9367 1989 353.0167 355.2500 351.6367 351.1133 1990 354.4267 356.3700 352.7500 352.6000 1991 355.7500 358.6067 354.0100 353.5467 1992 356.7433 359.2733 354.9333 354.2167 1993 357.3500 359.7300 355.5600 355.3433 1994 359.0600 361.2867 357.6267 357.5467 1995 360.8900 363.5333 359.8500 359.3833 1996 363.1467 365.0733 361.5833 360.9433 1997 363.9667 366.3067 362.4433 362.5533
ts オブジェクトに対する時系列分析
ts オブジェクトには、以下のような時系列分析手法が適用できます。acf(): 自己共分散、自己相関係数を求め、acf クラスのオブジェクトとして返しつつ、プロットもする
pacf(): 偏自己相関係数を求め、acf クラスのオブジェクトとして返しつつ、プロットもする
ccf(): 2つの時系列のクロス共分散、クロス相関係数を求め、acf クラスのオブジェクトとして返しつつ、プロットもする
spectrum(): スペクトル密度関数を推定し、spec クラスのオブジェクトとして返しつつ、プロットもする (高速フーリエ変換によるペリオドグラム計算 (spec.pgram()) と、AR モデルの当てはめ (spec.ar()) の2方式がある)
spec.taper(): 時系列の両端 (パラメータ p で観測値数に対する割合を指定) に cosine-bell 関数 ((1 - cos(x)) / 2) を適用することで、値を 0 に近づける (cosine taper)
ar(): AR モデル (自己回帰モデル) の当てはめを行う
arima(): ARIMA モデルの当てはめを行う
Box.test(): 独立性帰無仮説の検定を行う (Box-Pierce または Ljung-Box 検定)
PP.test(): 単位根を持つという帰無仮説を定常対立仮説に対して検定する (Phillips-Perron 検定)
tsdiag(): 時系列の当てはめ結果の診断図を描画する
decompose(): 移動平均を用いて、時系列を季節変動、傾向、不規則成分に分解する
stl(): loess() を用いて、季節変動、傾向、不規則成分に分解する
filter(): 線形フィルタを適用する
kernapply(): 時系列の特定のカーネル関数による畳み込みによって平滑化を行う
HoltWinters(): Holt-Winters フィルタリングを行う
StructTS(): 構造モデルの当てはめを行う
tsSmooth(): 状態空間モデルを用いた固定区間平滑化を行う
ts オブジェクトの作図
plot(): 時系列をプロットする例: plot(co2) |
lag.plot(): 時系列とそのラグを重ねてプロットする
monthplot(): 時系列を月ごと (あるいは他の季節成分ごと) にプロットする
ts.plot(): frequency の等しい複数の時系列を重ねてプロットする
cpgram(): 累積ペリオドグラムをプロットする