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

UB3/informatics/r/cor_test

このページの最終更新日: 2020/07/17

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

広告

cor 関数を使った相関分析

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

cor 関数

シンプルな使い方は以下の通り。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 のみで十分である。

各パラメーターの解説は このページ に。


広告

実例

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

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

散布図の作成

R 組み込みデータセット swiss を使ってみる。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.

コメント欄

各ページのコメント欄を復活させました。スパム対策のため、以下の禁止ワードが含まれるコメントは表示されないように設定しています。レイアウトなどは引き続き改善していきます。「管理人への質問」「フォーラム」へのバナーも引き続きご利用下さい。

禁止ワード: http, the, м (ロシア語のフォントです)


このページにコメント

Name:


Comment:



これまでに投稿されたコメント

Date Name Comment