SlideShare a Scribd company logo
1 of 26
Rで触れる日本の経済
                  ~RでVAR編~

         2012/10/20
         Tokyo.R#27
           和田 計也

サイバー系
サイバー系


     はじめに



     ※この発表は個人の
     見解であり、所属す
     る組織の公式見解で
     はありません。

2012/10/20               1
サイバー系


     自己紹介

  和田 計也(@wdkz)
         静岡県袋井市出身




  サイバー系企業でデータマイニングエンジニア職
         最近は奥華子ばっか聴いてます



  前職はバイオベンチャー
         バイオマーカ探索してた
         学生時代は枯草菌の研究




2012/10/20                          2
サイバー系


     最近の株価と為替相場

    企業のグローバル化(仮)に伴って、円高(為替)が株価に与える
     影響が大きい昨今なんじゃないかと思ってみたり




2012/10/20                               3
サイバー系


     今日のお話

    企業の株価はYFinaceYJパッケージで取得
                Tokyo.R主催者作


    ドル⇔円の為替相場はYahoo! Japanからとってくる
                自作


    VAR(ベクトル自己回帰モデル)でモデル化
                米ドル⇔円の為替相場に影響されてる株はどれかな?




2012/10/20                                          4
サイバー系


     RFinanceFJパッケージで株価取得


        library(RFinanceYJ)
        dna <- quoteStockTsData(‘2432.t’, since=‘2012-01-01’)   #SNS
        mizuho <- quoteStockTsData(‘8411.t’, since=‘2012-01-01’) #金融
        sony <- quoteStockTsData(‘6758.t’, since=‘2012-01-01’)    #電機
        toyota <- quoteStockTsData(‘7203.t’, since=‘2012-01-01’) #自動車
        takeda <- quoteStockTsData(‘4502.t’, since=‘2012-01-01’) #製薬

        head(dna) #↓以下のようなdata.frame型でデータ取得できる
                   date open height low close volume adj_close
        198 2012-01-04 2321 2325 2285 2292 2077200       2292
        197 2012-01-05 2288 2290 2217 2222 2882400       2222
        196 2012-01-06 2235 2238 2111 2117 5601200       2117
        195 2012-01-10 2092 2099 2000 2027 5049000       2027
        194 2012-01-11 2005 2060 1891 1899 9326000       1899
        193 2012-01-12 1922 1973 1883 1946 11128900      1946




2012/10/20                                                                      5
サイバー系


     自作関数で為替情報取得


        #米ドル
        dollar <- getCurrencyEx(start.dt=‘2012-01-01’, end.dt=Sys.Date()-1)

        head(dollar) #↓以下のようなdata.frame型でデータ取得できる
                     date open   height    low  close
        207 2012-01-02 76.9300 77.1200 76.8399 76.8600
        206 2012-01-03 76.8799 76.9599 76.5899 76.6200
        205 2012-01-04 76.6900 76.8199 76.5800 76.6699
        204 2012-01-05 76.6999 77.2300 76.6500 77.1699
        203 2012-01-06 77.1200 77.3199 76.9499 76.9800
        202 2012-01-09 76.8899 77.0000 76.7500 76.8300




2012/10/20                                                                            6
サイバー系


     (参考)getCurrencyEx関数_1
getCurrencyEx <- function(start.dt=as.Date(“2012-01-01”), end.dt=(Sys.Date()-1),
                               type=c("d", "w", "m"), currency.from="USD", currency.to="JPY"){
   url.str <- paste("http://info.finance.yahoo.co.jp/history/?code=", currency.from, currency.to,
                     "%3DX&sy=", as.POSIXlt(start.dt)$year+1900, "&sm=",
                      as.POSIXlt(start.dt)$mon+1, "&sd=", as.POSIXlt(start.dt)$mday, "&ey=",
                      as.POSIXlt(end.dt)$year+1900, "&em=",
                      as.POSIXlt(end.dt)$mon+1, "&ed=",
                      as.POSIXlt(end.dt)$mday, "&tm=", type[1], sep="")
 #内部関数_必要データのリンク(ベクトル)を取得
  getLinks <- function(url.str){
   res.html <- RCurl::getURL(url.str)
   res.htmlv <- unlist(strsplit(res.html, "¥n"))
   s.idx <- which(res.htmlv %in% "<!--時系列-->")
   e.idx <- which(res.htmlv %in% "<!--アフィニティ-->")
   res.htmlv2 <- res.htmlv[s.idx:e.idx]
   ts.data <- res.htmlv2[grep("^</tr><tr><td>.*", res.htmlv2)]
   links <- res.htmlv2[grep("<!--ページング-->", res.htmlv2)]
  links2 <- unlist(strsplit(links, "[</a>|</span>]<a href=¥¥¥""))
   links3 <- links2[grep("^http://.*p=¥¥d¥¥¥" title=", links2)]




2012/10/20                                                                                          7
サイバー系


     (参考)getCurrencyEx関数_2
 if(length(links3)==0){
       return(url.str)
     }else{
       return(c(url.str, unlist(lapply(strsplit(links3, "¥¥¥" title="), function(x){x[1]}))))
     }
  }
url.links <- getLinks(url.str)
#内部関数_urlから必要データ取得
  get.tbl <- function(url.str1){
     res.html <- RCurl::getURL(url.str1)
    res.htmlv <- unlist(strsplit(res.html, "¥n"))
     s.idx <- which(res.htmlv %in% "<!--時系列-->")
     e.idx <- which(res.htmlv %in% "<!--アフィニティ-->")
     res.htmlv2 <- res.htmlv[s.idx:e.idx]
     ts.data <- res.htmlv2[grep("^</tr><tr><td>.*", res.htmlv2)]
     ts.data2 <- unlist(strsplit(ts.data, "</tr><tr><td>"))
     ts.data3 <- matrix(unlist(strsplit(ts.data2, "</td><td>")), ncol=5, byrow=TRUE)




2012/10/20                                                                                              8
サイバー系


     (参考)getCurrencyEx関数_3
  ts.data3[grep("¥¥d+</td>", ts.data3[,5]),5] <- gsub("[</td>|</td></tr><table>]","",
ts.data3[grep("¥¥d+</td>", ts.data3[,5]),5])
     ts.data3 <- as.data.frame(ts.data3, stringsAsFactors=FALSE)
     ts.data3[,2] <- as.numeric(ts.data3[,2]);          ts.data3[,3] <- as.numeric(ts.data3[,3])
     ts.data3[,4] <- as.numeric(ts.data3[,4]);          ts.data3[,5] <- as.numeric(ts.data3[,5])
     ts.data3[,1] <- as.Date(gsub("日", "", gsub("[年|月]", "-", ts.data3[,1])))
     colnames(ts.data3) <- c("date", "open", "height", "low", "close")
     return(ts.data3)
   }
   for(i in 1:length(url.links)){
     if(i==1){
       ret.tbl <- get.tbl(url.links[i])
     }else{
       ret.tbl <- rbind(ret.tbl, get.tbl(url.links[i]))
     }
   }
   return(ret.tbl[nrow(ret.tbl):1, ])
}




2012/10/20                                                                                                 9
サイバー系


     VARについて

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

             𝑦 𝑡 = 𝑐 + 𝐴1 𝑦 𝑡−1 + 𝐴2 𝑦 𝑡−2 + ・・・ + 𝐴 𝑝 𝑦 𝑡−𝑝 + 𝑒 𝑡
  まああれだ、ARの多変量版


                                p個前の過去データでモデリング

       これが1x kのベクトルになってて
       多変量になってる


                              壊れるほど愛
                              しても1/3も伝
                              わらないって
                              本当かい!?



2012/10/20                                                               10
サイバー系


     前述の関数を使って、データを取得してdata.frameに
  #2432;     ディー・エヌ・エー
  #4502;     武田薬品工業                                           とりあえず2012年
  #6758;     ソニー                                              のデータを取得
  #7203;     トヨタ自動車
  #8411;     みずほフィナンシャルグループ
  res.list <- list(
                      dollar=getCurrencyEx(start.dt="2012-01-01", end.dt=Sys.Date()-1),
                      dna=quoteStockTsData('2432.t', since='2012-01-01'),
                      takeda=quoteStockTsData('4502.t', since='2012-01-01'),
                      sony=quoteStockTsData('6758.t', since='2012-01-01'),
                      toyota=quoteStockTsData('7203.t', since='2012-01-01'),
                      mizuho=quoteStockTsData('8411.t', since='2012-01-01')
              )

  #data.frameにするために、必要な項目だけ抽出
  res.list2 <- lapply(res.list, function(x){
                       y <- as.data.frame(matrix(c(as.character(x$date),
                                                    (x$height+x$low)/2), ncol=2),
                                             stringsAsFactors=FALSE);
                       colnames(y) <- c("date", "price");
                       y$date <- as.Date(y$date);
                       y$price <- as.numeric(y$price); return(y)})


2012/10/20                                                                            11
サイバー系


     前述の関数を使って、データを取得してdata.frameに
   #為替相場と株価情報とで共通に存在する日を抽出
   for(i in 2:length(res.list2)){
     if(i==2){
       all.day <- intersect(as.character(res.list2[[i-1]]$date),
                             as.character(res.list2[[i]]$date))
     }else{
       all.day <- intersect(all.day, as.character(res.list2[[i]]$date))
     }
   }
   res.list3 <- lapply(res.list2, function(x){x[as.character(x$date) %in% all.day,]})

   #listをdata.frameに変換
   res.df <- as.data.frame(do.call(cbind, res.list3))
   rownames(res.df) <- res.df[,grep(".*¥¥.date", colnames(res.df))[1]]
   res.df <- res.df[,-grep(".*¥¥.date", colnames(res.df))]




2012/10/20                                                                              12
サイバー系


     こんな感じのdata.frame
   head(res.df)
                 dollar.price dna.price takeda.price   sony.price mizuho.price toyota.price
   2012-01-04    76.69995      2305.0       3407.5       1405.5        106.5       2627.0
   2012-01-05    76.94000      2253.5       3390.0       1379.0        108.0       2646.0
   2012-01-06    77.13490      2174.5       3347.5       1347.5        107.0       2631.5
   2012-01-10    76.82000      2049.5       3340.0       1354.0        108.0       2635.0
   2012-01-11    76.90995      1975.5       3287.5       1352.5        109.0       2624.0
   2012-01-12    76.80995      1928.0       3247.5       1331.0        109.0       2604.5

    plot(ts(res.df))




2012/10/20                                                                                    13
サイバー系


     米ドル・株価を増減率に
   レンジを揃えるために前日からの増減率(-1 ~ 1)に変換
   res.diff <- apply(res.df, 2, diff) #前日との差分
   res.per <- res.diff/res.df[-1,]    #前日からの増減差分
   head(res.per)
                dollar.price     dna.price takeda.price   sony.price mizuho.price toyota.price
   2012-01-05    3.12e-03      -0.022853     -0.00516     -0.01922      0.01389      0.00718
   2012-01-06    2.53e-03      -0.036330     -0.01270     -0.02338     -0.00935     -0.00551
   2012-01-10   -4.10e-03      -0.060990     -0.00225      0.00480      0.00926      0.00133
   2012-01-11    1.17e-03      -0.037459     -0.01597     -0.00111      0.00917     -0.00419
   2012-01-12   -1.30e-03      -0.024637     -0.01232     -0.01615      0.00000     -0.00749
   2012-01-13    6.51e-05      -0.000779     -0.00776      -0.00301     0.00000      0.01026
    plot(ts(res.per))




2012/10/20                                                                                       14
サイバー系


     VARするちょい手前

   tseries::adf.test(res.per[,1]) #単位根検定でランダムウォークじゃないことを確認して
   Augmented Dickey-Fuller Test
   data: res.diff[, 1] Dickey-Fuller = -9.06, Lag order = 1, p-value = 0.01
   alternative hypothesis: stationary
    警告メッセージ:
   In tseries::adf.test(res.diff[, 1], k = 1) :
   p-value smaller than printed p-value

    vars::VARselect(res.per, lag.max=7, type=“const”) #AICを基準に次数決め
   $selection
   AIC(n) HQ(n) SC(n) FPE(n)
                                    AICにより次数1が最適。
        1     1      1         1    つまり1日前のデータから当日のデータを説明するのがベストってこと
   $criteria
                 1        2           3          4         5           6          7
   AIC(n) 2.64e+01 2.64e+01    2.66e+01   2.68e+01   2.69e+01   2.70e+01   2.71e+01
   HQ(n) 2.67e+01 2.69e+01     2.74e+01   2.78e+01   2.82e+01   2.85e+01   2.89e+01
   SC(n) 2.71e+01 2.77e+01     2.85e+01   2.93e+01   3.01e+01   3.08e+01   3.15e+01
   FPE(n) 2.87e+11 2.90e+11    3.47e+11   4.20e+11   4.99e+11   5.56e+11   6.30e+11




2012/10/20                                                                            15
サイバー系


     VARする
   var.result <- vars::VAR(res.per, p=1, type=“const”) #次数1ってことでp=1
   summary(var.result)      #サマる
   Estimation results for equation dollar.price:
   =============================================
   sony.price = dollar.price.l1 + dna.price.l1 + takeda.price.l1 + sony.price.l1
                            + mizuho.price.l1 + toyota.price.l1 + const

                      Estimate Std. Error t value Pr(>|t|)
   dollar.price.l1   1.63397 0.47930         3.41 0.0008 ***
   dna.price.l1       0.03380 0.04337        0.78 0.4368
   takeda.price.l1    0.31132 0.20048        1.55 0.1221
   sony.price.l1     0.02458 0.09488         0.26 0.7958
   mizuho.price.l1    0.18670 0.16119        1.16 0.2482
   toyota.price.l1   -0.20480 0.16619       -1.23 0.2194
   const             -0.00233 0.00153       -1.52 0.1303




 明日のソニー株価価格の増減割合 = 1.6*今日の1ドルの円価格増減割合 + 0.034*今日のDeNA株価の価格増減割合
                + 0.31*今日の武田薬品株価の価格増減割合 + 0.024*今日のSony株価の価格増減割合
                + 0.19*今日のみずほ株価の価格増減割合 - 0.204*今日のトヨタ株価の価格増減割合
                 - 0.002




2012/10/20                                                                             16
サイバー系


     VARする_サマる続き
   Estimation results for equation dollar.price:
   =============================================
   dollar.price = dollar.price.l1 + dna.price.l1 + takeda.price.l1 + sony.price.l1 +
                           mizuho.price.l1 + toyota.price.l1 + const

                       Estimate Std. Error t value Pr(>|t|)
   dollar.price.l1    2.99e-01 8.14e-02      3.68 0.00031 ***
   dna.price.l1        4.42e-03 7.37e-03     0.60 0.54932
   takeda.price.l1     2.78e-02 3.40e-02     0.82 0.41602
   sony.price.l1     -3.51e-03 1.61e-02 -0.22 0.82780
   mizuho.price.l1   -1.29e-02 2.74e-02 -0.47 0.63704
   toyota.price.l1    -9.32e-03 2.82e-02 -0.33 0.74149
   const               7.82e-05 2.60e-04     0.30 0.76416

   Estimation results for equation dna.price:
   ==========================================
   dna.price = dollar.price.l1 + dna.price.l1 + takeda.price.l1 + sony.price.l1 +
                          mizuho.price.l1 + toyota.price.l1 + const

                       Estimate Std. Error t value        Pr(>|t|)
   dollar.price.l1   -6.47e-01   7.99e-01   -0.81         0.4190
   dna.price.l1        2.32e-01  7.23e-02     3.21        0.0015 **
   takeda.price.l1     4.20e-01  3.34e-01     1.26        0.2099
   sony.price.l1      1.36e-03   1.58e-01     0.01         0.9932
   mizuho.price.l1     4.77e-01  2.69e-01     1.78         0.0774 .
   toyota.price.l1    -3.28e-01  2.77e-01    -1.18        0.2380
   const              -3.74e-05  2.55e-03    -0.01        0.9883
2012/10/20                                                                                 17
サイバー系


     VARする_サマる続き2
   Estimation results for equation takeda.price:
   =============================================
   takeda.price = dollar.price.l1 + dna.price.l1 + takeda.price.l1 + sony.price.l1
                  + mizuho.price.l1 + toyota.price.l1 + const

                      Estimate      Std. Error t value    Pr(>|t|)
   dollar.price.l1  0.265242       0.186653      1.42     0.1570
   dna.price.l1     0.014896       0.016888       0.88    0.3789
   takeda.price.l1 0.212129        0.078074       2.72    0.0072 **
   sony.price.l1   -0.001617       0.036948     -0.04     0.9651
   mizuho.price.l1 0.010935        0.062772       0.17    0.8619
   toyota.price.l1 -0.063850       0.064720      -0.99    0.3251
   const            0.000231       0.000597       0.39    0.6998

   Estimation results for equation sony.price:
   ===========================================
   mizuho.price = dollar.price.l1 + dna.price.l1 + takeda.price.l1 + sony.price.l1
                   + mizuho.price.l1 + toyota.price.l1 + const

                     Estimate      Std. Error t value     Pr(>|t|)
   dollar.price.l1 0.899054       0.309867      2.90      0.0042 **
   dna.price.l1     0.012549      0.028036       0.45     0.6549
   takeda.price.l1 0.283463       0.129612      2.19      0.0300 *
   sony.price.l1   -0.069961      0.061338     -1.14      0.2555
   mizuho.price.l1 0.240696       0.104209      2.31      0.0220 *
   toyota.price.l1 -0.212064       0.107443 -1.97         0.0499 *
   const            0.000314       0.000991     0.32      0.7520
2012/10/20                                                                               18
サイバー系


     VARする_サマる続き3
   Estimation results for equation takeda.price:
   =============================================
   toyota.price = dollar.price.l1 + dna.price.l1 + takeda.price.l1 + sony.price.l1
                  + mizuho.price.l1 + toyota.price.l1 + const

                         Estimate      Std. Error    t value       Pr(>|t|)
   dollar.price.l1    1.058859        0.316993          3.34       0.001 **
   dna.price.l1        0.024938       0.028681          0.87        0.386
   takeda.price.l1     0.195947       0.132593          1.48        0.141
   sony.price.l1     -0.091743        0.062748        -1.46         0.145
   mizuho.price.l1     0.107951       0.106606          1.01        0.313
   toyota.price.l1    -0.005723       0.109914         -0.05        0.959
   const               0.000186       0.001014          0.18        0.855
   ---
   Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1




2012/10/20                                                                               19
サイバー系


     Grangerの因果検定
   変数Xが変数Yの予測に効いてるかどうか
    MSBVAR::granger.test(res.per, p=1)

                               F-statistic  p-value                                       F-statistic      p-value
 dna.price     -> dollar.price 1.64e-01 0.686204      dollar.price    -> sony.price      1.25e+01       0.000513
 takeda.price -> dollar.price  2.61e-01 0.610062      dna.price       -> sony.price      4.53e-01       0.501593
 sony.price    -> dollar.price 2.04e-01 0.652294      takeda.price    -> sony.price      3.93e+00       0.048861
 mizuho.price -> dollar.price  4.32e-01 0.512008      mizuho.price   -> sony.price       3.49e+00       0.063165
 toyota.price -> dollar.price   4.47e-01 0.504583     toyota.price     -> sony.price     4.24e-01       0.515750
 dollar.price -> dna.price     2.23e-01 0.637393      dollar.price    -> mizuho.price    4.63e+00       0.032723
 takeda.price -> dna.price      2.95e+00 0.087417     dna.price       -> mizuho.price    1.38e-04       0.990638
 sony.price    -> dna.price    2.30e-01 0.632001      takeda.price    -> mizuho.price    4.16e+00       0.042698
 mizuho.price -> dna.price      2.35e+00 0.127008     sony.price      -> mizuho.price    9.26e-01       0.337161
 toyota.price -> dna.price     1.42e-03 0.969947      toyota.price     -> mizuho.price   2.56e+00       0.111562
 dollar.price -> takeda.price 1.18e+00 0.278734       dollar.price    -> toyota.price    1.11e+01       0.001057
 dna.price     -> takeda.price 5.30e-01 0.467283      dna.price       -> toyota.price    4.21e-01       0.517454
 sony.price    -> takeda.price 1.89e-04 0.989043      takeda.price    -> toyota.price    2.92e+00       0.089006
 mizuho.price -> takeda.price  1.79e-04 0.989350      sony.price      -> toyota.price     8.21e-02       0.774766
 toyota.price -> takeda.price 1.61e-01 0.688693       mizuho.price   -> toyota.price     2.24e+00       0.136206




  ホントは多重検定問題によるfalse positive上昇とか注意しないといけないですよ


2012/10/20                                                                                                           20
サイバー系


     インパルス応答関数
   変数Xが変数Yの予測に効いてるかどうか(±どっちに効いてるか)
    plot(irf(var.result, impulse="dollar.price",
        response=c("dna.price", "sony.price", "toyota.price", "takeda.price",
                       "mizuho.price"), boot=TRUE))




      米ドル為替相場がS○ny, T○Y○TA, (若干Miz○h○も)の
      株価に与える影響は無視できん感じ
2012/10/20                                                                          21
サイバー系


     VARのモデリングをMCMCで行う
  MCMCでVARモデリングして何の意味があるの?とか言わない
  sink("mcmc.jags")
  cat("
  model{
   for(t in p+1:T){
     Dol[t] ~ dnorm(Dol.mu[t], Dol.tau); Dna[t] ~ dnorm(Dna.mu[t], Dna.tau)
     Tak[t] ~ dnorm(Tak.mu[t], Tak.tau); Sny[t] ~ dnorm(Sny.mu[t], Sny.tau)
     Miz[t] ~ dnorm(Miz.mu[t], Miz.tau); Toy[t] ~ dnorm(Toy.mu[t], Toy.tau)

      Dol.mu[t] <- alp.Dol + beta.Dol2Dol[1]*Dol[t-1] + beta.Dna2Dol[1]*Dna[t-1] + beta.Tak2Dol[1]*Tak[t-1]
                             + beta.Sny2Dol[1]*Sny[t-1] + beta.Toy2Dol[1]*Toy[t-1] + beta.Miz2Dol[1]*Miz[t-1]
      Dna.mu[t] <- alp.Dna + beta.Dna2Dna[1]*Dna[t-1] + beta.Dol2Dna[1]*Dol[t-1] + beta.Tak2Dna[1]*Tak[t-1]
                               + beta.Sny2Dna[1]*Sny[t-1] + beta.Toy2Dna[1]*Toy[t-1] + beta.Miz2Dna[1]*Miz[t-1]
      Tak.mu[t] <- alp.Tak + beta.Tak2Tak[1]*Tak[t-1] + beta.Dol2Tak[1]*Dol[t-1] + beta.Dna2Tak[1]*Dna[t-1]
                             + beta.Sny2Tak[1]*Sny[t-1] + beta.Toy2Tak[1]*Toy[t-1] + beta.Miz2Tak[1]*Miz[t-1]
      Sny.mu[t] <- alp.Sny + beta.Sny2Sny[1]*Sny[t-1] + beta.Dol2Sny[1]*Dol[t-1] + beta.Dna2Sny[1]*Dna[t-1]
                              + beta.Tak2Sny[1]*Tak[t-1] + beta.Toy2Sny[1]*Toy[t-1] + beta.Miz2Sny[1]*Miz[t-1]
      Toy.mu[t] <- alp.Toy + beta.Toy2Toy[1]*Toy[t-1] + beta.Dol2Toy[1]*Dol[t-1] + beta.Dna2Toy[1]*Dna[t-1]
                             + beta.Tak2Toy[1]*Tak[t-1]+ beta.Sny2Toy[1]*Sny[t-1] + beta.Miz2Toy[1]*Miz[t-1]
      Miz.mu[t] <- alp.Miz + beta.Miz2Miz[1]*Miz[t-1] + beta.Dol2Miz[1]*Dol[t-1] + beta.Dna2Miz[1]*Dna[t-1]
                             + beta.Tak2Miz[1]*Tak[t-1] + beta.Sny2Miz[1]*Sny[t-1] + beta.Toy2Miz[1]*Toy[t-1]
    }
    alp.Dol ~ dnorm(0, 0.001); alp.Sny ~ dnorm(0, 0.001)
    alp.Toy ~ dnorm(0, 0.001); alp.Dna ~ dnorm(0, 0.001)
    alp.Tak ~ dnorm(0, 0.001); alp.Miz ~ dnorm(0, 0.001)




2012/10/20                                                                                                  22
サイバー系


     VARのモデリングをMCMCで行う_2
for(m in 1:p){ #mは次数で今回は1
   beta.Dol2Dol[m] ~ dnorm(0,0.001); beta.Sny2Sny[m] ~ dnorm(0,0.001); beta.Toy2Toy[m] ~ dnorm(0,0.001)
   beta.Dna2Dna[m] ~ dnorm(0,0.001); beta.Tak2Tak[m] ~ dnorm(0,0.001); beta.Miz2Miz[m] ~ dnorm(0,0.001)
   beta.Sny2Dol[m] ~ dnorm(0,0.001); beta.Sny2Toy[m] ~ dnorm(0,0.001); beta.Sny2Yah[m] ~ dnorm(0,0.001)
   beta.Sny2Dna[m] ~ dnorm(0,0.001); beta.Sny2Tak[m] ~ dnorm(0,0.001); beta.Sny2Pan[m] ~ dnorm(0,0.001)
   beta.Sny2Miz[m] ~ dnorm(0,0.001); beta.Sny2Unq[m] ~ dnorm(0,0.001); beta.Dol2Sny[m] ~ dnorm(0,0.001)
   beta.Dol2Toy[m] ~ dnorm(0,0.001); beta.Dol2Yah[m] ~ dnorm(0,0.001); beta.Dol2Dna[m] ~ dnorm(0,0.001)
   beta.Dol2Tak[m] ~ dnorm(0,0.001); beta.Dol2Pan[m] ~ dnorm(0,0.001); beta.Dol2Miz[m] ~ dnorm(0,0.001)
   beta.Dol2Unq[m] ~ dnorm(0,0.001); beta.Toy2Dol[m] ~ dnorm(0,0.001); beta.Toy2Sny[m] ~ dnorm(0,0.001)
   beta.Toy2Yah[m] ~ dnorm(0,0.001); beta.Toy2Dna[m] ~ dnorm(0,0.001); beta.Toy2Tak[m] ~ dnorm(0,0.001)
   beta.Toy2Pan[m] ~ dnorm(0,0.001); beta.Toy2Miz[m] ~ dnorm(0,0.001); beta.Toy2Unq[m] ~ dnorm(0,0.001)
   beta.Dna2Dol[m] ~ dnorm(0,0.001); beta.Dna2Sny[m] ~ dnorm(0,0.001); beta.Dna2Yah[m] ~ dnorm(0,0.001)
   beta.Dna2Toy[m] ~ dnorm(0,0.001); beta.Dna2Tak[m] ~ dnorm(0,0.001); beta.Dna2Pan[m] ~ dnorm(0,0.001)
   beta.Dna2Miz[m] ~ dnorm(0,0.001); beta.Dna2Unq[m] ~ dnorm(0,0.001); beta.Tak2Dol[m] ~ dnorm(0,0.001)
   beta.Tak2Sny[m] ~ dnorm(0,0.001); beta.Tak2Yah[m] ~ dnorm(0,0.001); beta.Tak2Dna[m] ~ dnorm(0,0.001)
   beta.Tak2Toy[m] ~ dnorm(0,0.001); beta.Tak2Pan[m] ~ dnorm(0,0.001); beta.Tak2Miz[m] ~ dnorm(0,0.001)
   beta.Tak2Unq[m] ~ dnorm(0,0.001); beta.Miz2Dol[m] ~ dnorm(0,0.001); beta.Miz2Sny[m] ~ dnorm(0,0.001)
   beta.Miz2Dna[m] ~ dnorm(0,0.001); beta.Miz2Tak[m] ~ dnorm(0,0.001); beta.Miz2Toy[m] ~ dnorm(0,0.001)
 }
 Dol.tau ~ dgamma(0.001, 0.001); Sny.tau ~ dgamma(0.001, 0.001); Toy.tau ~ dgamma(0.001, 0.001)
 Dna.tau ~ dgamma(0.001, 0.001); Tak.tau ~ dgamma(0.001, 0.001); Miz.tau ~ dgamma(0.001, 0.001)
}
", fill=TRUE)
sink()




 *betaは二次元配列にすればスッキリ書けるが、結果の見やすさのために冗長に記述した

2012/10/20                                                                                           23
サイバー系


     VARのモデリングをMCMCで行う_3
  res.per <- as.data.frame(res.per)
  mc2.res <- jags.model("mcmc.jags", data=list('T'=nrow(res.per), 'Dol'=res.per$dollar.price,
                                                       'Sny'=res.per$sony.price, 'Toy'=res.per$toyota.price,
                                                       'Dna'=res.per$dna.price, 'Tak'=res.per$takeda.price,
                                                       'Miz'=res.per$mizuho.price, 'p'=1),
                                             n.chain=3, n.adapt=5000)
  #次後分布の結果は抜粋
  posterior <- coda.samples(mc2.res,
                    c("Sny.tau", "alp.Sny", "beta.Sny2Sny[1]", "beta.Dol2Sny[1]",
                      "beta.Toy2Sny[1]", "beta.Dna2Sny[1]", "beta.Tak2Dna[1]",
                      "beta.Miz2Sny[1]"), 50000)
  summary(posterior)




1. Empirical mean and standard deviation for each variable,
  plus standard error of the mean:

                        Mean         SD      Naive SE Time-series SE
Sny.tau             2.21e+03    2.27e+02      5.85e-01   5.86e-01               さっきの計算結果
alp.Sny            -2.33e-03    1.56e-03     4.03e-06    4.11e-06                           Estimate Std. Error t value Pr(>|t|)
beta.Dna2Sny[1]     3.37e-02    4.43e-02     1.14e-04    1.30e-04       const              -0.00233   0.00153 -1.52 0.1303
                                                                        dna.price.l1       0.03380   0.04337       0.78 0.4368
beta.Dol2Sny[1]     1.64e+00    4.87e-01     1.26e-03    1.41e-03       dollar.price.l1    1.63397   0.47930       3.41 0.0008
beta.Miz2Sny[1]     1.87e-01    1.63e-01     4.22e-04    7.40e-04       mizuho.price.l1   0.18670    0.16119      1.16 0.2482
                                                                        sony.price.l1      0.02458   0.09488       0.26 0.7958
beta.Sny2Sny[1]     2.48e-02    9.64e-02     2.49e-04    3.76e-04       takeda.price.l1    0.31132   0.20048       1.55 0.1221
beta.Tak2Dna[1]     4.22e-01    3.37e-01     8.71e-04    1.00e-03       toyota.price.l1   -0.20480    0.16619     -1.23 0.2194

beta.Toy2Sny[1]   -2.05e-01     1.70e-01     4.38e-04    8.13e-04




2012/10/20                                                                                                                         24
サイバー系


     まとめ


 1. @yokkunさん作成のRFinanceYJ使って株価データ取得
    して
 2. 自作の関数使って米ドル⇔円の為替情報取得して
 3. VARでモデル化してみました
 4. VARはmcmcでモデル化することもできます




2012/10/20                             25

More Related Content

What's hot

Rユーザのためのspark入門
Rユーザのためのspark入門Rユーザのためのspark入門
Rユーザのためのspark入門
Shintaro Fukushima
 
Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理
Takeshi Arabiki
 
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章
Prunus 1350
 
mmapパッケージを使ってお手軽オブジェクト管理
mmapパッケージを使ってお手軽オブジェクト管理mmapパッケージを使ってお手軽オブジェクト管理
mmapパッケージを使ってお手軽オブジェクト管理
Shintaro Fukushima
 
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
Shintaro Fukushima
 
巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について
Haruka Ozaki
 
Why dont you_create_new_spark_jl
Why dont you_create_new_spark_jlWhy dont you_create_new_spark_jl
Why dont you_create_new_spark_jl
Shintaro Fukushima
 

What's hot (19)

Feature Selection with R / in JP
Feature Selection with R / in JPFeature Selection with R / in JP
Feature Selection with R / in JP
 
Rユーザのためのspark入門
Rユーザのためのspark入門Rユーザのためのspark入門
Rユーザのためのspark入門
 
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
 
Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理
 
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章
 
mmapパッケージを使ってお手軽オブジェクト管理
mmapパッケージを使ってお手軽オブジェクト管理mmapパッケージを使ってお手軽オブジェクト管理
mmapパッケージを使ってお手軽オブジェクト管理
 
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
 
Rの高速化
Rの高速化Rの高速化
Rの高速化
 
巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について
 
R高速化
R高速化R高速化
R高速化
 
Rで計量時系列分析~CRANパッケージ総ざらい~
Rで計量時系列分析~CRANパッケージ総ざらい~ Rで計量時系列分析~CRANパッケージ総ざらい~
Rで計量時系列分析~CRANパッケージ総ざらい~
 
Why dont you_create_new_spark_jl
Why dont you_create_new_spark_jlWhy dont you_create_new_spark_jl
Why dont you_create_new_spark_jl
 
Gorinphp0729
Gorinphp0729Gorinphp0729
Gorinphp0729
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
R-hpc-1 TokyoR#11
R-hpc-1 TokyoR#11R-hpc-1 TokyoR#11
R-hpc-1 TokyoR#11
 
Juliaで並列計算
Juliaで並列計算Juliaで並列計算
Juliaで並列計算
 
textsearch_jaで全文検索
textsearch_jaで全文検索textsearch_jaで全文検索
textsearch_jaで全文検索
 
R3.0.0 is relased
R3.0.0 is relasedR3.0.0 is relased
R3.0.0 is relased
 
Tokyor23 doradora09
Tokyor23 doradora09Tokyor23 doradora09
Tokyor23 doradora09
 

Viewers also liked

マーケティングサイエンス徹底入門と実践Part2
マーケティングサイエンス徹底入門と実践Part2マーケティングサイエンス徹底入門と実践Part2
マーケティングサイエンス徹底入門と実践Part2
宏喜 佐野
 
Rによる主成分分析 入門
Rによる主成分分析 入門Rによる主成分分析 入門
Rによる主成分分析 入門
Hiro47
 

Viewers also liked (20)

Rで学ぶ回帰分析と単位根検定
Rで学ぶ回帰分析と単位根検定Rで学ぶ回帰分析と単位根検定
Rで学ぶ回帰分析と単位根検定
 
養成読本と私
養成読本と私養成読本と私
養成読本と私
 
Rubyによるデータ解析
Rubyによるデータ解析Rubyによるデータ解析
Rubyによるデータ解析
 
マーケティングサイエンス徹底入門と実践Part2
マーケティングサイエンス徹底入門と実践Part2マーケティングサイエンス徹底入門と実践Part2
マーケティングサイエンス徹底入門と実践Part2
 
主成分分析(Pca)
主成分分析(Pca)主成分分析(Pca)
主成分分析(Pca)
 
Rによる主成分分析 入門
Rによる主成分分析 入門Rによる主成分分析 入門
Rによる主成分分析 入門
 
フリーソフトウェアを通じた多変量解析講習
フリーソフトウェアを通じた多変量解析講習フリーソフトウェアを通じた多変量解析講習
フリーソフトウェアを通じた多変量解析講習
 
R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜機会学習・データビジュアライゼーション事始め〜
R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜機会学習・データビジュアライゼーション事始め〜R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜機会学習・データビジュアライゼーション事始め〜
R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜機会学習・データビジュアライゼーション事始め〜
 
[データマイニング+WEB勉強会][R勉強会] R言語によるクラスター分析 - 活用編
[データマイニング+WEB勉強会][R勉強会] R言語によるクラスター分析 - 活用編[データマイニング+WEB勉強会][R勉強会] R言語によるクラスター分析 - 活用編
[データマイニング+WEB勉強会][R勉強会] R言語によるクラスター分析 - 活用編
 
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる R言語によるクラスター分析 - 似ているものをグループ化する-
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる R言語によるクラスター分析 - 似ているものをグループ化する-[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる R言語によるクラスター分析 - 似ているものをグループ化する-
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる R言語によるクラスター分析 - 似ているものをグループ化する-
 
主成分分析 (pca)
主成分分析 (pca)主成分分析 (pca)
主成分分析 (pca)
 
[R勉強会][データマイニング] R言語による時系列分析
[R勉強会][データマイニング] R言語による時系列分析[R勉強会][データマイニング] R言語による時系列分析
[R勉強会][データマイニング] R言語による時系列分析
 
Taste of Wine vs. Data Science
Taste of Wine vs. Data ScienceTaste of Wine vs. Data Science
Taste of Wine vs. Data Science
 
指数分布とポアソン分布のいけない関係
指数分布とポアソン分布のいけない関係指数分布とポアソン分布のいけない関係
指数分布とポアソン分布のいけない関係
 
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリングベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング
 
直感的な単変量モデルでは予測できない「ワインの味」を多変量モデルで予測する
直感的な単変量モデルでは予測できない「ワインの味」を多変量モデルで予測する直感的な単変量モデルでは予測できない「ワインの味」を多変量モデルで予測する
直感的な単変量モデルでは予測できない「ワインの味」を多変量モデルで予測する
 
10分でわかる主成分分析(PCA)
10分でわかる主成分分析(PCA)10分でわかる主成分分析(PCA)
10分でわかる主成分分析(PCA)
 
はじめよう多変量解析~主成分分析編~
はじめよう多変量解析~主成分分析編~はじめよう多変量解析~主成分分析編~
はじめよう多変量解析~主成分分析編~
 
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
 
はじめての「R」
はじめての「R」はじめての「R」
はじめての「R」
 

Similar to Rで触れる日本経済~RでVAR編~

月間10億pvを支えるmongo db
月間10億pvを支えるmongo db月間10億pvを支えるmongo db
月間10億pvを支えるmongo db
Yuji Isobe
 
Code iq×japanr 公開用
Code iq×japanr 公開用Code iq×japanr 公開用
Code iq×japanr 公開用
Nobuaki Oshiro
 
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理
土岐 孝平
 

Similar to Rで触れる日本経済~RでVAR編~ (20)

Monadicプログラミング マニアックス
Monadicプログラミング マニアックスMonadicプログラミング マニアックス
Monadicプログラミング マニアックス
 
Japan r.3
Japan r.3Japan r.3
Japan r.3
 
D3.js で LOD を Visualization
D3.js で LOD を VisualizationD3.js で LOD を Visualization
D3.js で LOD を Visualization
 
D3.js と SVG によるデータビジュアライゼーション
D3.js と SVG によるデータビジュアライゼーションD3.js と SVG によるデータビジュアライゼーション
D3.js と SVG によるデータビジュアライゼーション
 
20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門
 
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -
 
Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017
 
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーション
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーションAngularJSとD3.jsによるインタラクティブデータビジュアライゼーション
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーション
 
気象庁XMLのSPARQL APIを利用してデータを俯瞰しよう -SPARQLとRによる可視化-
気象庁XMLのSPARQL APIを利用してデータを俯瞰しよう -SPARQLとRによる可視化-気象庁XMLのSPARQL APIを利用してデータを俯瞰しよう -SPARQLとRによる可視化-
気象庁XMLのSPARQL APIを利用してデータを俯瞰しよう -SPARQLとRによる可視化-
 
月間10億pvを支えるmongo db
月間10億pvを支えるmongo db月間10億pvを支えるmongo db
月間10億pvを支えるmongo db
 
Code iq×japanr 公開用
Code iq×japanr 公開用Code iq×japanr 公開用
Code iq×japanr 公開用
 
d3jsハンズオン @E2D3ハッカソン
d3jsハンズオン @E2D3ハッカソンd3jsハンズオン @E2D3ハッカソン
d3jsハンズオン @E2D3ハッカソン
 
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
Listを串刺し
Listを串刺しListを串刺し
Listを串刺し
 
はじめてのベイズ推定
はじめてのベイズ推定はじめてのベイズ推定
はじめてのベイズ推定
 
Webで役立つRDBの使い方
Webで役立つRDBの使い方Webで役立つRDBの使い方
Webで役立つRDBの使い方
 
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要 第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
 
Sc2009autumn s2robot
Sc2009autumn s2robotSc2009autumn s2robot
Sc2009autumn s2robot
 
Aerospike xdr (Cross Datacenter Replication)
Aerospike xdr (Cross Datacenter Replication)Aerospike xdr (Cross Datacenter Replication)
Aerospike xdr (Cross Datacenter Replication)
 

More from Kazuya Wada

More from Kazuya Wada (14)

オンラインTVサービスの分析事例
オンラインTVサービスの分析事例オンラインTVサービスの分析事例
オンラインTVサービスの分析事例
 
道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkz道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkz
 
ハイレゾの話
ハイレゾの話ハイレゾの話
ハイレゾの話
 
Shiny-Serverあれこれ
Shiny-ServerあれこれShiny-Serverあれこれ
Shiny-Serverあれこれ
 
データサイエンティストカジュアルトーク by wdkz
データサイエンティストカジュアルトーク by wdkzデータサイエンティストカジュアルトーク by wdkz
データサイエンティストカジュアルトーク by wdkz
 
R-3.0.0でGLM
R-3.0.0でGLMR-3.0.0でGLM
R-3.0.0でGLM
 
はじめてのShiny
はじめてのShinyはじめてのShiny
はじめてのShiny
 
JuliaでGLM
JuliaでGLMJuliaでGLM
JuliaでGLM
 
そろそろRStudioの話
そろそろRStudioの話そろそろRStudioの話
そろそろRStudioの話
 
RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~
 
Rでウォーリを探してみた
Rでウォーリを探してみたRでウォーリを探してみた
Rでウォーリを探してみた
 
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
 
RでGPU使ってみた
RでGPU使ってみたRでGPU使ってみた
RでGPU使ってみた
 
Tokyo.R#16 wdkz
Tokyo.R#16 wdkzTokyo.R#16 wdkz
Tokyo.R#16 wdkz
 

Rで触れる日本経済~RでVAR編~

  • 1. Rで触れる日本の経済 ~RでVAR編~ 2012/10/20 Tokyo.R#27 和田 計也 サイバー系
  • 2. サイバー系 はじめに ※この発表は個人の 見解であり、所属す る組織の公式見解で はありません。 2012/10/20 1
  • 3. サイバー系 自己紹介  和田 計也(@wdkz)  静岡県袋井市出身  サイバー系企業でデータマイニングエンジニア職  最近は奥華子ばっか聴いてます  前職はバイオベンチャー  バイオマーカ探索してた  学生時代は枯草菌の研究 2012/10/20 2
  • 4. サイバー系 最近の株価と為替相場  企業のグローバル化(仮)に伴って、円高(為替)が株価に与える 影響が大きい昨今なんじゃないかと思ってみたり 2012/10/20 3
  • 5. サイバー系 今日のお話  企業の株価はYFinaceYJパッケージで取得  Tokyo.R主催者作  ドル⇔円の為替相場はYahoo! Japanからとってくる  自作  VAR(ベクトル自己回帰モデル)でモデル化  米ドル⇔円の為替相場に影響されてる株はどれかな? 2012/10/20 4
  • 6. サイバー系 RFinanceFJパッケージで株価取得 library(RFinanceYJ) dna <- quoteStockTsData(‘2432.t’, since=‘2012-01-01’) #SNS mizuho <- quoteStockTsData(‘8411.t’, since=‘2012-01-01’) #金融 sony <- quoteStockTsData(‘6758.t’, since=‘2012-01-01’) #電機 toyota <- quoteStockTsData(‘7203.t’, since=‘2012-01-01’) #自動車 takeda <- quoteStockTsData(‘4502.t’, since=‘2012-01-01’) #製薬 head(dna) #↓以下のようなdata.frame型でデータ取得できる date open height low close volume adj_close 198 2012-01-04 2321 2325 2285 2292 2077200 2292 197 2012-01-05 2288 2290 2217 2222 2882400 2222 196 2012-01-06 2235 2238 2111 2117 5601200 2117 195 2012-01-10 2092 2099 2000 2027 5049000 2027 194 2012-01-11 2005 2060 1891 1899 9326000 1899 193 2012-01-12 1922 1973 1883 1946 11128900 1946 2012/10/20 5
  • 7. サイバー系 自作関数で為替情報取得 #米ドル dollar <- getCurrencyEx(start.dt=‘2012-01-01’, end.dt=Sys.Date()-1) head(dollar) #↓以下のようなdata.frame型でデータ取得できる date open height low close 207 2012-01-02 76.9300 77.1200 76.8399 76.8600 206 2012-01-03 76.8799 76.9599 76.5899 76.6200 205 2012-01-04 76.6900 76.8199 76.5800 76.6699 204 2012-01-05 76.6999 77.2300 76.6500 77.1699 203 2012-01-06 77.1200 77.3199 76.9499 76.9800 202 2012-01-09 76.8899 77.0000 76.7500 76.8300 2012/10/20 6
  • 8. サイバー系 (参考)getCurrencyEx関数_1 getCurrencyEx <- function(start.dt=as.Date(“2012-01-01”), end.dt=(Sys.Date()-1), type=c("d", "w", "m"), currency.from="USD", currency.to="JPY"){ url.str <- paste("http://info.finance.yahoo.co.jp/history/?code=", currency.from, currency.to, "%3DX&sy=", as.POSIXlt(start.dt)$year+1900, "&sm=", as.POSIXlt(start.dt)$mon+1, "&sd=", as.POSIXlt(start.dt)$mday, "&ey=", as.POSIXlt(end.dt)$year+1900, "&em=", as.POSIXlt(end.dt)$mon+1, "&ed=", as.POSIXlt(end.dt)$mday, "&tm=", type[1], sep="") #内部関数_必要データのリンク(ベクトル)を取得 getLinks <- function(url.str){ res.html <- RCurl::getURL(url.str) res.htmlv <- unlist(strsplit(res.html, "¥n")) s.idx <- which(res.htmlv %in% "<!--時系列-->") e.idx <- which(res.htmlv %in% "<!--アフィニティ-->") res.htmlv2 <- res.htmlv[s.idx:e.idx] ts.data <- res.htmlv2[grep("^</tr><tr><td>.*", res.htmlv2)] links <- res.htmlv2[grep("<!--ページング-->", res.htmlv2)] links2 <- unlist(strsplit(links, "[</a>|</span>]<a href=¥¥¥"")) links3 <- links2[grep("^http://.*p=¥¥d¥¥¥" title=", links2)] 2012/10/20 7
  • 9. サイバー系 (参考)getCurrencyEx関数_2 if(length(links3)==0){ return(url.str) }else{ return(c(url.str, unlist(lapply(strsplit(links3, "¥¥¥" title="), function(x){x[1]})))) } } url.links <- getLinks(url.str) #内部関数_urlから必要データ取得 get.tbl <- function(url.str1){ res.html <- RCurl::getURL(url.str1) res.htmlv <- unlist(strsplit(res.html, "¥n")) s.idx <- which(res.htmlv %in% "<!--時系列-->") e.idx <- which(res.htmlv %in% "<!--アフィニティ-->") res.htmlv2 <- res.htmlv[s.idx:e.idx] ts.data <- res.htmlv2[grep("^</tr><tr><td>.*", res.htmlv2)] ts.data2 <- unlist(strsplit(ts.data, "</tr><tr><td>")) ts.data3 <- matrix(unlist(strsplit(ts.data2, "</td><td>")), ncol=5, byrow=TRUE) 2012/10/20 8
  • 10. サイバー系 (参考)getCurrencyEx関数_3 ts.data3[grep("¥¥d+</td>", ts.data3[,5]),5] <- gsub("[</td>|</td></tr><table>]","", ts.data3[grep("¥¥d+</td>", ts.data3[,5]),5]) ts.data3 <- as.data.frame(ts.data3, stringsAsFactors=FALSE) ts.data3[,2] <- as.numeric(ts.data3[,2]); ts.data3[,3] <- as.numeric(ts.data3[,3]) ts.data3[,4] <- as.numeric(ts.data3[,4]); ts.data3[,5] <- as.numeric(ts.data3[,5]) ts.data3[,1] <- as.Date(gsub("日", "", gsub("[年|月]", "-", ts.data3[,1]))) colnames(ts.data3) <- c("date", "open", "height", "low", "close") return(ts.data3) } for(i in 1:length(url.links)){ if(i==1){ ret.tbl <- get.tbl(url.links[i]) }else{ ret.tbl <- rbind(ret.tbl, get.tbl(url.links[i])) } } return(ret.tbl[nrow(ret.tbl):1, ]) } 2012/10/20 9
  • 11. サイバー系 VARについて  VAR(ベクトル自己回帰モデル) 𝑦 𝑡 = 𝑐 + 𝐴1 𝑦 𝑡−1 + 𝐴2 𝑦 𝑡−2 + ・・・ + 𝐴 𝑝 𝑦 𝑡−𝑝 + 𝑒 𝑡  まああれだ、ARの多変量版 p個前の過去データでモデリング これが1x kのベクトルになってて 多変量になってる 壊れるほど愛 しても1/3も伝 わらないって 本当かい!? 2012/10/20 10
  • 12. サイバー系 前述の関数を使って、データを取得してdata.frameに #2432; ディー・エヌ・エー #4502; 武田薬品工業 とりあえず2012年 #6758; ソニー のデータを取得 #7203; トヨタ自動車 #8411; みずほフィナンシャルグループ res.list <- list( dollar=getCurrencyEx(start.dt="2012-01-01", end.dt=Sys.Date()-1), dna=quoteStockTsData('2432.t', since='2012-01-01'), takeda=quoteStockTsData('4502.t', since='2012-01-01'), sony=quoteStockTsData('6758.t', since='2012-01-01'), toyota=quoteStockTsData('7203.t', since='2012-01-01'), mizuho=quoteStockTsData('8411.t', since='2012-01-01') ) #data.frameにするために、必要な項目だけ抽出 res.list2 <- lapply(res.list, function(x){ y <- as.data.frame(matrix(c(as.character(x$date), (x$height+x$low)/2), ncol=2), stringsAsFactors=FALSE); colnames(y) <- c("date", "price"); y$date <- as.Date(y$date); y$price <- as.numeric(y$price); return(y)}) 2012/10/20 11
  • 13. サイバー系 前述の関数を使って、データを取得してdata.frameに #為替相場と株価情報とで共通に存在する日を抽出 for(i in 2:length(res.list2)){ if(i==2){ all.day <- intersect(as.character(res.list2[[i-1]]$date), as.character(res.list2[[i]]$date)) }else{ all.day <- intersect(all.day, as.character(res.list2[[i]]$date)) } } res.list3 <- lapply(res.list2, function(x){x[as.character(x$date) %in% all.day,]}) #listをdata.frameに変換 res.df <- as.data.frame(do.call(cbind, res.list3)) rownames(res.df) <- res.df[,grep(".*¥¥.date", colnames(res.df))[1]] res.df <- res.df[,-grep(".*¥¥.date", colnames(res.df))] 2012/10/20 12
  • 14. サイバー系 こんな感じのdata.frame head(res.df) dollar.price dna.price takeda.price sony.price mizuho.price toyota.price 2012-01-04 76.69995 2305.0 3407.5 1405.5 106.5 2627.0 2012-01-05 76.94000 2253.5 3390.0 1379.0 108.0 2646.0 2012-01-06 77.13490 2174.5 3347.5 1347.5 107.0 2631.5 2012-01-10 76.82000 2049.5 3340.0 1354.0 108.0 2635.0 2012-01-11 76.90995 1975.5 3287.5 1352.5 109.0 2624.0 2012-01-12 76.80995 1928.0 3247.5 1331.0 109.0 2604.5  plot(ts(res.df)) 2012/10/20 13
  • 15. サイバー系 米ドル・株価を増減率に レンジを揃えるために前日からの増減率(-1 ~ 1)に変換 res.diff <- apply(res.df, 2, diff) #前日との差分 res.per <- res.diff/res.df[-1,] #前日からの増減差分 head(res.per) dollar.price dna.price takeda.price sony.price mizuho.price toyota.price 2012-01-05 3.12e-03 -0.022853 -0.00516 -0.01922 0.01389 0.00718 2012-01-06 2.53e-03 -0.036330 -0.01270 -0.02338 -0.00935 -0.00551 2012-01-10 -4.10e-03 -0.060990 -0.00225 0.00480 0.00926 0.00133 2012-01-11 1.17e-03 -0.037459 -0.01597 -0.00111 0.00917 -0.00419 2012-01-12 -1.30e-03 -0.024637 -0.01232 -0.01615 0.00000 -0.00749 2012-01-13 6.51e-05 -0.000779 -0.00776 -0.00301 0.00000 0.01026  plot(ts(res.per)) 2012/10/20 14
  • 16. サイバー系 VARするちょい手前 tseries::adf.test(res.per[,1]) #単位根検定でランダムウォークじゃないことを確認して Augmented Dickey-Fuller Test data: res.diff[, 1] Dickey-Fuller = -9.06, Lag order = 1, p-value = 0.01 alternative hypothesis: stationary 警告メッセージ: In tseries::adf.test(res.diff[, 1], k = 1) : p-value smaller than printed p-value  vars::VARselect(res.per, lag.max=7, type=“const”) #AICを基準に次数決め $selection AIC(n) HQ(n) SC(n) FPE(n) AICにより次数1が最適。 1 1 1 1 つまり1日前のデータから当日のデータを説明するのがベストってこと $criteria 1 2 3 4 5 6 7 AIC(n) 2.64e+01 2.64e+01 2.66e+01 2.68e+01 2.69e+01 2.70e+01 2.71e+01 HQ(n) 2.67e+01 2.69e+01 2.74e+01 2.78e+01 2.82e+01 2.85e+01 2.89e+01 SC(n) 2.71e+01 2.77e+01 2.85e+01 2.93e+01 3.01e+01 3.08e+01 3.15e+01 FPE(n) 2.87e+11 2.90e+11 3.47e+11 4.20e+11 4.99e+11 5.56e+11 6.30e+11 2012/10/20 15
  • 17. サイバー系 VARする var.result <- vars::VAR(res.per, p=1, type=“const”) #次数1ってことでp=1 summary(var.result) #サマる Estimation results for equation dollar.price: ============================================= sony.price = dollar.price.l1 + dna.price.l1 + takeda.price.l1 + sony.price.l1 + mizuho.price.l1 + toyota.price.l1 + const Estimate Std. Error t value Pr(>|t|) dollar.price.l1 1.63397 0.47930 3.41 0.0008 *** dna.price.l1 0.03380 0.04337 0.78 0.4368 takeda.price.l1 0.31132 0.20048 1.55 0.1221 sony.price.l1 0.02458 0.09488 0.26 0.7958 mizuho.price.l1 0.18670 0.16119 1.16 0.2482 toyota.price.l1 -0.20480 0.16619 -1.23 0.2194 const -0.00233 0.00153 -1.52 0.1303 明日のソニー株価価格の増減割合 = 1.6*今日の1ドルの円価格増減割合 + 0.034*今日のDeNA株価の価格増減割合 + 0.31*今日の武田薬品株価の価格増減割合 + 0.024*今日のSony株価の価格増減割合 + 0.19*今日のみずほ株価の価格増減割合 - 0.204*今日のトヨタ株価の価格増減割合 - 0.002 2012/10/20 16
  • 18. サイバー系 VARする_サマる続き Estimation results for equation dollar.price: ============================================= dollar.price = dollar.price.l1 + dna.price.l1 + takeda.price.l1 + sony.price.l1 + mizuho.price.l1 + toyota.price.l1 + const Estimate Std. Error t value Pr(>|t|) dollar.price.l1 2.99e-01 8.14e-02 3.68 0.00031 *** dna.price.l1 4.42e-03 7.37e-03 0.60 0.54932 takeda.price.l1 2.78e-02 3.40e-02 0.82 0.41602 sony.price.l1 -3.51e-03 1.61e-02 -0.22 0.82780 mizuho.price.l1 -1.29e-02 2.74e-02 -0.47 0.63704 toyota.price.l1 -9.32e-03 2.82e-02 -0.33 0.74149 const 7.82e-05 2.60e-04 0.30 0.76416 Estimation results for equation dna.price: ========================================== dna.price = dollar.price.l1 + dna.price.l1 + takeda.price.l1 + sony.price.l1 + mizuho.price.l1 + toyota.price.l1 + const Estimate Std. Error t value Pr(>|t|) dollar.price.l1 -6.47e-01 7.99e-01 -0.81 0.4190 dna.price.l1 2.32e-01 7.23e-02 3.21 0.0015 ** takeda.price.l1 4.20e-01 3.34e-01 1.26 0.2099 sony.price.l1 1.36e-03 1.58e-01 0.01 0.9932 mizuho.price.l1 4.77e-01 2.69e-01 1.78 0.0774 . toyota.price.l1 -3.28e-01 2.77e-01 -1.18 0.2380 const -3.74e-05 2.55e-03 -0.01 0.9883 2012/10/20 17
  • 19. サイバー系 VARする_サマる続き2 Estimation results for equation takeda.price: ============================================= takeda.price = dollar.price.l1 + dna.price.l1 + takeda.price.l1 + sony.price.l1 + mizuho.price.l1 + toyota.price.l1 + const Estimate Std. Error t value Pr(>|t|) dollar.price.l1 0.265242 0.186653 1.42 0.1570 dna.price.l1 0.014896 0.016888 0.88 0.3789 takeda.price.l1 0.212129 0.078074 2.72 0.0072 ** sony.price.l1 -0.001617 0.036948 -0.04 0.9651 mizuho.price.l1 0.010935 0.062772 0.17 0.8619 toyota.price.l1 -0.063850 0.064720 -0.99 0.3251 const 0.000231 0.000597 0.39 0.6998 Estimation results for equation sony.price: =========================================== mizuho.price = dollar.price.l1 + dna.price.l1 + takeda.price.l1 + sony.price.l1 + mizuho.price.l1 + toyota.price.l1 + const Estimate Std. Error t value Pr(>|t|) dollar.price.l1 0.899054 0.309867 2.90 0.0042 ** dna.price.l1 0.012549 0.028036 0.45 0.6549 takeda.price.l1 0.283463 0.129612 2.19 0.0300 * sony.price.l1 -0.069961 0.061338 -1.14 0.2555 mizuho.price.l1 0.240696 0.104209 2.31 0.0220 * toyota.price.l1 -0.212064 0.107443 -1.97 0.0499 * const 0.000314 0.000991 0.32 0.7520 2012/10/20 18
  • 20. サイバー系 VARする_サマる続き3 Estimation results for equation takeda.price: ============================================= toyota.price = dollar.price.l1 + dna.price.l1 + takeda.price.l1 + sony.price.l1 + mizuho.price.l1 + toyota.price.l1 + const Estimate Std. Error t value Pr(>|t|) dollar.price.l1 1.058859 0.316993 3.34 0.001 ** dna.price.l1 0.024938 0.028681 0.87 0.386 takeda.price.l1 0.195947 0.132593 1.48 0.141 sony.price.l1 -0.091743 0.062748 -1.46 0.145 mizuho.price.l1 0.107951 0.106606 1.01 0.313 toyota.price.l1 -0.005723 0.109914 -0.05 0.959 const 0.000186 0.001014 0.18 0.855 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 2012/10/20 19
  • 21. サイバー系 Grangerの因果検定 変数Xが変数Yの予測に効いてるかどうか  MSBVAR::granger.test(res.per, p=1) F-statistic p-value F-statistic p-value dna.price -> dollar.price 1.64e-01 0.686204 dollar.price -> sony.price 1.25e+01 0.000513 takeda.price -> dollar.price 2.61e-01 0.610062 dna.price -> sony.price 4.53e-01 0.501593 sony.price -> dollar.price 2.04e-01 0.652294 takeda.price -> sony.price 3.93e+00 0.048861 mizuho.price -> dollar.price 4.32e-01 0.512008 mizuho.price -> sony.price 3.49e+00 0.063165 toyota.price -> dollar.price 4.47e-01 0.504583 toyota.price -> sony.price 4.24e-01 0.515750 dollar.price -> dna.price 2.23e-01 0.637393 dollar.price -> mizuho.price 4.63e+00 0.032723 takeda.price -> dna.price 2.95e+00 0.087417 dna.price -> mizuho.price 1.38e-04 0.990638 sony.price -> dna.price 2.30e-01 0.632001 takeda.price -> mizuho.price 4.16e+00 0.042698 mizuho.price -> dna.price 2.35e+00 0.127008 sony.price -> mizuho.price 9.26e-01 0.337161 toyota.price -> dna.price 1.42e-03 0.969947 toyota.price -> mizuho.price 2.56e+00 0.111562 dollar.price -> takeda.price 1.18e+00 0.278734 dollar.price -> toyota.price 1.11e+01 0.001057 dna.price -> takeda.price 5.30e-01 0.467283 dna.price -> toyota.price 4.21e-01 0.517454 sony.price -> takeda.price 1.89e-04 0.989043 takeda.price -> toyota.price 2.92e+00 0.089006 mizuho.price -> takeda.price 1.79e-04 0.989350 sony.price -> toyota.price 8.21e-02 0.774766 toyota.price -> takeda.price 1.61e-01 0.688693 mizuho.price -> toyota.price 2.24e+00 0.136206 ホントは多重検定問題によるfalse positive上昇とか注意しないといけないですよ 2012/10/20 20
  • 22. サイバー系 インパルス応答関数 変数Xが変数Yの予測に効いてるかどうか(±どっちに効いてるか)  plot(irf(var.result, impulse="dollar.price", response=c("dna.price", "sony.price", "toyota.price", "takeda.price", "mizuho.price"), boot=TRUE)) 米ドル為替相場がS○ny, T○Y○TA, (若干Miz○h○も)の 株価に与える影響は無視できん感じ 2012/10/20 21
  • 23. サイバー系 VARのモデリングをMCMCで行う MCMCでVARモデリングして何の意味があるの?とか言わない sink("mcmc.jags") cat(" model{ for(t in p+1:T){ Dol[t] ~ dnorm(Dol.mu[t], Dol.tau); Dna[t] ~ dnorm(Dna.mu[t], Dna.tau) Tak[t] ~ dnorm(Tak.mu[t], Tak.tau); Sny[t] ~ dnorm(Sny.mu[t], Sny.tau) Miz[t] ~ dnorm(Miz.mu[t], Miz.tau); Toy[t] ~ dnorm(Toy.mu[t], Toy.tau) Dol.mu[t] <- alp.Dol + beta.Dol2Dol[1]*Dol[t-1] + beta.Dna2Dol[1]*Dna[t-1] + beta.Tak2Dol[1]*Tak[t-1] + beta.Sny2Dol[1]*Sny[t-1] + beta.Toy2Dol[1]*Toy[t-1] + beta.Miz2Dol[1]*Miz[t-1] Dna.mu[t] <- alp.Dna + beta.Dna2Dna[1]*Dna[t-1] + beta.Dol2Dna[1]*Dol[t-1] + beta.Tak2Dna[1]*Tak[t-1] + beta.Sny2Dna[1]*Sny[t-1] + beta.Toy2Dna[1]*Toy[t-1] + beta.Miz2Dna[1]*Miz[t-1] Tak.mu[t] <- alp.Tak + beta.Tak2Tak[1]*Tak[t-1] + beta.Dol2Tak[1]*Dol[t-1] + beta.Dna2Tak[1]*Dna[t-1] + beta.Sny2Tak[1]*Sny[t-1] + beta.Toy2Tak[1]*Toy[t-1] + beta.Miz2Tak[1]*Miz[t-1] Sny.mu[t] <- alp.Sny + beta.Sny2Sny[1]*Sny[t-1] + beta.Dol2Sny[1]*Dol[t-1] + beta.Dna2Sny[1]*Dna[t-1] + beta.Tak2Sny[1]*Tak[t-1] + beta.Toy2Sny[1]*Toy[t-1] + beta.Miz2Sny[1]*Miz[t-1] Toy.mu[t] <- alp.Toy + beta.Toy2Toy[1]*Toy[t-1] + beta.Dol2Toy[1]*Dol[t-1] + beta.Dna2Toy[1]*Dna[t-1] + beta.Tak2Toy[1]*Tak[t-1]+ beta.Sny2Toy[1]*Sny[t-1] + beta.Miz2Toy[1]*Miz[t-1] Miz.mu[t] <- alp.Miz + beta.Miz2Miz[1]*Miz[t-1] + beta.Dol2Miz[1]*Dol[t-1] + beta.Dna2Miz[1]*Dna[t-1] + beta.Tak2Miz[1]*Tak[t-1] + beta.Sny2Miz[1]*Sny[t-1] + beta.Toy2Miz[1]*Toy[t-1] } alp.Dol ~ dnorm(0, 0.001); alp.Sny ~ dnorm(0, 0.001) alp.Toy ~ dnorm(0, 0.001); alp.Dna ~ dnorm(0, 0.001) alp.Tak ~ dnorm(0, 0.001); alp.Miz ~ dnorm(0, 0.001) 2012/10/20 22
  • 24. サイバー系 VARのモデリングをMCMCで行う_2 for(m in 1:p){ #mは次数で今回は1 beta.Dol2Dol[m] ~ dnorm(0,0.001); beta.Sny2Sny[m] ~ dnorm(0,0.001); beta.Toy2Toy[m] ~ dnorm(0,0.001) beta.Dna2Dna[m] ~ dnorm(0,0.001); beta.Tak2Tak[m] ~ dnorm(0,0.001); beta.Miz2Miz[m] ~ dnorm(0,0.001) beta.Sny2Dol[m] ~ dnorm(0,0.001); beta.Sny2Toy[m] ~ dnorm(0,0.001); beta.Sny2Yah[m] ~ dnorm(0,0.001) beta.Sny2Dna[m] ~ dnorm(0,0.001); beta.Sny2Tak[m] ~ dnorm(0,0.001); beta.Sny2Pan[m] ~ dnorm(0,0.001) beta.Sny2Miz[m] ~ dnorm(0,0.001); beta.Sny2Unq[m] ~ dnorm(0,0.001); beta.Dol2Sny[m] ~ dnorm(0,0.001) beta.Dol2Toy[m] ~ dnorm(0,0.001); beta.Dol2Yah[m] ~ dnorm(0,0.001); beta.Dol2Dna[m] ~ dnorm(0,0.001) beta.Dol2Tak[m] ~ dnorm(0,0.001); beta.Dol2Pan[m] ~ dnorm(0,0.001); beta.Dol2Miz[m] ~ dnorm(0,0.001) beta.Dol2Unq[m] ~ dnorm(0,0.001); beta.Toy2Dol[m] ~ dnorm(0,0.001); beta.Toy2Sny[m] ~ dnorm(0,0.001) beta.Toy2Yah[m] ~ dnorm(0,0.001); beta.Toy2Dna[m] ~ dnorm(0,0.001); beta.Toy2Tak[m] ~ dnorm(0,0.001) beta.Toy2Pan[m] ~ dnorm(0,0.001); beta.Toy2Miz[m] ~ dnorm(0,0.001); beta.Toy2Unq[m] ~ dnorm(0,0.001) beta.Dna2Dol[m] ~ dnorm(0,0.001); beta.Dna2Sny[m] ~ dnorm(0,0.001); beta.Dna2Yah[m] ~ dnorm(0,0.001) beta.Dna2Toy[m] ~ dnorm(0,0.001); beta.Dna2Tak[m] ~ dnorm(0,0.001); beta.Dna2Pan[m] ~ dnorm(0,0.001) beta.Dna2Miz[m] ~ dnorm(0,0.001); beta.Dna2Unq[m] ~ dnorm(0,0.001); beta.Tak2Dol[m] ~ dnorm(0,0.001) beta.Tak2Sny[m] ~ dnorm(0,0.001); beta.Tak2Yah[m] ~ dnorm(0,0.001); beta.Tak2Dna[m] ~ dnorm(0,0.001) beta.Tak2Toy[m] ~ dnorm(0,0.001); beta.Tak2Pan[m] ~ dnorm(0,0.001); beta.Tak2Miz[m] ~ dnorm(0,0.001) beta.Tak2Unq[m] ~ dnorm(0,0.001); beta.Miz2Dol[m] ~ dnorm(0,0.001); beta.Miz2Sny[m] ~ dnorm(0,0.001) beta.Miz2Dna[m] ~ dnorm(0,0.001); beta.Miz2Tak[m] ~ dnorm(0,0.001); beta.Miz2Toy[m] ~ dnorm(0,0.001) } Dol.tau ~ dgamma(0.001, 0.001); Sny.tau ~ dgamma(0.001, 0.001); Toy.tau ~ dgamma(0.001, 0.001) Dna.tau ~ dgamma(0.001, 0.001); Tak.tau ~ dgamma(0.001, 0.001); Miz.tau ~ dgamma(0.001, 0.001) } ", fill=TRUE) sink() *betaは二次元配列にすればスッキリ書けるが、結果の見やすさのために冗長に記述した 2012/10/20 23
  • 25. サイバー系 VARのモデリングをMCMCで行う_3 res.per <- as.data.frame(res.per) mc2.res <- jags.model("mcmc.jags", data=list('T'=nrow(res.per), 'Dol'=res.per$dollar.price, 'Sny'=res.per$sony.price, 'Toy'=res.per$toyota.price, 'Dna'=res.per$dna.price, 'Tak'=res.per$takeda.price, 'Miz'=res.per$mizuho.price, 'p'=1), n.chain=3, n.adapt=5000) #次後分布の結果は抜粋 posterior <- coda.samples(mc2.res, c("Sny.tau", "alp.Sny", "beta.Sny2Sny[1]", "beta.Dol2Sny[1]", "beta.Toy2Sny[1]", "beta.Dna2Sny[1]", "beta.Tak2Dna[1]", "beta.Miz2Sny[1]"), 50000) summary(posterior) 1. Empirical mean and standard deviation for each variable, plus standard error of the mean: Mean SD Naive SE Time-series SE Sny.tau 2.21e+03 2.27e+02 5.85e-01 5.86e-01 さっきの計算結果 alp.Sny -2.33e-03 1.56e-03 4.03e-06 4.11e-06 Estimate Std. Error t value Pr(>|t|) beta.Dna2Sny[1] 3.37e-02 4.43e-02 1.14e-04 1.30e-04 const -0.00233 0.00153 -1.52 0.1303 dna.price.l1 0.03380 0.04337 0.78 0.4368 beta.Dol2Sny[1] 1.64e+00 4.87e-01 1.26e-03 1.41e-03 dollar.price.l1 1.63397 0.47930 3.41 0.0008 beta.Miz2Sny[1] 1.87e-01 1.63e-01 4.22e-04 7.40e-04 mizuho.price.l1 0.18670 0.16119 1.16 0.2482 sony.price.l1 0.02458 0.09488 0.26 0.7958 beta.Sny2Sny[1] 2.48e-02 9.64e-02 2.49e-04 3.76e-04 takeda.price.l1 0.31132 0.20048 1.55 0.1221 beta.Tak2Dna[1] 4.22e-01 3.37e-01 8.71e-04 1.00e-03 toyota.price.l1 -0.20480 0.16619 -1.23 0.2194 beta.Toy2Sny[1] -2.05e-01 1.70e-01 4.38e-04 8.13e-04 2012/10/20 24
  • 26. サイバー系 まとめ 1. @yokkunさん作成のRFinanceYJ使って株価データ取得 して 2. 自作の関数使って米ドル⇔円の為替情報取得して 3. VARでモデル化してみました 4. VARはmcmcでモデル化することもできます 2012/10/20 25