#SPX 月次収益率統計モデル その2

データの準備

TERM <- "1972::2024-02"

merge(g20=diff(cli_g20)[TERM],usa=diff(cli_usa)[TERM],g7=diff(cli_g7)[TERM])-> w
merge(w,nfci=as.vector(diff(to.monthly(NFCI)[,4])[TERM]),spx=as.vector(monthlyReturn(GSPC)[TERM])) -> w
w<-last(w,120)
# r <- (lm(w$spx ~ poly(w$nfci,3,raw=T)  + w$g20))
r <- (lm(spx ~ poly(nfci,3,raw=T)  + g20,data.frame(w)))
# as.data.frame(predict(r,interval='p'))[,c(1,2,3)] %>% unlist() %>% as.vector() %>% matrix(.,ncol=3) %>% cbind(w,.) -> w
cbind(w,as.xts(predict(r,interval = 'p'),index(w)) ) -> w
# colnames(w)[c(6,7,8)] <- c('lwr','fit','upr')
colnames(w)[c(6,7,8)] <- c('fit','lwr','upr')

as.data.frame(predict(r,interval='p'))[,c(1,2,3)] %>% unlist() %>% as.vector() %>% matrix(.,ncol=3) %>% cbind(w,.) -> w

# は以下のようにしても良いかもしれない。

cbind(w,as.vector(predict(r,interval = 'p')[,1]),as.vector(predict(r,interval = 'p')[,2]),as.vector(predict(r,interval = 'p')[,3]) )

そもそもwはオブジェクトでそのタイムゾーンはUTCがセットされている。ところがpredcit(r)をそのままxtsに変換すると元のデータに影響されてJSTがインデックスデータとなりそれがバインド時の日付不一致を引き起こす。

> as.xts(predict(r)) %>% index() %>% head()
[1] "2014-04-01 JST" "2014-05-01 JST" "2014-06-01 JST" "2014-07-01 JST" "2014-08-01 JST"
[6] "2014-09-01 JST"

そこで、インデックスをwから借用しデータの変換を行う。そうすればインデックスの同期が取れるので余計なデータ操作なしでデータを統合できる。

cbind(w,as.xts(predict(r,interval = 'p'),index(w)) )

作成されたデータ

> head(w)
               g20     usa      g7     nfci          spx           fit         lwr        upr
2014-04-01 -0.0145  0.0577 -0.0210  0.00691  0.006200789  0.0079035368 -0.05846891 0.07427599
2014-05-01 -0.0160  0.0509 -0.0390 -0.02492  0.021030280  0.0226361026 -0.04379053 0.08906274
2014-06-01 -0.0162  0.0374 -0.0516 -0.00201  0.019058332  0.0120911721 -0.05427816 0.07846051
2014-07-01 -0.0142  0.0188 -0.0597  0.04239 -0.015079831 -0.0089385896 -0.07546959 0.05759241
2014-08-01 -0.0123  0.0027 -0.0597  0.02339  0.037655296  0.0001021594 -0.06631484 0.06651915
2014-09-01 -0.0101 -0.0121 -0.0520  0.05519 -0.015513837 -0.0151286265 -0.08177599 0.05151874

検証結果

> w[w$spx < w$lwr,]
                g20      usa       g7     nfci         spx          fit         lwr        upr
2018-12-01 -0.11161 -0.22513 -0.19228  0.04457 -0.09177689 -0.008917332 -0.07545223 0.05761756
2022-04-01 -0.23788 -0.24420 -0.31910  0.04553 -0.08795671 -0.007995872 -0.07453918 0.05854744
2022-12-01  0.07517 -0.05791  0.01104 -0.03313 -0.05897147  0.025353068 -0.04110877 0.09181491
> dim(w)
[1] 120   8

> w[w$spx > w$upr,]
                g20      usa       g7     nfci        spx          fit         lwr         upr
2020-11-01  0.29763  0.39870  0.29321 -0.06706 0.10754564  0.037827139 -0.02889918 0.104553454
2021-10-01 -0.10270 -0.04210 -0.06490  0.02070 0.06914384  0.002366807 -0.06403502 0.068768639
2023-03-01  0.13092  0.00729  0.05067  0.14426 0.03505161 -0.059399801 -0.12774449 0.008944886

この記事が気に入ったらサポートをしてみませんか?