R cor.test 関数: オプションと実例

UB3/informatics/r/cor_test

このページの最終更新日: 2024/02/03

  1. cor 関数
  2. cor.test 関数
  3. 実際の手順
    • 散布図の作成
    • 正規性の検定
    • スピアマンの検定
    • ピアソンの検定

広告

cor 関数

相関係数の算出は cor 関数、相関しているかどうかの検定は cor.test 関数である。基本的な使い方は以下の通り。

シンプルな使い方は以下の通り。x と y がともに vector のとき、両者の correlation を計算する。x と y が行列の場合は、それぞれの列に対して covariances または correlations を計算する。

cor(x, y, use="everything", method=c("pearson"))

use

use = "everything" はデフォルトで、指定しなければ自動的に everything になる、つまり全てのデータが使われる。データに欠損値 NA がなければ問題ないが、NA があると結果も NA になってしまう。use = "complete.obs" にすると、組み合わせが完全なものだけ (欠損値がないものだけ) が使われる (2)。

use の引数には、everything および complete.obs のほかに、NA が入っているとエラーになる all.obs など 5 つがある。文献 2 を参照のこと。

method

pearson の部分を kendall または spearman にすることで、ノンパラメトリックな分析も可能。method = "pearson" としても動いた。

cor.test 関数

cor.test(x, y, use="everything", method=c("pearson"))

Pearson's product momemt correlation coefficient, Kendall's tau または Spearman's rho を使って、相関が有意であるかどうかを検定する。

rho, tau なども計算されるので、実際は cor をやる必要はなく、cor.test のみで十分である。

各種オプションは以下の通り (5)。網羅しているわけではないので、詳細は RDocumentation (Ref. 5) を参照のこと。

method

cor 関数と同様に、pearson, kendall または spearman を指定する。method = "pearson" としても動いた。

exact

NULL がデフォルト。FALSE にすると、kendall または spearman で同値 (tie values) があるときにも P 値を算出してくれる。


cor.test のアウトプットは、8 個の項目をもつリストである。これをオブジェクトに保存し、データを取り出すのも、実際の解析でよく使われる手順である。例えば、相関係数は estimate という名前で保存されているので、以下のように取り出すことができる。

A <- cor.test(x, y, use="everything", method=c("pearson"))
A$estimate

アウトプットの内容を表にしておく。いずれも $ を使って同様に取り出すことができる。

p.value

相関検定の p 値

estimate

相関係数。Peason, Spearman などの method によって変わる。


実際の手順

基本的な手順は次の通り。

  1. 散布図を作り、大体の傾向をつかむ。最終的にこの散布図のデータがどこにも使われなかったとしても、データの理解に重要なステップである。
  2. 相関がありそうだったら、まず正規性をチェック。
  3. その結果に応じて、パラメトリックまたはノンパラメトリックな検定を cor および cor.test を用いて行う。

散布図の作成

R 組み込みデータセット swiss を使ってみる。swiss はスイスの各地方における出生率と、さまざまな社会要因のデータである。

Rの組み込みデータセット swiss

最も関係していそうな Examination と Education に相関があるかどうかを調べてみよう。まずは plot 関数 で散布図を作るのが常道である。

plot(swiss$Education, swiss$Examination)

右肩上がりのプロットになり、正の相関があるように見える。そこで、次のステップへ進む。


正規性の検定

Shapiro-Wilk 検定とその結果を示す。

shapiro.test(swiss$Education)
W = 0.7482, p-value = 1.312e-07

shapiro.test(swiss$Examination)
W = 0.96962, p-value = 0.2563

Shapiro-Wilk 検定の帰無仮説は「変数は正規分布に従う母集団からサンプリングされた」である。したがって、Education では帰無仮説が否定されてしまって、つまり正規分布には従わないことになる。一方、Examination では帰無仮説が否定できず、つまりこの変数は正規分布に従うことになる (参考: 仮説検定)。

実際にヒストグラムを書いてみると、Education は非常に skew した分布になっていることもわかる。

したがって、これらの相関をテストするには、ノンパラメトリックな手法を使わなければならない。


スピアマンの検定

ノンパラメトリックな相関分析には、Spearman と Kendall という 2 つのよく使われている方法があり、前者の方が一般的である。今回は Spearman の方法を使ってみる。

cor(swiss$Education, swiss$Examination, method=c("spearman"))

これでスピアマンの相関係数 0.6746038 が算出される。cor.test は、以下のようにスピアマンにすると P 値などは算出されるが、Cannot compute exact p-value with ties というエラーメッセージが出る。tie というのは「同じ数値」があるということで、Mann-Whitney U 検定でも同じエラーに遭遇することがある。解決方法などは このページ に。

cor.test(swiss$Education, swiss$Examination, method=c("spearman"))


ピアソンの検定

ピアソンの検定 のページでは、相関係数の定義や Excel を使った検定を紹介している。実例として、同じ swiss のデータセットを使っている。

Excel では t 値が 6.546262224、P 値が 4.8114E-08 と計算されるが、これが R でも同じ値であることを確認しておこう。


広告

References

  1. 兵庫研究大学 成田滋氏のページ. 直線的関連. Link.
  2. Untitled Note. データに NA がある時の相関係数. Link: Last access 2020/05/26.
  3. ひとつのファイルのデータの処理. Link: Last access 2020/07/15. cor.test の結果が、どのようなデータフレームとして保存されているかが解説されている。P 値のみを抽出するときに使った。
  4. 相関係数の有意性を確かめる方法について -相関係数について1歩踏み込む- Link: Last access 2020/07/15.
  5. RDocumentation cor.test. Link: Last access 2022/05/16.

コメント欄

サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。