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)


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