Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

4,884 views

Published on

第27回Tokyo.Rでの発表資料です

Published in: Education
  • Be the first to comment

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

  1. 1. Rで触れる日本の経済 ~RでVAR編~ 2012/10/20 Tokyo.R#27 和田 計也サイバー系
  2. 2. サイバー系 はじめに ※この発表は個人の 見解であり、所属す る組織の公式見解で はありません。2012/10/20 1
  3. 3. サイバー系 自己紹介  和田 計也(@wdkz)  静岡県袋井市出身  サイバー系企業でデータマイニングエンジニア職  最近は奥華子ばっか聴いてます  前職はバイオベンチャー  バイオマーカ探索してた  学生時代は枯草菌の研究2012/10/20 2
  4. 4. サイバー系 最近の株価と為替相場  企業のグローバル化(仮)に伴って、円高(為替)が株価に与える 影響が大きい昨今なんじゃないかと思ってみたり2012/10/20 3
  5. 5. サイバー系 今日のお話  企業の株価はYFinaceYJパッケージで取得  Tokyo.R主催者作  ドル⇔円の為替相場はYahoo! Japanからとってくる  自作  VAR(ベクトル自己回帰モデル)でモデル化  米ドル⇔円の為替相場に影響されてる株はどれかな?2012/10/20 4
  6. 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 19462012/10/20 5
  7. 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.83002012/10/20 6
  8. 8. サイバー系 (参考)getCurrencyEx関数_1getCurrencyEx <- 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. 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. 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. 11. サイバー系 VARについて VAR(ベクトル自己回帰モデル) 𝑦 𝑡 = 𝑐 + 𝐴1 𝑦 𝑡−1 + 𝐴2 𝑦 𝑡−2 + ・・・ + 𝐴 𝑝 𝑦 𝑡−𝑝 + 𝑒 𝑡  まああれだ、ARの多変量版 p個前の過去データでモデリング これが1x kのベクトルになってて 多変量になってる 壊れるほど愛 しても1/3も伝 わらないって 本当かい!?2012/10/20 10
  12. 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. 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. 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. 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. 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+112012/10/20 15
  17. 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.0022012/10/20 16
  18. 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.98832012/10/20 17
  19. 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.75202012/10/20 18
  20. 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 ‘ ’ 12012/10/20 19
  21. 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. 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. 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. 24. サイバー系 VARのモデリングをMCMCで行う_2for(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. 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 SESny.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.4368beta.Dol2Sny[1] 1.64e+00 4.87e-01 1.26e-03 1.41e-03 dollar.price.l1 1.63397 0.47930 3.41 0.0008beta.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.7958beta.Sny2Sny[1] 2.48e-02 9.64e-02 2.49e-04 3.76e-04 takeda.price.l1 0.31132 0.20048 1.55 0.1221beta.Tak2Dna[1] 4.22e-01 3.37e-01 8.71e-04 1.00e-03 toyota.price.l1 -0.20480 0.16619 -1.23 0.2194beta.Toy2Sny[1] -2.05e-01 1.70e-01 4.38e-04 8.13e-042012/10/20 24
  26. 26. サイバー系 まとめ 1. @yokkunさん作成のRFinanceYJ使って株価データ取得 して 2. 自作の関数使って米ドル⇔円の為替情報取得して 3. VARでモデル化してみました 4. VARはmcmcでモデル化することもできます2012/10/20 25

×