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

19,237 views

Published on

書籍:Rによるデータサイエンス(http://www.amazon.co.jp/dp/4627096011)の12章「時系列」の内容に沿った資料です。

第17回R勉強会@東京(#TokyoR)(http://atnd.org/events/19835)に使用。

Published in: Technology

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

  1. 1. Rによるデータサイエンス第12章:時系列 @teramonagi 1
  2. 2. 本はこれです 2
  3. 3. 12.1基本概念とデータの操作 3
  4. 4. 時系列とは時間と共に変動する現象を時間の順序で記録したデータ 4
  5. 5. Rではts型が基本 5
  6. 6. データの形式と属性> class(lh)[1] "ts"> lhTime Series:Start = 1End = 48Frequency = 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
  7. 7. データの形式と属性> 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年までのイギリスのガス消費量の時系列データ・・・だそうです 7
  8. 8. データの形式と属性1年を単位として四> start(UKgas)[1] 1960 1> end(UKgas)[1] 1986 4 半期ごとにデータ> frequency(UKgas)[1] 4> UKgas Qtr1 Qtr2 Qtr3 Qtr4 があるので41960 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年までのイギリスのガス消費量の時系列データ・・・だそうです 8
  9. 9. Window関数で部分抽出> window(UKgas, c(1975, 2), c(1979, 3)) Qtr1 Qtr2 Qtr3 Qtr41975 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
  10. 10. グラフにしてみる> plot(UKgas, col=“blue”, lwd=3) 1000UKgas 600 200 1960 1965 1970 1975 1980 1985 Time 10
  11. 11. データの作成方法> 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 Dec2010 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
  12. 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
  13. 13. ラグ処理ts.plot(UKgas,lag(UKgas,k=3),col=c(4,2),lwd=3) 1000 600 200 1960 1965 1970 1975 1980 1985 Time 13
  14. 14. 差分処理 plot(diff(UKgas), col = "blue", lwd = 3) 200diff(UKgas) 0 -400 1960 1965 1970 1975 1980 1985 Time 14
  15. 15. ラグ処理と差分処理の関係 diff(UKgas, lag = 2) ||UKgas - lag(UKgas, k=-2) 15
  16. 16. 12.2自己共分散と 自己相関 16
  17. 17. データ分析でよく使う統計 平均、分散、相関係数時系列の時は・・・? 平均、自己共分散、自己相関 17
  18. 18. y1 , y2 ,, yn  という時系列が手元にあったとして・・・ 18
  19. 19. (標本)平均 n 1   ytˆ n t 1 19
  20. 20. (標本)自己共分散 nˆ Ck 1 1  yt    yt k    ˆ ˆ n t k  20
  21. 21. (標本)自己相関 ˆ Ck ˆ  Rk ˆ C0 21
  22. 22. 自己相関のPLOT acf(UKgas, ci = 0.9) Series UKgas 1.0 0.6ACF 0.2 -0.2 0 1 2 3 4 5 Lag 22
  23. 23. 自己相関のPLOT 横軸=年 acf(UKgas, ci = 0.9) Series UKgas1年周期をもつの 1.0 0.6ACFで1、2等にピーク 0.2 -0.2 0 1 2 3 4 5 Lag 23
  24. 24. 自己相関のPLOTacf(diff(UKgas, lag = 4), ci = 0.9) Series diff(UKgas, lag = 4) 1.0 0.6ACF 0.2 -0.2 0 1 2 3 4 5 Lag 24
  25. 25. (標本)相互共分散 nˆ Ck 1 1  yt    ytk    ˆ ˆ n t k  ※y’・μ’はまた別な時系列とその標本平均だとする 25
  26. 26. (標本)相互相関 ˆ Ck ˆ  Rk ˆ C0 26
  27. 27. イギリスで肺関連(気管支炎、肺気腫、喘息) の病気による死者数推移ts.plot(mdeaths, fdeaths, col = 2:3, lwd = 2)legend("topleft", c("male", "female"), col = 2:3, lty = 1) 27
  28. 28. その相互相関ccf(mdeaths, fdeaths) 28
  29. 29. 12.3スペクトル分析 29
  30. 30. スペクトル分析 ||周期性の解析 30
  31. 31. パワースペクトル密度関数 p f    Ck e  2ikf k  自己共分散Ckのフーリエ変換 31
  32. 32. ピリオドグラム n 1p j   Ck ˆ e  2ikf jˆ k   n 1 j n f j  , n  0,1,2  n 2 (標本)自己共分散Ck のフーリエ変換 32
  33. 33. 周波数で物を見る 33
  34. 34. 波の重ね合わせ で物を見る 34
  35. 35. 波の単位 ||sin, cos, tan 35
  36. 36. 波の単位 || sin, cos, tan※tanは波ではないですよね? 36
  37. 37. 波の単位 ||sin, cos, tan※例としてcosだけで・・・ 37
  38. 38. 1つの波の例:cos関数#cosを何回繰り返すのかREP <- 5#cosの周期(この逆数が周波数,0.2)T <- 5#サンプリングする個数N <- 100#データ生成x <- (REP * T) * (1:N) / Ny <- ts(cos(2 * pi * x / T),start=1,frequency=(N/(REP*T)))Plot(y) 38
  39. 39. frequency=(N/(REP*T)) ||単位時間あたり のデータ数 39
  40. 40. 1つの波の例:cos関数 40
  41. 41. ピリオドグラム描くspec.pgram(y, log = "no“) 41
  42. 42. 1つの波の例:cos関数 周波数0.2(=1/5=1/周期) の位置にだけピーク 42
  43. 43. 12.4ランダムウォークと 単位根 43
  44. 44. ランダムウォークと単位根 44
  45. 45. ランダムウォークと単位根これ見て下さい 45
  46. 46. 12.5ARモデル 46
  47. 47. ARモデル pyt   ai yt i  et i 1 ai :自己回帰係数  p : 次数order  e  t   : 残差 N 0,  2  47
  48. 48. とを決めたい 48
  49. 49. ar関数で推定> (lh.ar <- ar(lh))Call:ar(x = lh)Coefficients: 1 2 30.6534 -0.0636 -0.2269Order selected 3 sigma^2 estimated as 0.1959 49
  50. 50. ar関数で推定> lh.ar$order[1] 3> lh.ar$ar[1] 0.653 -0.063 -0.226 50
  51. 51. ar関数で推定yt  0.653 yt 1  0.064 yt 2  0.227 yt 3 51
  52. 52. ar関数で推定 Box-Pierce, Ljung-Box検定> Box.test(lh.ar$res, type="Ljung") Box-Ljung testdata: lh.ar$resX-squared = 0.0257, df = 1, p-value = 0.8728 残差が独立か否かチェック 52
  53. 53. 予測> (lh.pr <- predict(lh.ar, n.ahead=10))$predTime Series:Start = 49End = 58Frequency = 1[1] 2.461588 2.272267 2.199151 2.262914 2.352194 2.423066 2.449223 2.441544 2.418779 2.398456$seTime Series:Start = 49End = 58Frequency = 1 [1] 0.4425687 0.5286675 0.5525786 0.5527502 0.5592254 0.5665903 0.5688786 0.5689385 0.5692396[10] 0.5697534 53
  54. 54. 予測> 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
  55. 55. 12.6ARMA/ARIMA モデル 55
  56. 56. ARMA/ARIMAモデル p qyt   ai yt i  et   b j et  j i 1 j 1 ai :自己回帰係数  p : 次数order  e  t   : 残差 N 0,  2  56
  57. 57. テキストのコード、 Rっぽくねぇ 57
  58. 58. 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.3931s.e. 0.1394 0.1668 0.1421 0.0963sigma^2 estimated as 0.1787: log likelihood = -27.09, aic = 64.18 58
  59. 59. 12.7その他のモデル 59
  60. 60. GARCHモデル ai :自己回帰係数  p : 次数order  e  t   : 残差 N 0,  2  q rht      e 2 i t i    j ht  j i 1 j 1 60
  61. 61. Not 時系列自体But 分散のモデル 61
  62. 62. garchFit関数で推定install.packages("fGarch")library(fGarch)UKg.d <- diff(UKgas)UKg.m <- garchFit(formula=~arma(1,1)+garch(1,1),dat a=UKg.d)条件付き平均をarma(1,1)条件付き分散をgarch(1,1) とモデリング 62
  63. 63. Ukg.mはS4クラス@fit:推計パラメーター・標準誤差等@fitted:フィットさせた値(予測値)@residuals:残差その他にも元データ、条件付分散、callオブジェクト等あり 63
  64. 64. メソッドもありplot:各種描画(選択)show:オブジェクトの要約summary : オブジェクトの要約predict:予測値の算出residuals:残差の表示volatility:条件付き標準偏差計算coef:推計パラメーターformula:推計モデル 64
  65. 65. 12.8成分の分解 65
  66. 66. 成分の分解観測値=トレンド+周期変動+残差plot(stl(UKgas, s.window = "periodic")) 66
  67. 67. 12.9多変量時系列 67
  68. 68. Y1, Y2 ,, Yn というベクトルの時系列が手元にあったとして・・・ 68
  69. 69. サンプルデータ ・実質GNPの対数値(季節調整済み) ・実質M1の対数値(季節調整済み)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) 69
  70. 70. サンプルデータ 70
  71. 71. ベクトル自己回帰(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
  72. 72. ベクトル自己回帰(VAR)モデル こんなモデルでましたM t  0.54M t 1  0.12M t 2  0.19Gt 1  0.05Gt 1  EtGt  0.20M t 1  0.14M t 2  0.13Gt 1  0.07Gt 2  Et M : log(M 1)の1階差分値 G : log(GNP)の1階差分値 72
  73. 73. 12.10カオス時系列 73
  74. 74. カオス時系列 74
  75. 75. カオス時系列 こんなんが簡単にでるらしい 75
  76. 76. その他参考パッケージ– ade, its:時系列の操作例、モデルさk製に関する 関数– fracdiff:長期記憶時系列のモデル– tsfa:時系列因子分析– GeneTS:マイクロアレイ時系列解析パッケージ– tsboot(boot), dynlm(dynlm),tsd/decdif/deccensus(pastecs)– 統計数理研究所のTIMSAC(TIMe Series Analysis and Control program) 76

×