SPX 四半期理論価格モデル
EPSを利用する場合
ケース1
eps+各種マクロデータ+OECDによるG20 composite leading indicator を説明変数とした。
G20 composite leading indicatorは10ヶ月前の値との差を説明変数として使用する。
上記の結果生成されたオブジェクトを利用して任意のデータを利用して予測値を計算する。
lmdf <- data.frame(spx=apply.quarterly(SP5[,4][k2k],mean),eps=eps_year_xts[k2k],pa=apply.quarterly(PA[k2k],mean),cs=apply.quarterly(CS[k2k],mean), uc=apply.quarterly(UC[k2k],mean),cli=apply.quarterly(diff(CLI,lag=10)[k2k],mean) )
colnames(lmdf) <- c('spx','eps','pa','cs','uc','cli')
r <- lm(spx ~ eps + pa + cs + uc + cli, lmdf )
predict(r,newdata=data.frame(eps=eps_year_xts["2024-01-01"],pa=as.vector(last(PI)), cs=as.vector(last(CS)),uc=as.vector(last(UC),),cli=as.vector(last(diff(cli_g20,10)) )) ,interval='prediction',level=0.95)
ケース2
ケース1に対して式に序数を1項目追加した。これはeps_lm.r のモデルに倣った。
計算対象範囲を直近56四半期に絞った。
lmdf <- data.frame(spx=apply.quarterly(SP5[,4][k2k],mean),eps=eps_year_xts[k2k],pa=apply.quarterly(PA[k2k],mean),cs=apply.quarterly(CS[k2k],mean), uc=apply.quarterly(UC[k2k],mean),cli=apply.quarterly(diff(CLI,lag=10)[k2k],mean) )
colnames(lmdf) <- c('spx','eps','pa','cs','uc','cli')
last(lmdf,56) -> lmdf
cbind(lmdf,num=seq(1,dim(lmdf)[1],1)) -> lmdf
r <- lm(spx ~ eps + pa + cs + uc + cli + num, lmdf )
summary(r)
predict(r,newdata=data.frame(eps=192,pa=as.vector(last(PI)), cs=as.vector(last(CS)),uc=as.vector(last(UC),),cli=as.vector(last(diff(cli_g20,10)) ),num=57) ,interval='prediction',level=0.95)
# UPDATED Ver.
# eps_year_xts[as.character(year(Sys.Date()))][quarter(Sys.Date())]
# predict(r,newdata=data.frame(eps=eps_year_xts[substr(Sys.Date(),1,7)],pa=as.vector(last(PI)*(1+last(monthlyReturn(PI)))), cs=as.vector(last(CS)),uc=as.vector(last(UC)*(1+last(monthlyReturn(UC)))),cli=as.vector(last(diff(cli_g20,10)) ),num=57) ,interval='prediction',level=0.95)
predict(r,newdata=data.frame(eps=eps_year_xts[as.character(year(Sys.Date()))][quarter(Sys.Date())],pa=as.vector(last(PI)*(1+last(monthlyReturn(PI)))), cs=as.vector(last(CS)),uc=as.vector(last(UC)*(1+last(monthlyReturn(UC)))),cli=as.vector(last(diff(cli_g20,10)) ),num=57) ,interval='prediction',level=0.95)
GDPを使用する場合
eps の代わりに名目gdpを使用する。
式の妥当性については要検証。
PAq <- apply.quarterly(PA[k2k],mean)
UCq <- apply.quarterly(UC[k2k],mean)
CSq <- apply.quarterly(CS[k2k],mean)
lmdf <- data.frame(spx=apply.quarterly(SP5[k2k],mean)[,1],pa=PAq,uc=UCq,cs=CSq,cli=apply.quarterly(diff(CLI,lag=10)[k2k],mean),G[k2k])
colnames(lmdf) <- c('spx','pa','uc','cs','cli','g')
last(lmdf,56) -> lmdf
# result.gpuc <<- lm(apply.quarterly(SP5[k2k],mean)[,1] ~ PAq[k2k] * UCq[k2k] * G[k2k]*CSq[k2k] - UCq[k2k] -G[k2k] - PAq[k2k]*G[k2k] - UCq[k2k]*G[k2k]*CSq[k2k])
result.gpuc <<- lm(spx ~ pa * uc * g * cs - uc - g - pa*g - uc * g * cs,lmdf)
predict(result.gpuc,newdata = data.frame(pa=last(lmdf$pa)+last(diff(lmdf$pa)), uc=last(lmdf$uc)+last(diff(lmdf$uc)),cs=last(lmdf$cs)+last(diff(lmdf$cs)),g=last(lmdf$g)+last(diff(lmdf$g)) ) ,interval='prediction',level=0.95)
この記事が気に入ったらサポートをしてみませんか?