Rを用いた不偏分散共分散行列(高次元の場合)
【概要】
このページでは,Rを用いた不偏分散共分散行列の求め方を図解で説明する. このページでは,高次元の不偏分散共分散行列に焦点をあてる. 不偏分散共分散行列の意味については, 「Rを用いた不偏分散共分散行列」の Web ページを参照のこと.「Rを用いた不偏分散共分散行列」の Web ページでは,3次元のベクトルデータを扱っていた.この意味は次の通りである.
- テーブルなので,
各時点(それぞれの瞬間)でのUSDとEURとAUDの観測値(つまり値3つ)が,1行になる.
言い換えると,CSV ファイル Book1.csv では,1行が1回の観測値ということである.
- 「Rを用いた不偏分散共分散行列」の Web ページでは,
3列目,4列目,5列目を抜き出して,1個の3次元のベクトルと見立てていた.
(値が3個なので,3次元のベクトルである).
3列目,4列目,5列目に並んだデータを1つのベクトルとして扱ってきた.「[,3:5]」という書き方を使ってきた. つまり,3列目,4列目,5列目の部分は,3次元空間中の点の集まりとみなされる.
一方,この Web ページの手順では,CSV ファイルを読み込んだあと,R の t() 関数を使って転置させる.
- すると,各行には,USDやEURやAUDの値の経時変化が並ぶ. これをベクトルと見立てると,2834次元のベクトルができる. これは,USDとEURとAUDの経時変化の波形をベクトルと見立てるものである.
【目次】
【関連する外部ページ】
R システムの CRAN の URL: https://cran.r-project.org/第1章 不偏分散共分散行列と不偏相関係数行列
3 つの変数を n 回観測して得られる n 個の標本から構成される長さ n のベクトル に対する不偏分散共分散行列と不偏相関係数行列の定義は次の通り.
- 分散には,標本分散と不偏分散の2種類がある.同様に, 共分散にも,標本分散の拡張と不偏分散の拡張の2種類がある. R や octave では,不偏分散の方が使われる(標本分散ではない).
- ここでは3 つの変数としているが,一般の m 個の変数が与えられた場合も同様の定義になる.
第2章 前準備
R システムのインストール
第3章 CSVファイルを読み込み,データフレームに格納
- (前準備) 使用する CSV ファイルの作成
Book1.csv をダウンロードする (参考: 「外国為替データ(時系列データ)の情報源の紹介」の Web ページ).
以下の説明では,
- Windows の場合: データファイル名: C:\R\Book1.csv
- Linuxの場合: データファイル名: /tmp/Book1.csv
として説明を続ける.
* 自前の CSV ファイルを使うときの注意: read.table() 関数を使うので, 属性名は英語にする.属性名は,CSV ファイルの1行目に書く. - 使用する CSV ファイルの確認
属性名が CSV ファイルの1行目に書かれていることを確認する.
- R の起動
- read.table 関数を用いて,CSV ファイルを R のデータフレームに読み込む
次のコマンドを実行する.
◆ Windows での動作手順例
X <- read.table("C:/R/Book1.csv", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE);◆ Linux での動作手順例
X <- read.table("/tmp/Book1.csv", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE);read.table 関数のオプション- X <- ・・・ 変数 X に読み込むという意味
- C:/R/Book1.csv, "/tmp/Book1.csv" ・・・ 読み込む CSV ファイル名.Windows では区切りに「/」を使うことに注意.
- header="TRUE" または header="FALSE" ・・・ 列ラベルが設定されているか
- sep="," や sep="\t" や sep=" " など ・・・ 列を区切る記号(CSV ファイルのときは「sep=","」)
- na.strings="NA" ・・・ 欠損値には "NA" を使うという意味
- dec="." ・・・ ファイルで使われている小数点記号(既定値はピリオド)
- strip.white=TRUE ・・・ 個々のデータの先頭や末尾にある空白文字を取り除いて読み込む
- skip=<行数> ・・・ 読み飛ばし行数
- nrow=<行数> ・・・ 読み込み行数
- オブジェクト X の確認
次のコマンドを実行する.
edit(X);次のコマンドを実行する.
str(X)
第4章 cov() 関数を使って不偏分散共分散行列を求める
cov() 関数を使って不偏分散共分散行列を求める
次のコマンドを実行する.
covTX <- cov( t( X[,3:5] ) )
結果表示
* covTX は,2834行2834列の行列になっている. サイズが大きいため,「covTX」と入力して Enter キーを押す方法ではうまく表示できない.
str(covTX)
edit(covTX);
次の2つの式の評価結果は等しい
- cov() 関数を使って,分散共分散行列を求める R の式
cov( t( X[,3:5] ) )
- colMeans() 関数,t() 関数などを使って,分散共分散行列を求める R の式
crossprod( D ) / ( nrow(D) - 1 ); * この式は「t( D ) %*% D / ( nrow(D) - 1 )」と同じ意味
但し,D は次の手順で作る. D は,行列 X の各要素から各列の平均値を引き,転置した行列である. 「転置」にしているのは,R のリサイクル規則を使って簡単に作れるためである.
D <- t( t( X[,3:5] ) - colMeans( X[,3:5] ) );