rによるデータサイエンス:12章「時系列」

76
12章:時系列 Rによるデータサイエンス @teramonagi 1

Upload: tera-monagi

Post on 15-Jan-2015

11.359 views

Category:

Technology


1 download

DESCRIPTION

書籍:Rによるデータサイエンス(http://www.amazon.co.jp/dp/4627096011)の12章「時系列」の内容に沿った資料です。 第17回R勉強会@東京(#TokyoR)(http://atnd.org/events/19835)に使用。

TRANSCRIPT

Page 1: Rによるデータサイエンス:12章「時系列」

第12章:時系列

Rによるデータサイエンス

@teramonagi

1

Page 2: Rによるデータサイエンス:12章「時系列」

本はこれです

2

Page 3: Rによるデータサイエンス:12章「時系列」

12.1

基本概念とデータの操作

3

Page 4: Rによるデータサイエンス:12章「時系列」

時系列とは

時間と共に変動する現象を時間の順序で記録したデータ 4

Page 5: Rによるデータサイエンス:12章「時系列」

Rではts型が基本

5

Page 6: Rによるデータサイエンス:12章「時系列」

データの形式と属性> class(lh)

[1] "ts"

> lh

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 3.2 2.7 2.2(以下省略)

※女性の血液中の黄体ホルモンを10分間隔で測定したデータ・・・だそうです 6

Page 7: Rによるデータサイエンス:12章「時系列」

データの形式と属性> start(UKgas)

[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

1962 169.7 140.9 89.7 123.3

1963 187.3 144.1 92.9 120.1

※1960年から1986年までのイギリスのガス消費量の時系列データ・・・だそうです 7

Page 8: Rによるデータサイエンス:12章「時系列」

データの形式と属性> start(UKgas)

[1] 1960 1> end(UKgas)[1] 1986 4> frequency(UKgas)[1] 4> UKgas

Qtr1 Qtr2 Qtr3 Qtr41960 160.1 129.7 84.8 120.11961 160.1 124.9 84.8 116.91962 169.7 140.9 89.7 123.31963 187.3 144.1 92.9 120.1

※1960年から1986年までのイギリスのガス消費量の時系列データ・・・だそうです

1年を単位として

四半期ごとにデータがあるの

で48

Page 9: Rによるデータサイエンス:12章「時系列」

Window関数で部分抽出

> window(UKgas, c(1975, 2), c(1979, 3))Qtr1 Qtr2 Qtr3 Qtr4

1975 321.8 177.7 409.81976 593.9 329.8 176.1 483.51977 584.3 395.4 187.3 485.11978 669.2 421.0 216.1 509.11979 827.7 467.5 209.7

9

Page 10: Rによるデータサイエンス:12章「時系列」

グラフにしてみる> plot(UKgas, col=“blue”, lwd=3)

Time

UK

ga

s

1960 1965 1970 1975 1980 1985

20

06

00

10

00

10

Page 11: Rによるデータサイエンス:12章「時系列」

データの作成方法

> x <- ts(1:24, start = c(2010, 1), frequency = 12)> class(x)[1] "ts"> x

Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

2010 1 2 3 4 5 6 7 8 9 10 11 122011 13 14 15 16 17 18 19 20 21 22 23 24

11

Page 12: Rによるデータサイエンス:12章「時系列」

データの作成方法> x <- ts(1:24, start = c(2010, 1), frequency = 4)> x

Qtr1 Qtr2 Qtr3 Qtr42010 1 2 3 42011 5 6 7 82012 9 10 11 122013 13 14 15 162014 17 18 19 202015 21 22 23 24

12

Page 13: Rによるデータサイエンス:12章「時系列」

Time

1960 1965 1970 1975 1980 1985

200

600

1000

ラグ処理ts.plot(UKgas,lag(UKgas,k=3),col=c(4,2),lwd=3)

13

Page 14: Rによるデータサイエンス:12章「時系列」

差分処理

Time

diff

(UK

ga

s)

1960 1965 1970 1975 1980 1985

-40

00

20

0

plot(diff(UKgas), col = "blue", lwd = 3)

14

Page 15: Rによるデータサイエンス:12章「時系列」

ラグ処理と差分処理の関係

diff(UKgas, lag = 2)

UKgas - lag(UKgas, k=-2)

||

15

Page 16: Rによるデータサイエンス:12章「時系列」

12.2

自己共分散と自己相関

16

Page 17: Rによるデータサイエンス:12章「時系列」

データ分析でよく使う統計

平均、分散、相関係数

時系列の時は・・・?

平均、自己共分散、自己相関

17

Page 18: Rによるデータサイエンス:12章「時系列」

という時系列が手元にあったとし

て・・・

nyyy ,,, 21

18

Page 19: Rによるデータサイエンス:12章「時系列」

n

t

tyn 1

(標本)平均

19

Page 20: Rによるデータサイエンス:12章「時系列」

n

kt

kttk yyn

C1

ˆˆ1ˆ

(標本)自己共分散

20

Page 21: Rによるデータサイエンス:12章「時系列」

ˆˆ

C

CR k

k

(標本)自己相関

21

Page 22: Rによるデータサイエンス:12章「時系列」

自己相関のPLOTacf(UKgas, ci = 0.9)

0 1 2 3 4 5

-0.2

0.2

0.6

1.0

Lag

AC

F

Series UKgas

22

Page 23: Rによるデータサイエンス:12章「時系列」

自己相関のPLOTacf(UKgas, ci = 0.9)

0 1 2 3 4 5

-0.2

0.2

0.6

1.0

Lag

AC

F

Series UKgas

横軸=年1年周期をもつの

で1、2等にピーク

23

Page 24: Rによるデータサイエンス:12章「時系列」

自己相関のPLOTacf(diff(UKgas, lag = 4), ci = 0.9)

0 1 2 3 4 5

-0.2

0.2

0.6

1.0

Lag

AC

F

Series diff(UKgas, lag = 4)

24

Page 25: Rによるデータサイエンス:12章「時系列」

n

kt

kttk yyn

C1

ˆˆ1ˆ

(標本)相互共分散

※y’・μ’はまた別な時系列とその標本平均だとする 25

Page 26: Rによるデータサイエンス:12章「時系列」

ˆˆ

C

CR k

k

(標本)相互相関

26

Page 27: Rによるデータサイエンス:12章「時系列」

イギリスで肺関連(気管支炎、肺気腫、喘息)の病気による死者数推移

ts.plot(mdeaths, fdeaths, col = 2:3, lwd = 2)

legend("topleft", c("male", "female"), col = 2:3, lty = 1)

27

Page 28: Rによるデータサイエンス:12章「時系列」

その相互相関

ccf(mdeaths, fdeaths)28

Page 29: Rによるデータサイエンス:12章「時系列」

12.3

スペクトル分析

29

Page 30: Rによるデータサイエンス:12章「時系列」

スペクトル分析

周期性の解析

||

30

Page 31: Rによるデータサイエンス:12章「時系列」

パワースペクトル密度関数

ikf

k

keCfp 2

自己共分散Ckのフーリエ変換

31

Page 32: Rによるデータサイエンス:12章「時系列」

ピリオドグラム

jikfn

nk

kj eCp2

1

1

ˆˆ

(標本)自己共分散Ck

のフーリエ変換

22,1,0,

nn

n

jf j

32

Page 33: Rによるデータサイエンス:12章「時系列」

周波数で物を見る

33

Page 34: Rによるデータサイエンス:12章「時系列」

波の重ね合わせで物を見る

34

Page 35: Rによるデータサイエンス:12章「時系列」

波の単位||

sin, cos, tan

35

Page 36: Rによるデータサイエンス:12章「時系列」

波の単位||

sin, cos, tan

36

※tanは波ではないですよね?

Page 37: Rによるデータサイエンス:12章「時系列」

波の単位||

sin, cos, tan

37

※使うのは実数だけですよね?

Page 38: Rによるデータサイエンス:12章「時系列」

1つの波の例:cos関数

#cosを何回繰り返すのか

REP <- 5

#cosの周期(この逆数が周波数,0.2)

T <- 5

#サンプリングする個数

N <- 100

#データ生成

x <- (REP * T) * (1:N) / N

y <- ts(cos(2 * pi * x / T),start=1,frequency=(N/(REP*T)))

Plot(y)

38

Page 39: Rによるデータサイエンス:12章「時系列」

frequency=(N/(REP*T)

)

単位時間あたりのデータ数

||

39

Page 40: Rによるデータサイエンス:12章「時系列」

1つの波の例:cos関数

40

Page 41: Rによるデータサイエンス:12章「時系列」

ピリオドグラム描く

spec.pgram(y, log = "no“)

41

Page 42: Rによるデータサイエンス:12章「時系列」

周波数0.2(=1/5=1/周期)の位置にだけピーク

1つの波の例:cos関数

42

Page 43: Rによるデータサイエンス:12章「時系列」

12.4

ランダムウォークと単位根

43

Page 44: Rによるデータサイエンス:12章「時系列」

ランダムウォークと単位根

44

Page 45: Rによるデータサイエンス:12章「時系列」

ランダムウォークと単位根

これ見て下さい

45

Page 46: Rによるデータサイエンス:12章「時系列」

12.5

ARモデル

46

Page 47: Rによるデータサイエンス:12章「時系列」

ARモデル

tit

p

i

it eyay1

2,0:

:

:

Ne

orderp

a

t

i

残差

次数

自己回帰係数

47

Page 48: Rによるデータサイエンス:12章「時系列」

を決めたい 48

Page 49: Rによるデータサイエンス:12章「時系列」

ar関数で推定

> (lh.ar <- ar(lh))

Call:

ar(x = lh)

Coefficients:

1 2 3

0.6534 -0.0636 -0.2269

Order selected 3 sigma^2 estimated as 0.1959

49

Page 50: Rによるデータサイエンス:12章「時系列」

ar関数で推定

> lh.ar$order

[1] 3

> lh.ar$ar

[1] 0.653 -0.063 -0.22650

Page 51: Rによるデータサイエンス:12章「時系列」

ar関数で推定

321 227.0064.0653.0 tttt yyyy

51

Page 52: Rによるデータサイエンス:12章「時系列」

ar関数で推定

> Box.test(lh.ar$res, type="Ljung")

Box-Ljung test

data: lh.ar$res

X-squared = 0.0257, df = 1, p-value = 0.8728

Box-Pierce, Ljung-Box検定

残差が独立か否かチェック 52

Page 53: Rによるデータサイエンス:12章「時系列」

予測

> (lh.pr <- predict(lh.ar, n.ahead=10))$pred

Time Series:

Start = 49

End = 58

Frequency = 1

[1] 2.461588 2.272267 2.199151 2.262914 2.352194 2.423066 2.449223 2.441544 2.418779 2.398456

$se

Time Series:

Start = 49

End = 58

Frequency = 1

[1] 0.4425687 0.5286675 0.5525786 0.5527502 0.5592254 0.5665903 0.5688786 0.5689385 0.5692396

[10] 0.5697534

53

Page 54: Rによるデータサイエンス:12章「時系列」

予測> pred.upper <- lh.pr$pred + 2 * lh.pr$se

> pred.lower <- lh.pr$pred - 2 * lh.pr$se

> ts.plot(lh, lh.pr$pred, pred.upper, pred.lower,

+ gpars=list(col=c(1,2,3,3),lwd=3))

54

Page 55: Rによるデータサイエンス:12章「時系列」

12.6

ARMA/ARIMA

モデル

55

Page 56: Rによるデータサイエンス:12章「時系列」

ARMA/ARIMAモデル

jt

q

j

jtit

p

i

it ebeyay11

2,0:

:

:

Ne

orderp

a

t

i

残差

次数

自己回帰係数

56

Page 57: Rによるデータサイエンス:12章「時系列」

テキストのコード、Rっぽくねぇ

57

Page 58: Rによるデータサイエンス:12章「時系列」

arima関数で推定

> p <- 1:4

> d <- 0:1

> q <- 0:4

> lh.ari.all <- apply(expand.grid(p, d, q), 1, function(x)arima(lh, order = x))

> Reduce(function(x,y)if(x$aic<y$aic){x}else{y}, lh.ari.all)

Call:

arima(x = lh, order = x)

Coefficients:

ar1 ar2 ar3 intercept

0.6448 -0.0634 -0.2198 2.3931

s.e. 0.1394 0.1668 0.1421 0.0963

sigma^2 estimated as 0.1787: log likelihood = -27.09, aic = 64.18

58

Page 59: Rによるデータサイエンス:12章「時系列」

12.7

その他のモデル

59

Page 60: Rによるデータサイエンス:12章「時系列」

GARCHモデル

jt

r

j

jit

q

i

it heh1

2

1

2,0:

:

:

Ne

orderp

a

t

i

残差

次数

自己回帰係数

60

Page 61: Rによるデータサイエンス:12章「時系列」

Not 時系列自体

But 分散のモデル

61

Page 62: Rによるデータサイエンス:12章「時系列」

arima関数で推定install.packages("fGarch")

library(fGarch)

UKg.d <- diff(UKgas)

UKg.m <-garchFit(formula=~arma(1,1)+garch(1,1),data=UKg.d)

条件付き平均をarma(1,1)条件付き分散をgarch(1,1) とモデリング 62

Page 63: Rによるデータサイエンス:12章「時系列」

Ukg.mはS4クラス

@fit:推計パラメーター・標準誤差等

@fitted:フィットさせた値(予測値)

@residuals:残差その他にも元データ、条件付分散、callオブジェクト等あり

63

Page 64: Rによるデータサイエンス:12章「時系列」

メソッドもあり

plot:各種描画(選択)

show:オブジェクトの要約

summary : オブジェクトの要約

predict:予測値の算出

residuals:残差の表示

volatility:条件付き標準偏差計算

coef:推計パラメーター

formula:推計モデル

64

Page 65: Rによるデータサイエンス:12章「時系列」

12.8

成分の分解

65

Page 66: Rによるデータサイエンス:12章「時系列」

成分の分解観測値=トレンド+周期変動+残差

plot(stl(UKgas, s.window = "periodic"))

66

Page 67: Rによるデータサイエンス:12章「時系列」

12.9

多変量時系列

67

Page 68: Rによるデータサイエンス:12章「時系列」

というベクトルの時系列が手元にあったとし

て・・・

nYYY ,,, 21

68

Page 69: Rによるデータサイエンス:12章「時系列」

サンプルデータ

library(tseries)

data(USeconomic)

USe.d <- diff(USeconomic[,1:2])

ts.plot(USe.d, lty=1:2, col = 1:2)

legend("bottomleft", colnames(USe.d), lty = 1:2, col = 1:2)

・実質GNPの対数値(季節調整済み)・実質M1の対数値(季節調整済み)

69

Page 70: Rによるデータサイエンス:12章「時系列」

サンプルデータ

70

Page 71: Rによるデータサイエンス:12章「時系列」

ベクトル自己回帰(VAR)モデル

> (USe.ar <- ar(USe.d, order.max = 2, aic=FALSE))Call:

ar(x = USe.d, aic = FALSE, order.max = 2)

$ar

, , 1

[,1] [,2]

[1,] 0.5446 -0.1888

[2,] 0.1981 0.1295

, , 2

[,1] [,2]

[1,] 0.1231 0.04513

[2,] 0.1371 0.07110

$var.pred

[,1] [,2]

[1,] 1.063e-04 1.506e-05

[2,] 1.506e-05 8.494e-05

71

Page 72: Rによるデータサイエンス:12章「時系列」

ベクトル自己回帰(VAR)モデル

tttttt

tttttt

EGGMMG

EGGMMM

2121

1121

07.013.014.020.0

05.019.012.054.0

こんなモデルでました

の1階差分値log(GNP):

の1階差分値log(M1):

G

M

72

Page 73: Rによるデータサイエンス:12章「時系列」

12.10

カオス時系列

73

Page 74: Rによるデータサイエンス:12章「時系列」

カオス時系列

74

Page 75: Rによるデータサイエンス:12章「時系列」

カオス時系列

こんなんが

簡単にでるらしい

75

Page 76: Rによるデータサイエンス:12章「時系列」

その他参考パッケージ

– ade, its:時系列の操作例、モデルさk製に関する関数

– fracdiff:長期記憶時系列のモデル

– tsfa:時系列因子分析

– GeneTS:マイクロアレイ時系列解析パッケージ

– tsboot(boot), dynlm(dynlm),tsd/decdif/deccensus(pastecs)

– 統計数理研究所のTIMSAC(TIMe Series Analysis and Control program)

76