分散共分散行列と相関行列

1+

ある2組のデータ列A、Bからなる表を仮定します。

なお、併記のRでの計算例は、attitude をデータセットとして用い、
列A は attitude[,1] を、列B は attitude[,2] を指すこととします。

(1)分散

データ列の各データより、平均を引いたものを偏差と言います。
データ列Aの各データより、Aの平均を引いたものを偏差Aとします。
偏差A列は、平均からの差となっているので、
正の値もあれば、負の値もあります。
そして、偏差の列を合計すると0になります。

偏差は平均からの差を示すため、
これを使えば、データ列Aが、
平均から離れたデータの多い列なのか、
平均に近いデータの多い列なのか、
調べることができそうです。

しかし、偏差の列の合計は0であるため、
列の平均も、0となります。

これでは都合が悪いので、
偏差列の値の一つ一つを二乗して、
全て正の値として、平均を求めます。

この値を、分散と言います。

分散とは、あるデータ列の「平均からの距離」の平均であり、
これを、データの散らばり具合 ⇒ 分散と呼んでいます。

mean((attitude[,1]-mean(attitude[,1]))^2);

なお、分散は二乗の値となっているため、
元のデータと直接比較することができません。

そのため、分散の平方根を求め、
二乗を元に戻して、
元のデータと直接比較可能にした値が、標準偏差となります。

sqrt(mean((attitude[,1]-mean(attitude[,1]))^2));

(2)共分散

先ほどの偏差Aに加え、偏差Bも用います。
なお、データ列Bの各データより、Bの平均を引いたものを偏差Bとします。

2つの偏差を掛けたものを、偏差積と言います。

本例では、偏差A列の各セルの値と、偏差B列の各セルの値を、
掛けたものを、偏差積ABとします。

そして、この偏差積の平均を、共分散と言います。

共分散は、データの散らばり具合を示したものではなく、
データの関連の強さを示したものです。

偏差Aと、偏差Bの、値が共に正の値、
もしくは共に負の値の場合、
偏差積ABは正の値になります。

偏差Aが正の値で、偏差Bが負の値、
または、偏差Aが負の値で、偏差Bが正の値の場合、
偏差積ABは負の値になります。

共分散は、偏差積の平均ですので、
正の偏差積が多いほど、共分散も正の値に近づきます。
また、負の偏差積が多いほど、共分散も負の値に近づきます。

このような、共分散が
正の値を取る場合を、正の相関がある、と言い、
負の値を取る場合を、負の相関が有る、と言います。

そして、共分散が0に近い場合、相関なし、と言います。

mean((attitude[,1]-mean(attitude[,1]))*(attitude[,2]-mean(attitude[,2])));

(3)分散共分散行列

分散共分散行列とは、ある2組のデータ列について、
共分散を求めて、表に埋めたものです。
2組のデータ列が同一のデータ列の場合、
そのマスには、そのデータ列の分散が入ります。

hensa<-t(attitude) – colMeans(attitude);
(cov <- (hensa %*% t(hensa)) / nrow(attitude));

(4)相関係数

相関係数とは、共分散を扱いやすくするために、
平均0、標準偏差1に基準化したものです。
このような基準化の操作を、標準化と呼びます。

例えば、身長、体重、視力の三つの項目では、
平均値も最大・最小値も全く異なるため、
身長・体重の共分散と、身長・視力の共分散を
直接比較することが出来ません。

具体的には、共分散をそれぞれのデータ列の
標準偏差の積で割ります。
相関係数は、-1~1の間の値を取ります。

(a<-sqrt(mean((attitude[,1]-mean(attitude[,1]))^2)));
(b<-sqrt(mean((attitude[,2]-mean(attitude[,2]))^2)));
(c<-mean((attitude[,1]-mean(attitude[,1]))*(attitude[,2]-mean(attitude[,2]))));
c/(a*b);

(5)相関行列

相関行列とは、ある2組のデータ列について、
相関係数を求めて、表に埋めたものです。
2組のデータ列が同一のデータ列の場合、
そのマスには、1が入ります。

sd <- sqrt(rowMeans(hensa^2));
cov / (sd %*% t(sd));


なお、ここで取り上げたのは、標本分散です。

R の var 関数では、不偏分散が計算されます。

var(attitude[,1]);
[1] 148.1713

不偏分散を標本分散に調整する際には、
(N – 1)/N を不偏分散にかけます (Nは行数)。
R の場合は、次のように入力します。

var(attitude[,1])*(nrow(attitude)-1)/nrow(attitude);
[1] 143.2322

この結果は、偏差の二乗の平均という、
本ページで示した標本分散と同じ値になります。

mean((attitude[,1]-mean(attitude[,1]))^2);
[1] 143.2322

以上です。

参考資料

アイスクリーム屋さんで学ぶ楽しい統計学 2.2 相関係数
標本平均, 標本分散, 不偏分散
母分散と不偏分散

カテゴリー:


1+