概要
Rによる共分散・相関係数・ファイ係数の算出方法をご紹介します。
関数
2つの異なるデータ群の共分散を cov()
で算出できます。
ただし、単位に依存するので、例えば、身長がm
単位なのかcm
単位なのかで共分散の値が異なります。
cov() : 共分散
共分散: 偏差の積の平均 デメリット: 単位に依存する
> h1 <- c(1.5, 1.6, 1.7, 1.8, 1.9) # 身長(m) > h1 [1] 1.5 1.6 1.7 1.8 1.9 > > h2 <- h1*100 # 身長(cm) > h2 [1] 150 160 170 180 190 > > w <- c(50, 60, 70, 80, 90) # 体重(kg) > w [1] 50 60 70 80 90 > > cov(h1, w) [1] 2.5 > > cov(h2, w) [1] 250
cor() : 相関係数
x, y の共分散を、それぞれのx, y の標準偏差の積で割った値が相関係数です。
メリットとして、単位に依存しないので、任意のデータ群の相関が統一的に算出できます。
また、
100%正の相関のときは1
100%負の相関のときは-1
無相関のときは0
となります。
相関係数r : cov(x,y) / ( sd(x) * sd(y) ) メリット: 単位に依存しない -1 <= r <= 1
> h1 <- c(1.5, 1.6, 1.7, 1.8, 1.9) # 身長(m) > h1 [1] 1.5 1.6 1.7 1.8 1.9 > > h2 <- h1*100 # 身長(cm) > h2 [1] 150 160 170 180 190 > > w <- c(50, 60, 70, 80, 90) # 体重(kg) > w [1] 50 60 70 80 90 > > cor(h1, w) [1] 1 > > cor(h2, w) [1] 1 > z <- c(90, 80, 70, 60, 50) > z [1] 90 80 70 60 50 > cor(z,w) [1] -1 > p <- c(100, 2, 400, 8, 5) > cor(p, w) [1] -0.1700732
table(x, y) クロス集計表
複数のデータ群を集計したクロス集計表は、table()
を使って整理します。
> x <- c("a", "b", "a", "a", "b", "a", "b", "a", "a", "a", "a", "a", "b", "a", "a", "b", "a") > table(x) x a b 12 5 > > y <- c("b", "b", "a", "b", "a", "a", "a", "b", "a", "a", "b", "a", "b", "b", "a", "a", "a") > table(y) y a b 10 7 > > table(x, y) y x a b a 7 5 b 3 2
ファイ係数
カテゴリカルデータの相関係数を算出したい場合は、以下のようにダミー変数に変換した値の相関係数をとります。
これをファイ係数と呼びます。
ファイ係数: 1 or 0 の値からなる変数(2値変数)の相関係数
ifelse(Condition, True, False)
IF分岐させたい場合は、ifelse()
を使います。
> x <- c("a", "b", "a", "a", "b", "a", "b", "a", "a", "a", "a", "a", "b", "a", "a", "b", "a") > x [1] "a" "b" "a" "a" "b" "a" "b" "a" "a" "a" "a" "a" "b" "a" "a" "b" [17] "a" > x_bi <- ifelse(x=="a", 1, 0) > x_bi [1] 1 0 1 1 0 1 0 1 1 1 1 1 0 1 1 0 1 > y <- c("b", "b", "a", "b", "a", "a", "a", "b", "a", "a", "b", "a", "b", "b", "a", "a", "a") > y_bi <- ifelse(y=="a", 1, 0) > y_bi [1] 0 0 1 0 1 1 1 0 1 1 0 1 0 0 1 1 1 > cor(x_bi, y_bi) [1] -0.01543033 > cor(x_bi, x_bi) [1] 1 > cor(x_bi, ifelse(x_bi==1, 0, 1)) [1] -1
以上です。