2つの数字データがあって、相関ってあるの?っていうのが知りたい。そんなときに使えるのが相関係数というものみたいです。
相関係数を求める前に共分散というのを求める必要があります。共分散というのは、2つのデータの偏差(平均と引いた数)を掛け算して平均をとったものみたいです。R的に書くとこんな感じ。
x <- 1:10 y <- 101:110 z <- mean((x - mean(x)) * (y - mean(y)))
1~10と101~110までという、とても強い正の相関を持った数字で試してみました。zが共分散です。zには8.25というとても数字が入りました。数字的にも正の相関がありそうですね。
共分散だと、同じような相関のありそうなデータでも単位が変わると値が変わっちゃうという欠点があります。
x <- c(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1) y <- 101:110 z <- mean((x - mean(x)) * (y - mean(y)))
これだとzが0.825になっちゃいます。
じゃぁ1~-1の間に正規化してやろうというのが相関係数になります。求め方は共分散を2つのデータの標準偏差を掛け合わせたもので割ります。標準偏差は、偏差の2乗の平均の√だったのでRで書くとこんな感じですね。
x <- c(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1) y <- 101:110 z <- mean((x - mean(x)) * (y - mean(y))) sdx <- sqrt(mean((x - mean(x))^2)) sdy <- sqrt(mean((y - mean(y))^2)) answer <- z / (sdx * sdy)
answerには1という結果が入ります。正の相関があるって感じですね。こういう感じに相関が逆っぽいデータをつっこむとanswerは-1になります。
x <- -1:-10 y <- 101:110 z <- mean((x - mean(x)) * (y - mean(y))) sdx <- sqrt(mean((x - mean(x))^2)) sdy <- sqrt(mean((y - mean(y))^2)) answer <- z / (sdx * sdy)
Rは統計関係の関数をたっぷりもってるので(標準偏差はsdって関数でしたよね)ここで求めた共分散や相関係数も関数で持ってます。covとcorがそれになります。covとsdを使うとさっきのプログラムはこんな感じになります。
x <- -1:-10 y <- 101:110 answer <- cov(x, y) / (sd(x) * sd(y))
corを使うとこうですね。
x <- -1:-10 y <- 101:110 answer <- cor(x, y)