GPIFの運用(2015年度)(訂正)

ggplot2,quantmod , cowplot パッケージ 他

増減率の計算式に間違いがありました。

次の記事「GPIFの運用(2015年度)(その2)」では説明変数を変更しました。

(参考)
年金、5兆円損失の見通し 運用法人、株積極投資が裏目に
(GPIFの運用に詳しい専門家の試算)
二〇一五年度、独立行政法人「GPIF」が約五兆一千億円の損失
内訳

マイナス金利で国内債券ファンドの基準価額はどうなるか?

  • 日銀がマイナス金利の導入を発表した29日を境として、基準価額が大きく上昇

自分なりに試算してみた

(注意)GPIFのデータはサイトのpdfを見て手入力したので間違いがあるかもしれません。

(データ)
運用状況
バックナンバー(運用状況)

GPIFのデータ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#市場運用分の資産構成の推移(単位:億円)
GPIF<-data.frame(
年度=c("平成18年度","平成19年度","平成20年度","平成21年度","平成22年度","平成23年度","平成24年度","平成25年度","平成26年度"),
国内債券=c(441997,569443,618887,623923,592522,584785,637830,620364,516915),
国内株式=c(190676,137923,113986,147497,134154,141992,175575,208466,316704),
外国債券=c(90694,96641,100135,101449,94283,99301,117896,139961,181815),
外国株式=c(126376,109057,90781,132523,130919,130205,148758,197326,300772)
)
#
#資産別収益率(四半期別)の状況
#2009年第1四半期から2015年第3四半期まで
国内債券<-c(0.62,0.84,0.58,-0.07,2.29,1.1,-0.81,-0.61,1.11,1.06,0.38,0.34,1.04,0.49,-0.06,2.17,-1.48,1.18,0.18,0.74,0.72,0.53,1.88,-0.38,-0.1,0.6,0.75)
国内株式<-c(20.55,-1.34,-0.18,8.99,-13.93,-0.63,8.71,-2.17,-2.06,-9.75,-3.97,18.49,-9.83,-3.43,16.71,21.42,9.7,6.07,9.19,-7.05,5.11,5.78,6.2,10.51,5.89,-12.78,9.92)
外国債券<-c(1.68,-2.24,2.91,-0.95,-7.51,2.29,-5.97,4.47,0.4,-4.27,-0.53,9.58,-3.46,0.56,13.62,7.26,4.01,1.64,8.16,0.51,0.55,5.51,9.36,-2.86,0.65,-1.26,-1.1)
外国株式<-c(17.64,10.32,9.13,3.16,-17.43,8.34,5.55,8.23,-1.81,-21.36,8.76,19.64,-7.55,4.87,13.78,16.87,6.14,7.13,16.23,-0.13,3.06,5.64,10.32,1.81,2.38,-10.97,5.28)

GPIFのデータをプロット

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
library(xts)
library(quantmod)
library(reshape2)
library(ggplot2)
library(ggfortify)
library(gridExtra)
library(scales)
#
GPIF.melt<-melt(GPIF)
#
options(scipen=10)
#png("gpif09.png",width=640)
ggplot(GPIF.melt)+
geom_line(aes(x=年度,y=value,group=variable,colour=variable),size=2)+
geom_point(aes(x=年度,y=value,group=variable,colour=variable),size=4)+
#scalesパッケージを使うと簡単に3桁区切りコンマを付けることができる
scale_y_continuous(expand = c(0,0), limits = c(0,max(GPIF.melt$value)*1.05),labels=comma)+
labs(colour="資産",y="",title="市場運用分の資産構成の推移(単位:億円)")
#dev.off()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#png("gpif08.png")
gp<-as.xts(ts(data.frame(国内債券,国内株式,外国債券,外国株式),start=c(2009,1),freq=4))
p1<-autoplot(gp[,1],geom="bar")+labs(title=names(gp)[1])
p2<-autoplot(gp[,2],geom="bar")+labs(title=names(gp)[2])
p3<-autoplot(gp[,3],geom="bar")+labs(title=names(gp)[3])
p4<-autoplot(gp[,4],geom="bar")+labs(title=names(gp)[4])
grid.arrange(p1,p2,p3,p4,ncol=1)
#dev.off()
#
yl<-max(max(gp),abs(min(gp)))
#png("gpif08_02.png")
p1<-autoplot(gp[,1],geom="bar")+labs(title=names(gp)[1])+ylim(-yl,yl)
p2<-autoplot(gp[,2],geom="bar")+labs(title=names(gp)[2])+ylim(-yl,yl)
p3<-autoplot(gp[,3],geom="bar")+labs(title=names(gp)[3])+ylim(-yl,yl)
p4<-autoplot(gp[,4],geom="bar")+labs(title=names(gp)[4])+ylim(-yl,yl)
grid.arrange(p1,p2,p3,p4,ncol=1)
#dev.off()

増減率の上限下限を4つとも等しくした。

  • 国内債券の増減率の振れ幅が他に比べてかなり小さいことが分かる。

GPIFの運用資産のベンチマーク

国内株式
  • TOPIX(配当込み)
外国株式
  • MSCI KOKUSAI(円ベース、配当込み、管理運用法人の配当課税要因考慮後)、
  • MSCI EMERGING MARKETS( 円ベース、配当込み、税引き後)
  • MSCI ACWI(除く日本、円ベース、配当込み、管理運用法人の配当課税要因考慮後)の複合インデックス

(試算に用いたデータ)
国内株式、外国株式については Yahoo Finance(com)から入手できる(quantmod::getSymbols 関数を使用)
-「Nikkei225」
-「iShares MSCI Kokusai (TOK) に USD/JPY をかけて円ベースにしたもの」で代用

国内債券
  • NOMURA-BPI「除くABS」
  • NOMURA-BPI国債
  • NOMURA-BPI/GPIF Customizedの複合インデックス
外国債券
  • シティ世界国債インデックス(除く日本、ヘッジなし・円ベース。以下同じ。)
  • 世界BIG債券インデックス(除く日本円、ヘッジなし・円ベース。以下同じ。)の複合インデックス

(試算に用いたデータ)
国内債券、外国債券については「モーニングスターのサイト」からダウンロードしたデータを使います。

SMT 国内債券インデックス・オープンの基準価額
2008/4/1 から 2015/3/31 月末ベース

SMT グローバル債券インデックス
2008/4/1 から 2015/3/31 月末ベース

国内株式、外国株式の試算に用いるデータをダウンロード、プロット

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
### USDJPY
USDJPY<-getSymbols("JPY=X",auto.assign = FALSE,from ="2008-04-01")
#USDJPY[,"JPY=X.Close"]
### Nikkei225
getSymbols('^N225',from ="2008-04-01")
#N225[,"N225.Close"]
### iShares MSCI Kokusai (TOK)
getSymbols('TOK',from ="2008-04-01" )
#TOK[,"TOK.Close"]
#N225データ(close)、USD/JPY(close)、TOK(close)のデータをマージする
#欠損値は前日のデータで補間する
data.xts<-na.locf(merge(N225[,"N225.Close"],USDJPY[,"JPY=X.Close"],TOK[,"TOK.Close"]))
p1<-autoplot(data.xts[,"N225.Close"])+labs(x="",y="",title="Nikkei225(2008-04-01 _ 2016-04-05)")
p2<-autoplot(data.xts[,"JPY.X.Close"])+labs(x="",y="",title="USD/JPY(2008-04-01 _ 2016-04-05)")
p3<-autoplot(data.xts[,"TOK.Close"] * data.xts[,"JPY.X.Close"])+labs(x="",y="",title="iShares MSCI Kokusai (Unit : JPY)(2008-04-01 _ 2016-04-05)")
#png("gpif01.png")
grid.arrange(p1,p2,p3,ncol=1)
#dev.off()

平成27年度のGPIFの損益額を試算する。

平成27年度第4四半期の各資産の損益率を計算する。

国内株式

1
2
3
4
5
6
7
8
9
zougen<-rep(NA,4)
#四半期末のデータを取得
#N225データ(close)
index.quarterlast<-endpoints(N225[,"N225.Close"],on="quarters")
NI<-ts(coredata(N225[,"N225.Close"][index.quarterlast]),start=c(2008,1),freq=4)
#
dat<-as.vector(window(NI,start=c(2008,4),end=c(2015,3)))
#前期比増減率
growth.nikkei<-(dat[2:length(dat)]-dat[1:length(dat)-1])/dat[1:length(dat)-1]*100

説明変数(N225データ)の増減率が0のときには目的変数(GPIFの国内株式)の増減率も0とします。(切片0)

(理由)
切片がマイナスだとすると、説明変数の増減率がずーーーっと0だとしても、目的変数の増減率がずーーーっとマイナス。
国内株式の額が下がりつづけることになる。切片がプラスの場合は国内株式の額が上がりつづけることになる。

1
2
3
4
5
6
#切片0
res<-lm(国内株式~growth.nikkei + 0)
res$coefficients
# 0.9413127
summary(res)$r.squared
#[1] 0.9659367

N225の増減率とGPIFの国内株式の増減率の関係を視覚化

(参考)
ggplot2: Adding Regression Line Equation and R2 on graph

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#グラフ中に回帰式と決定係数を書き込むために関数を定義する。
#切片は0とするので参考にしたサイトの関数を一部変更した。
lm_eqn <- function(m){
eq <- substitute(italic(y) == a %.% italic(x)*" , "~~italic(R)^2~"="~r2,
list(a = format(coef(m), digits = 3),
r2 = format(summary(m)$r.squared, digits = 3)))
as.character(as.expression(eq));
}
#png("gpif03.png")
ggplot(data.frame(growth.nikkei,国内株式),aes(growth.nikkei,国内株式))+
geom_point() +
geom_abline(intercept =0 , slope = res$coefficients,colour="red",size=1.2) +
geom_text(x = -17, y = 20, label = lm_eqn(res), parse = TRUE,hjust=0,size=5) +
labs(title="前期比増減率(N225とGPIFの国内株式)")
#dev.off()

(グラフは省略)

cowplot パッケージを使います。
1
2
3
4
5
6
7
8
9
10
11
12
library(cowplot)
theme_set(theme_grey(base_family = "TakaoExMincho"))
p<-ggplot(data.frame(growth.nikkei,国内株式),aes(growth.nikkei,国内株式))+
geom_point() +
geom_abline(intercept =0 , slope = res$coefficients,colour="red",size=1.2) +
labs(title="前期比増減率(N225とGPIFの国内株式)")
label <- substitute(italic(y) == a %.% italic(x)*" , "~~italic(R)^2~"="~r2,
list(a = signif(coef(res),3),r2 = signif(summary(res)$r.squared,3)))
# adding label via ggdraw, in the ggdraw coordinates
#png("gpif03.png")
ggdraw(p) + draw_label(label, .15, .88,hjust=0)
#dev.off()

1
2
3
4
5
6
7
8
9
#日経平均株価の2015年第3四半期から2015年第4四半期の増減率から
#GPIFの国内株式の2015年第3四半期から2015年第4四半期の増減率を推定し、
#増減額を試算する。
#
dat<-as.vector(window(NI,start=c(2015,3),end=c(2015,4)))
#(今期-前期)÷前期 ×100
( zougen[2]<-(dat[2]-dat[1])/dat[1] *100 )
#前期比増減率
( zougen[2]<-zougen[2] * res$coefficients )

外国株式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#USD/JPY(close)
index.quarterlast<-endpoints(USDJPY[,"JPY=X.Close"],on="quarters")
UJ<-ts(coredata(USDJPY[,"JPY=X.Close"][index.quarterlast]),start=c(2008,1),freq=4)
#
#getSymbols('TOK',from ="2008-04-01" )
index.quarterlast<-endpoints(TOK[,"TOK.Close"],on="quarters")
TO<-ts(coredata(TOK[,"TOK.Close"][index.quarterlast]),start=c(2008,1),freq=4)
#
dat<-as.vector(window(TO,start=c(2008,4),end=c(2015,3)) * window(UJ,start=c(2008,4),end=c(2015,3)))
#
#前四半期比増減率
growth.TOK<-(dat[2:length(dat)]-dat[1:length(dat)-1])/dat[1:length(dat)-1]*100
#切片0
res<-lm(外国株式~growth.TOK+0)
res$coefficients
# 1.012108
summary(res)$r.squared
# 0.9798274
#
p<-ggplot(data.frame(growth.TOK,外国株式),aes(growth.TOK,外国株式))+
geom_point() +
geom_abline(intercept =0 , slope = res$coefficients,colour="red",size=1.2) +
labs(title="前期比増減率(iShares MSCI KokusaiとGPIFの外国株式)")
label <- substitute(italic(y) == a %.% italic(x)*" , "~~italic(R)^2~"="~r2,
list(a = signif(coef(res),3),r2 = signif(summary(res)$r.squared,3)))
# adding label via ggdraw, in the ggdraw coordinates
#png("gpif05.png")
ggdraw(p) + draw_label(label, .15, .88,hjust=0)
#dev.off()
#
#USD/JPY 増減率をかける
dat<-as.vector(window(TO,start=c(2015,3),end=c(2015,4)) * window(UJ,start=c(2015,3),end=c(2015,4)))
#(今期-前期)÷前期 ×100
( zougen[4]<-(dat[2]-dat[1])/dat[1] *100 )
#前期比増減率
( zougen[4]<-zougen[4] * res$coefficients )

国内債券

1
2
3
4
5
6
7
8
#x<-scan("clipboard")
#index.quarterlast<-endpoints(as.xts(ts(x,start=c(2008,4),freq=12)),on="quarters")
#SMT<-ts(coredata(as.xts(ts(x,start=c(2008,4),freq=12))[index.quarterlast]),start=c(2008,1),freq=4)
#
#library(ggfortify)
#png("gpif06.png")
#autoplot(ts(x,start=c(2008,4),freq=12),size=2)+labs(title="SMT 国内債券インデックス・オープンの基準価額(2008/4 _ 2016/3)")
#dev.off()

  • 日銀のマイナス金利の導入によって基準価額が大きく上昇したのがわかります。(でも、上がったものは必ず下がる!)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
SMT<-ts(c(9963,10042,10280,10196,10248,10326,10372,10351,10574,10674,10578,10494,10596,
10696,10729,10757,10860,10907,10888,11118,10932,11055,11063,11139,11211,11261,11487,
11423,11391,11464,11565,11993),start=c(2008,1),freq=4)
#
dat<-as.vector(window(SMT,start=c(2008,4),end=c(2015,3)))
#前期比増減率
growth.SMT<-(dat[2:length(dat)]-dat[1:length(dat)-1])/dat[1:length(dat)-1]*100
#切片0
res<-lm(国内債券~growth.SMT + 0)
res$coefficients
# 1.006642
summary(res)$r.squared
# 0.9862503
#
p<-ggplot(data.frame(growth.SMT,国内債券),aes(growth.SMT,国内債券))+
geom_point() +
geom_abline(intercept =0 , slope = res$coefficients,colour="red",size=1.2) +
labs(title="前期比増減率(SMT 国内債券インデックス・オープンとGPIFの国内債券)")
label <- substitute(italic(y) == a %.% italic(x)*" , "~~italic(R)^2~"="~r2,
list(a = signif(coef(res),3),r2 = signif(summary(res)$r.squared,3)))
# adding label via ggdraw, in the ggdraw coordinates
#png("gpif07.png")
ggdraw(p) + draw_label(label, .15, .88,hjust=0)
#dev.off()
#
dat<-as.vector(window(SMT,start=c(2015,3),end=c(2015,4)))
#(今期-前期)÷前期 ×100
( zougen[1]<-(dat[2]-dat[1])/dat[1] *100 )
#前期比増減率
( zougen[1]<-zougen[1] * res$coefficients )

外国債券

1
2
3
4
5
6
7
8
#x<-scan("clipboard")
#index.quarterlast<-endpoints(as.xts(ts(x,start=c(2008,4),freq=12)),on="quarters")
#SMT<-ts(coredata(as.xts(ts(x,start=c(2008,4),freq=12))[index.quarterlast]),start=c(2008,1),freq=4)
#
#library(ggfortify)
#png("gpif10.png")
#autoplot(ts(x,start=c(2008,4),freq=12),size=2)+labs(title="SMT グローバル債券インデックスの基準価額(2008/4 _ 2016/3)")
#dev.off()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
SMT_gs<-ts(c(10125,9549,8605,8877,9082,8909,8949,8830,8177,8423,7819,8226,8217,7863,7892,8556,8098,8248,9399,10017,
10348,10510,11415,11447,11486,12100,13273,12842,12891,12801,12604,12352),start=c(2008,1),freq=4)
#
dat<-as.vector(window(SMT_gs,start=c(2008,4),end=c(2015,3)))
#前四半期比増減率
growth.SMT_gs<-(dat[2:length(dat)]-dat[1:length(dat)-1])/dat[1:length(dat)-1]*100
#
#切片0
res<-lm(外国債券~growth.SMT_gs + 0)
res$coefficients
# 0.9694537
summary(res)$r.squared
# 0.9740118
#
p<-ggplot(data.frame(growth.SMT_gs,外国債券),aes(growth.SMT_gs,外国債券))+
geom_point() +
geom_abline(intercept =0 , slope = res$coefficients,colour="red",size=1.2) +
labs(title="前期比増減率(SMT グローバル債券インデックスとGPIFの外国債券)")
label <- substitute(italic(y) == a %.% italic(x)*" , "~~italic(R)^2~"="~r2,
list(a = signif(coef(res),3),r2 = signif(summary(res)$r.squared,3)))
# adding label via ggdraw, in the ggdraw coordinates
#png("gpif04.png")
ggdraw(p) + draw_label(label, .15, .88,hjust=0)
#dev.off()
#
dat<-as.vector(window(SMT_gs,start=c(2015,3),end=c(2015,4)))
#(今期-前期)÷前期 ×100
( zougen[3]<-(dat[2]-dat[1])/dat[1] *100 )
#前期比増減率
( zougen[3]<-zougen[3] * res$coefficients )

1
2
zougen
# 3.725403 -11.251222 -1.938292 -6.719794

試算

(試算1) 平成27年度(2015)には資産の売買をしていないと仮定する

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
( g2014<-tail(GPIF,1)[2:5] )
( z2015<-data.frame(coredata(gp["2015"])) )
#
g2015<-rep(NA,4)
#
# pipeR パッケージと使わないやり方
library(pipeR)
#
#国内債券
#( g2015[1]<-as.vector(as.matrix((((g2014[1]*(1+z2015[1,1]/100)*(1+z2015[2,1]/100))*(1+z2015[3,1]/100)))*(1+zougen[1]/100))) )
#
{ g2014[1]*(1+z2015[1,1]/100) } %>>%
{.*(1+z2015[2,1]/100)} %>>%
{.*(1+z2015[3,1]/100)} %>>%
{.*(1+zougen[1]/100) } %>>%
{ as.vector(as.matrix(.)) } %>>%
(~temp)
g2015[1]<-temp
#
#国内株式
#( g2015[2]<-as.vector(as.matrix((((g2014[2]*(1+z2015[1,2]/100)*(1+z2015[2,2]/100))*(1+z2015[3,2]/100)))*(1+zougen[2]/100))) )
#
{ g2014[2]*(1+z2015[1,2]/100) } %>>%
{.*(1+z2015[2,2]/100)} %>>%
{.*(1+z2015[3,2]/100)} %>>%
{.*(1+zougen[2]/100) } %>>%
{ as.vector(as.matrix(.)) } %>>%
(~temp)
g2015[2]<-temp
#
#外国債券
#( g2015[3]<-as.vector(as.matrix((((g2014[3]*(1+z2015[1,3]/100)*(1+z2015[2,3]/100))*(1+z2015[3,3]/100)))*(1+zougen[3]/100))) )
#
{ g2014[3]*(1+z2015[1,3]/100) } %>>%
{.*(1+z2015[2,3]/100)} %>>%
{.*(1+z2015[3,3]/100)} %>>%
{.*(1+zougen[3]/100) } %>>%
{ as.vector(as.matrix(.)) } %>>%
(~temp)
g2015[3]<-temp
#
#外国株式
#( g2015[4]<-as.vector(as.matrix((((g2014[4]*(1+z2015[1,4]/100)*(1+z2015[2,4]/100))*(1+z2015[3,4]/100)))*(1+zougen[4]/100))) )
#
{ g2014[4]*(1+z2015[1,4]/100) } %>>%
{.*(1+z2015[2,4]/100)} %>>%
{.*(1+z2015[3,4]/100)} %>>%
{.*(1+zougen[4]/100) } %>>%
{ as.vector(as.matrix(.)) } %>>%
(~temp)
g2015[4]<-temp
#
g2015
#542891.2 285340.7 175239.6 269230.5
#
##平成27年度(2015)の増減額は
g2015-g2014
# 国内債券 国内株式 外国債券 外国株式
# 25976.18 -31363.33 -6575.358 -31541.49
#
#資産全体の増減額は
sum(g2015-g2014)
#-43503.99

約4兆3503億円の損失

(試算2) 平成27年度(2015)第4四半期には資産の売買をしていないと仮定する

第1四半期から第3四半期までの増減額は公表済み

運用資産額(平成27年度第3四半期末現在)
1398249

運用資産別の構成割合(年金積立金全体)
国内債券 37.76% 527979(=139824937.76/100)
国内株式 23.35% 326491(=1398249
23.35/100)
外国債券 13.50% 188764(=139824913.50/100)
外国株式 22.82% 319080(=1398249
22.82/100)

資産全体の増減額は第1四半期から第3四半期までの増減額に第4四半期の増減額を加えればよい

1
2
3
4
5
6
7
8
9
#第1四半期 + 第2四半期 + 第3四半期
26489 + (-78899) + 47302
# -5108
#第4四半期の増減額
527979 * zougen[1]/100 + 326491 * zougen[2]/100 + 188764 * zougen[3]/100 + 319080 * zougen[4]/100
# -42165.2
#平成27年度の試算全体の増減額は
-5108 + -42165.2
# -47273.2

約4兆7273億円の損失

資産別収益率(四半期別)の状況 (2015年度第4四半期(推定を含む))

1
2
3
4
5
6
7
8
9
gp<-as.xts(ts(rbind(data.frame(国内債券,国内株式,外国債券,外国株式),zougen),start=c(2009,1),freq=4))
yl<-max(max(gp),abs(min(gp)))
p1<-autoplot(gp[,1],geom="bar",fill=c(rep("gray30",24),rep("palegreen3",3),"tomato"))+labs(title=names(gp)[1])+ylim(-yl,yl)
p2<-autoplot(gp[,2],geom="bar",fill=c(rep("gray30",24),rep("palegreen3",3),"tomato"))+labs(title=names(gp)[2])+ylim(-yl,yl)
p3<-autoplot(gp[,3],geom="bar",fill=c(rep("gray30",24),rep("palegreen3",3),"tomato"))+labs(title=names(gp)[3])+ylim(-yl,yl)
p4<-autoplot(gp[,4],geom="bar",fill=c(rep("gray30",24),rep("palegreen3",3),"tomato"))+labs(title=names(gp)[4])+ylim(-yl,yl)
#png("gpif11.png")
grid.arrange(p1,p2,p3,p4,ncol=1)
#dev.off()

  • palegreen:2015年度第1から第4四半期
  • tomato:2015年度第4四半期(推定)