More Related Content
Viewers also liked (20)
PDF
マーケティングサイエンス徹底入門と実践Part2宏喜 佐野
PDF
R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜機会学習・データビジュアライゼーション事始め〜Yasuyuki Sugai
PDF
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる R言語によるクラスター分析 - 似ているものをグループ化する-Koichi Hamada
PDF
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング宏喜 佐野
PDF
はじめよう多変量解析~主成分分析編~宏喜 佐野
Similar to Rで触れる日本経済~RでVAR編~ (20)
PPT
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと Haruka Ozaki
PDF
Yamadai.R チュートリアルセッション考司 小杉
PDF
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門Koichi Hamada
PDF
経済学のための実践的データ分析2. python, R, Jupyter notebook 事始め/統計ソフトちゃんちゃかちゃんYasushi Hara
More from Kazuya Wada (13)
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