読者です 読者をやめる 読者になる 読者になる

jnobuyukiのブログ

JavaScriptとR言語を中心に研究活動に役立つwebアプリケーション技術について考えていきます。twitter ID: @j_nobuyuki

統計的に有意となる相関係数を自由度と有意水準から逆算する

R R言語

今回は、ちょっとややこしい話。2つの変数の関連性を数値の変動の仕方から推定する方法があります。例えば、一方が増えると他方も増えるのか?それとも減るのか?もしくは変わらないか。これを表す指標の一つが相関係数です。相関係数を計算する方法は、検索すれば限りなく出てくるのですが、統計的に有意となる相関の大きさを計算する方法がすぐには見つからなかったのでシェアします。

そもそも相関係数とは

相関係数は、二つの変数の共分散をそれぞれの変数の標準偏差の積で割ったものです。共分散と異なり、単位が数値に影響を及ぼさず、-1から1の値をとります。+1に近いほど、二つの変数は「一方が増えると他方も増える」の関係にあり、正の相関と呼びます。一方、−1に近いほど、二つの変数は「一方が増えると他方は減る」の関係にあって、負の相関と呼びます。相関係数が0に近い時には、二つの変数の間に関連性はないと言えます。相関係数を求めるは、以下の通りです。


 r_{xy} = \frac{(x_i - \overline{X})(y_i - \overline{Y})}{\sqrt{(x_i - \overline{x})^2}\sqrt{(y_i - \overline{Y})^2}}

相関の有意性を検定する

相関係数(r)は、「相関係数が0である(つまり2変数間に関連性はない)」を帰無仮説として検定します。検定には以下の式で求められたt値を使います。これが自由度サンプルサイズ(n)−2のt分布に従う時に、有意水準(例えば0.05)を下回るp値となるかで帰無仮説の棄却を決めます。

 t = \frac{r\sqrt{n-2}}{\sqrt{1-r^2}}

自由度と有意水準からt値を逆算する

t分布上の位置とp値の関係は比較的簡単に計算可能です。例えばR言語であればqt関数が便利ですぐに計算してくれます。

#p値0.05,サンプルサイズ50の場合の有意となるt値
qt(p = (0.05/2), df = (50-2), lower.tail = FALSE)
#2.010635となります

t値から相関係数rを復元

上述のt値を求める式を変形して、rを求める式を作ります。この手の数式は、「がんばってときましょう」と言われて具体的な展開が示されないことが多いのですが、ここではあえて示します。

まず上述のt値を求める式の両辺を二乗します

 t^2 = (\frac{r\sqrt{n-2}}{\sqrt{1-r^2}})^2

右辺の分子と分母のそれぞれが二乗されるので平方根が取れます。

 t^2 = \frac{r^2(n-2)}{1-r^2}

右辺の分母を左辺に移動

 t^2(1-r^2) = r^2(n-2)

左辺を展開

 t^2 - t^2r^2 = r^2(n-2)

左辺の t^2r^2を右辺に移動

 t^2 = r^2(n-2) + t^2r^2

右辺の t^2r^2を組み込む

 t^2 = r^2(n-2+t^2)

右辺の n-2+t^2を左辺に移動

 \frac{t^2}{n-2+t^2} = r^2

両辺の平方根をとる

 \sqrt{\frac{t^2}{n-2+t^2}}= r

平方根を分子と分母のそれぞれにわりあててから右辺と左辺を入れ替え

 r = \frac{t}{\sqrt{n-2+t^2}}

できましたこれを利用してR言語で作った関数が次の通りです。出力はrの絶対値であることに注意しましょう。

inverseR <- function(p,sampleN){
  #t値を計算
  tValue <- qt(p = p/2, df = (sampleN -2), lower.tail = FALSE)
  rValue <- tValue /sqrt(sampleN - 2 + tValue^2)
  return(rValue)
}