R言語

【R言語】相関係数の検定・無相関性の検定 関数cor.testの使い方

  1. HOME >
  2. R言語 >

【R言語】相関係数の検定・無相関性の検定 関数cor.testの使い方

スポンサーリンク

R言語で相関係数の検定を行う方法を紹介します。

無相関性の検定だけでなく、フィッシャーのz変換を用いた相関係数の検定も解説します。

この記事で紹介するプログラミングコードは以下からダウンロードできます。

相関係数の検定の詳細については次の記事を参照してください。

【統計学】相関係数の検定・無相関性の検定

相関係数の検定を解説する。 相関係数の検定の検定統計量や棄却域の導出について解説する。 相関係数の分布の導出を行い、検定統計量をどのように構成すればよいかみていく。 相関係数については以下の記事を参照 ...

続きを見る

Rでデータ解析を始めるならコレ
¥3,300 (2022/06/01 17:20時点 | Amazon調べ)
統計学初学者向けの教材です
¥2,970 (2022/06/01 17:41時点 | Amazon調べ)

相関係数の検定

相関係数の検定の関数をいくつか紹介します。

関数cor.test

関数cor.testによって、相関係数の検定(無相関性の検定)を実行することができます。

cor.test(x, y, alternative = c("two.sided", "less", "greater"), method = c("pearson", "kendall", "spearman"), exact = NULL, conf.level = 0.95, continuity = FALSE, ...)

cor.testの引数は以下の通りです。

関数cor.testの引数
x, ynumeric型の観測値のベクトル。xとyの長さは同じでなくてはならない。
alternativecharacter型。"two.sided"で両側仮説、"greater"で右片側仮説。"less"で左片側仮説を指定する。
methodcharacter型。"pearson"でPearsonの積率相関係数、"kendall"でKendallのτ、"spearman"でSpearmanのρに関する検定を指定できる。
exactlogical型。KendallとSpearmanの検定の際に正確なp値を計算するかどうか。
conf.level信頼区間の信頼水準。ピアソンの積率相関係数の検定かつサンプルサイズが4以上のときに適用される。
continuitylogical型。trueの場合、KendallとSpearmanの検定の際に連続性補正が適用される。
formula~ u + vの形から成るformula型のオブジェクト。
data観測値から成る行列またはデータフレーム。
subset検定に用いる観測値を指定するためのベクトル。
na.actionデータにNAがある場合に実行する関数。デフォルトでna.action。

関数cor.testは以下の無相関性の検定を実行します。任意の相関係数に関する検定ではないことに注意が必要です。この次に紹介する関数を用いることで、任意の相関係数についての検定を実行することが可能です。

相関係数の検定(ピアソンの積率相関係数)

相関係数\(\rho\)の2変量正規分布から\((x_1, y_1), (x_2, y_2)\ldots, (x_n, y_n)\)の2組から成る標本が与えられているとし、ピアソンの標本相関係数を\(r\)とする。また、対応する確率変数をそれぞれ\((X_1, Y_1), (X_2, Y_2)\ldots, (X_n, Y_n)\)、\(R\)とする。このとき次の仮説検定を考える。\begin{align}&H_0:\ \rho = 0\\ &H_1:\ \rho \neq 0\end{align}この仮説検定の検定統計量は次で与えられる。\begin{align} R \sqrt{\cfrac{n - 2}{1 - R^2}} \sim t_{n-2}. \end{align}また、有意水準\(\alpha\)の棄却域は次で与えられる。\begin{align}(-\infty, - t_{n - 2, \alpha / 2}) \cup (t_{n - 2, \alpha / 2}, \infty),\end{align}ここに、\(t_{n , \alpha}\)は自由度\(n\)のt分布の上側\(\alpha\)点である。

Pearsonの相関係数だけでなく、引数methodを"Spearman"または"Kendall"に指定することで、以下のSpearmanやKendallの相関係数に基づく検定を行うことができます。母集団分布が正規性を持たないとき、ノンパラメトリック手法であるSpearmanやKendallの相関係数の検定を行います。

関数fisherZ

Fisherのz変換を行う関数であるFisherZやそれに関連する関数を紹介します。

FisherZ(rho)
FisherZInv(z)
CorCI(rho, n, conf.level = 0.95, alternative = c("two.sided", "less", "greater"))

上で紹介した関数の引数は次の通りです。

関数cor.testの引数
rhoPearsonの積率相関係数。
zFisherのz変換後の値。
n信頼区間を計算する際のサンプルサイズ。
alternativecharacter型。"two.sided"で両側仮説、"greater"で右片側仮説。"less"で左片側仮説を指定する。
conf.level信頼区間の信頼水準。

パッケージDescToolsをインストールすることで関数FisherZを使うことができます。fisherZを用いることで、実数\(r,\ 0 < r <1\)を次のFisherのz変換によって変換することができます。\begin{align}z = \log \cfrac{1 - r}{1 + r}.\end{align}このFisherのz変換の検定の関数はパッケージにありませんが、正規近似(デルタ法)によって次のように、相関係数についての検定を行うことができます。

相関係数の検定(Fisherのz変換)

\((x_1, y_1), (x_2, y_2)\ldots, (x_n, y_n)\)の2組から成る標本が与えられているとし、ピアソンの標本相関係数を\(r\)とする。また、対応する確率変数をそれぞれ\((X_1, Y_1), (X_2, Y_2)\ldots, (X_n, Y_n)\)、\(R\)とし、\(X\)と\(Y\)の相関係数を\(\rho\)とする。このとき次の仮説検定を考える。\begin{align}&H_0:\ \rho = \rho_0\\ &H_1:\ \rho \neq \rho_0\end{align}\(n\)が十分に大きいとき、この仮説検定の検定統計量は次で与えられる。\begin{align}\sqrt{n - 3}(Z - \zeta) \sim N(0, 1), \end{align}ここに\begin{align}Z &=  \cfrac{1}{2} \log R ,\\ \zeta &= \cfrac{1}{2} \log \rho_0.\end{align}この検定の有意水準\(\alpha\)の棄却域は次で与えられる。\begin{align}(-\infty, - Z_{\alpha / 2}) \cup (Z_{\alpha / 2}, \infty),\end{align}ここに、\(Z_{\alpha}\)は標準正規分布の上側\(\alpha\)点である。

実行例

上で紹介した関数の実行例をみていきます。

関数cor.test

次のデータセットirisを用いてcor.testを解説していきます。

irisSepal.LengthPetal.Lengthの標本相関係数と散布図は以下の通りです。

散布図

次のように、標本相関係数の関数corと同じ書き方で相関係数の検定を行うことができます。cor.testの第1引数と第2引数に1つ目の標本と2つ目の標本を指定するだけです。

2行目のようにformulaを使った書き方もあります。好きな方を適宜使ってください。

testResultを参照すると次の検定結果がコンソールに表示されます。

ポイント

「p-value < 2.2e-16」とあるように有意水準0.05で相関係数は0であるとはいえないことが分かりました。すなわち、Sepal.LengthとPetal.Lengthには相関があることが分かりました。

t検定などで紹介したように、p値や信頼区間などの検定結果はtestResultの後ろに$を付けることで抽出することができます。以下のように、検定統計量の値、自由度、p値などの値を取得することができます。

検定結果をcsvファイルに保存したいときは、上の検定結果をデータフレームに格納し、write.csvでデータフレームを出力するよいでしょう。

上を実行すると次の画像の検定結果のcsvファイルが出力されます。

検定結果

また、cor.testの引数method"spearman""kendall"にすることでノンパラメトリックな相関係数の検定を行うことができます。

データセットUSJudgeRatingsについて、CONTINTGのヒストグラムは次のようになります。

ヒストグラム

上の図のようにデータが正規性を持つかどうか微妙なときは、SpearmanやKendallの相関係数に基づく検定を行う必要があります。

以下のようにPearsonの相関係数のときと同様に、SpearmanとKendallの標本相関係数の算出および相関係数の検定を行うことが可能です。

SpearmanとKendallの相関係数の検定の結果は以下のようになります。

関数FisherZ

Fisherのz変換を用いた相関係数の検定方法について紹介します。

次のパッケージDescToolsをインストールすることでFisherのz変換に関する関数をインストールすることができますが、cor.testのような検定を行ってくれる関数は実装されていないため、自分で実装する必要があります。(検定方法はデルタ法に基づく正規近似を用いているので、FisherZのRDocumentationに載っているt分布による方法とは異なります。)

早速、パッケージDescToolsをインストールしましょう。

cor.testの実行例で使ったirisを再び使って相関係数の検定を行いたいと思います。

「Sepal.LengthとPetal.Lengthの相関が高い、すなわちρ=0.9である」という仮説検定を行っていきます。以下のように帰無仮説の下での相関係数の値と信頼水準を与え、標本相関係数を計算しておきます。

Fisherのz変換により、この仮説検定のp値と信頼区間は次のように計算できます。

検定結果は以下のようになります。

ポイント

p値=0.1098296より、「Sepal.LengthとPetal.Lengthの相関係数は0.9である(0.9ではないことはいえない)」ことが分かりました。

まとめ

R言語の相関係数の検定で便利な関数やその実行例を紹介しました。

無相関性の検定の場合はcor.test、任意の相関係数の値についての検定はfisherZを使うと便利です。

スポンサーリンク

  • この記事を書いた人
  • 最新記事

usagi-san

統計学とゲームとかをメインに解説していくよ。 数式とかプログラミングコードにミスがあったり質問があったりする場合はコメントで受け付けます。すぐに対応します。

-R言語
-, , ,

© 2022 ウサギさんの統計学サロン Powered by AFFINGER5