Rでインデックス・ポートフォリオを構築する

先週金曜日のゼミでマーケットポートフォリオを少ない銘柄で近似するインデックス・ポートフォリオの作成を学習しました。参考にした文献は


金融・証券数量分析入門
金融・証券数量分析入門刈屋 武昭 佃 良彦
Amazonで詳しく見る
by G-Tools


ExcelとRで二次計画法の問題を解くことにより、インデックス・ポートフォリオを構築しました。利用したRのプログラムは以下の通り。

# CSV形式のデータ読み込み。1行目は変数名、1列目は年月、2列目は市場収益率、3列目以降に企業の収益率
dat <- as.matrix(read.csv("indexportfolio.csv",row.names=1))
mret <- dat[,1]
cret <- dat[,-1]

#マーケットモデルの推定
olsres <- lm(cret ~ mret)

#回帰係数の保存
alpha <- olsres$coef[1,]
beta <- olsres$coef[2,]


# OLS から得られる残差の分散共分散行列を求める
covmat <- cov(olsres$residual)

# 企業数
n <- dim(cret)[2]

# 二次計画法に使う制約条件行列
imat <- matrix(0,nrow=n,ncol=n)
diag(imat) <- 1
Amat <- cbind(rep(1,n),alpha,beta,imat)

dvec <- rep(0,n)

# ウエイトの合計は1, alpha' * bvec = 0, beta' * bvec = 1, 各ウエイトは非負値
bvec <- c(1,0,1, rep(0,n))

# 二次計画法の実行
solve.QP(covmat,dvec,Amat,bvec=bvec,meq=3)

このプログラムを実行するには以下のようなフォーマットのデータファイル indexportfolio.csv が必要です。

,JSRI,3402,3407,5001,5802,6701,6752,7011,7203,8031,8751,8803,9101
Jan-85,2,1.1,-3.1,1.6,-2.6,0,1.9,-10.6,9.8,-3.8,-1,4.2,-12.5
Feb-85,5,-2,0.7,-2,0.1,-0.8,1.9,3.4,-2.2,-0.9,16.9,0.8,2.1
Mar-85,2.7,20.2,26.9,14.3,-4.6,-10.4,-7.4,14.6,-3.8,4.4,4.2,35,3.7
Apr-85,-3.2,-14.2,0.7,-2.3,-0.8,0,-0.7,-5.4,4,-2.1,-7.8,-7.2,-0.4
...
...

データファイルの1行目は各列の説明をあらわします。
1列目は収益率の年月、2列目は市場収益率、3列目以降が各銘柄の収益率です。
これを CSV 形式のファイルで上記プログラムを実行させると、インデックス・ポートフォリオ
ウエイトが求められます。

#上述の文献、もう絶版なんですね。。。