池袋校で乗り換えよう / デジハリstudio池袋
池袋校で乗り換えよう / デジハリstudio池袋
2016.09.14
第6回
数字を見極める統計入門

無相関検定ってなに?〜相関係数について〜

ともぞう

どうも、ともぞうです!
最近ぼくもR言語を触り始めました。
手軽にデータが加工できて、ありがたみを感じます。

閑話休題

さあ! ディレクター連載「統計入門のはじめ」の第6回です!

今回は無相関検定をおこなうにあたって、必要になる相関係数を少し深掘りしていきます…!
R言語を使って手早く値も求めていきます。

相関係数のおさらい

記憶にあたらしいひともいるかもしれませんが、第4回で相関係数についてご紹介していました。

このときは最高気温と平均湿度という定量データの関係性を見ていました。
定量データ…?
そういえばデータには以下の2種類があるんでしたね。

  • 定量的データ(測れるデータ)
  • 定性的データ(測れないデータ)

詳しくは2回目で紹介しているのでおさらいしてみてください!

実は相関係数はデータの種類によって求め方が変わります。
先に表にまとめてみると以下のようになります。

扱うデータ 指標
定量データと定量データ 単相関係数
定性データと定性データ ファイ係数 or クラメールの連関係数

この表から第4回で求めた相関係数は単相関係数だとわかります。
ちなみに…

  • 定量データ間の関係を相関
  • 定性データ間の関係を連関

とデータによって関係の呼び方があります。
今回は定性データと定性データの関係性を見てみたいと思います。

定性データの関連性を考えてみる

まずどういった場面で使用できそうかを考えてみましょう。

定性データは好き、嫌いのような定量的ではないもの。
例えば、アンケートで「LIGブログとプログラミングの好き嫌い」を聞いたものなどです。
LIGブログを好きと思っている人は、プログラミングが好きかもしれないというのを数値で測るイメージです。

ファイ係数とクラメールの連関係数

アンケートだと、「好きか嫌いか」 の2択以外に「満足、やや満足、普通…」みたいに複数から選ぶ場合もありますね。
選択肢が2択か複数かで求めるべき数値が変わります。

2択の場合は…ファイ係数
複数選択の場合は…クラメールの連関係数

今回はファイ係数を求めていきます。

クロス集計表

定性データ同士の関係を見るのに使用するクロス集計表というものがあります。
単相相関係数でつくった散布図のようなものです。

空想のデータとして、LIGブログとプログラミングの好き嫌いをR言語を使って表におこしてみましょう…。
※このデータはランダムに生成したものです。執筆している自分もどんな値が返ってくるかわかっていません。

まず変数にデータを格納

programing <- c("嫌い", "嫌い", "好き", "嫌い", "好き", "嫌い", "嫌い", "好き", "嫌い", "好き", "嫌い", "好き", "嫌い", "好き", "好き", "好き", "好き", "嫌い", "好き", "好き", "好き", "好き", "好き", "好き", "好き", "嫌い", "好き", "嫌い", "好き", "嫌い")
lig <- c("好き", "嫌い", "好き", "好き", "嫌い", "嫌い", "嫌い", "嫌い", "好き", "好き", "嫌い", "嫌い", "嫌い", "好き", "嫌い", "好き", "嫌い", "嫌い", "好き", "嫌い", "好き", "好き", "好き", "好き", "好き", "嫌い", "嫌い", "嫌い", "好き", "嫌い")

table関数で表っぽく出力してみる

table(programing, lig)

出力結果は…以下のようになるはずです。

lig
programing 嫌い 好き
      嫌い    9    3
      好き    7   11

さらにこれをキレイにまとめてみると

LIGブログ
嫌い 好き
プログラミング 嫌い 9 3
好き 7 11

ファイ係数をR言語で求めてみる

なんとなーく、クロス集計表で相関がありそうな雰囲気を感じ取れました。
つづけて、しっかりと数値的な根拠を示していきます。

STEP1. まず、データを0か1に変換する

programing_code <- ifelse(programing == "好き", 1, 0)
lig_code <- ifelse(lig == "好き", 1, 0)

STEP2. どんなデータが入ったか確認してみる

programing_code
 [1] 1 1 1 1 0 1 0 0 1 1 0 1 1 1 1 1 0 1 1 1 0 1 0 1 0 0 0 0 0 0

lig_code
 [1] 0 1 1 0 1 0 1 1 1 0 1 0 0 1 1 1 0 1 1 1 0 1 0 0 1 1 1 1 0 1

ここでの処理を説明すると、ifelseを用いて「好きという文字列であれば1に、でなければ0に変換」しています。

STEP3. 係数を求めてみる

cor(programing_code, lig_code)

結果は以下になると思います。

0.3546041

正の値を得られたので「LIGブログが好き」と答えた人は、「プログラミングが好き」と答える傾向にあるとわかりました。
次にどのくらい相関があるのかを、以前Jack氏がまとめてくれた対応関係を見てみましょう。

1.0≧|R|≧0.7 高い相関がある
0.7≧|R|≧0.5 かなり高い相関がある
0.5≧|R|≧0.4 中程度の相関がある
0.4≧|R|≧0.3 ある程度の相関がある
0.3≧|R|≧0.2 弱い相関がある
0.2≧|R|≧0.0 ほとんど相関がない

今回のデータでは「ある程度の相関がある」ことがわかりました…!

ファイ係数の見せ方

ファイ係数を求めた結果、「ある程度の相関がある」ことがわかりました。
ここで数値のみを提示して、ある程度相関ありました! だけで終わらずに、クロス集計表もあわせて提示すると良いです。
ファイ係数が同じクロス集計表があった場合、値は同じでもクロス集計表の中身(度数)が異なる場合が往々にしてあります。

まとめ

今回は定性データと定性データの関連を見ました。
これで、定量データでも定性データでも関連性を数値で求めることができるようになりました!
つまり、どんなデータでも関連を調べることができますし、次回RマスターのJack氏が紹介する無相関検定をおこなうことができます。

ぼくはこの1ヶ月くらいでR言語をはじめてみたのですが、手軽に値を求めることができるので便利だなーと思っています。
実際にサイトの分析に役立てる場面を考えると、Google Anaryticsで得たデータをCSVないしExcelにまとめて、
それをR言語でゴニョゴニョするのが良さそうだなと考えています。

今回、振り返った知識や単語は過去の記事も参考にしてみてください!

データの種類をご紹介した回

定量データでの相関をもとめた回