アメリカの金利変動を主成分分析してみた

FRBのサイトからアメリカの金利の期間構造が取得できることをたまたま発見したので、よく言われるように金利の変動が「パラレル」「ツイスト」「バタフライ」の三要因で大半が説明できているのかを実際に主成分分析して見てみた。

データはData Download Programから「Go to download」→「Download File」とたどっていけばCSVでダウンロードできる。デフォルトでは日次の国債金利が落とせる。そのほかにも取得データ・データ頻度をいろいろカスタマイズできるのがすばらしい。


以下、デフォルトの設定で落っことしてきた金利データをC:\tmpフォルダにおいたとして処理。
まず、データを捌く。これが一番めんどくさくて以下のようにコードを書いた。

#データ読み込み。Factor型への変換を抑制
term.structure <- read.csv("C:\\tmp\\FRB_H15.csv",stringsAsFactors=FALSE)
#このままだとフォーマットが結構グシャってるので直近1000日分だけ持ってくる
term.structure <- tail(term.structure,1000)
#1列目は日付なので今回はいらない
term.structure <- term.structure[,-1]
#列名が汚いのでつけなおし
label.term <- c("1M","3M","6M","1Y","2Y","3Y","5Y","7Y","10Y","20Y","30Y")
colnames(term.structure) <- label.term
#NDという欠損値の行を全部消す
term.structure <- subset(term.structure,term.structure$'1M' != "ND")
#数値型へ
term.structure <- apply(term.structure,2,as.numeric)
#金利の”変動”を主成分分析したいので差分を計算
term.structure.diff <- diff(term.structure)

ここまでで金利の日次変動データが完成。
これを主成分分析してplotするために

#主成分分析
term.structure.princomp<- princomp(term.structure.diff)
#第3主成分までプロット
factor.loadings <- term.structure.princomp$loadings[,1:3]
legend.loadings <- c("First principal component","Second principal component","Third principal component")
par(xaxt="n")
matplot(factor.loadings,type="l",
  lwd=3,lty=1,xlab = "Term", ylab = "Factor loadings")
legend(4,max(factor.loadings),legend=legend.loadings,col=1:3,lty=1,lwd=3)
par(xaxt="s")
axis(1,1:length(label.term),label.term)

と書いた。やっぱりRのプロット関数はめんどくさいな・・・で、これを実行すると

イールドカーブの日次変化に対する主成分分析結果(要するに固有ベクトル)が表示される。これを見るとだいたい第一〜三主成分までを「パラレル」「ツイスト」「バタフライ」と対応づけても良さそうだ。

累積寄与率は

> summary(term.structure.princomp)
Importance of components:
                          Comp.1    Comp.2     Comp.3     Comp.4     Comp.5      Comp.6      Comp.7      Comp.8
Standard deviation     0.2028719 0.1381839 0.06938957 0.05234510 0.03430404 0.022611518 0.016081738 0.013068448
Proportion of Variance 0.5862010 0.2719681 0.06857903 0.03902608 0.01676075 0.007282195 0.003683570 0.002432489
Cumulative Proportion  0.5862010 0.8581690 0.92674803 0.96577411 0.98253486 0.989817052 0.993500621 0.995933111

とすれば見えて最下段に表示されている。これを見ると第三主成分までで92,3%は説明できるようだ。