【R言語】散布図による相関関係分析

R言語で統計学 R言語
R言語で統計学

今回は相関関係についてやっていくよ!

相関関係とは、2つのデータの関連度合いについてのことを言います。

相関が強ければ、互いのデータ結びつきが強いと言え、相関が無ければデータの結びつきが無いと言えます。

相関関係は、散布図を用いて相関があるかどうかを視覚的に把握する方法があります。

今回は散布図や相関関係図を使って相関を見ていきます!

対象データ

まずは、分析をするデータを探しましょう。

今回はKaggleで公開されているデータセット「World Happiness Report」を使っていきましょう。

こちらのデータセットは世界各国の幸福度に関するデータがまとまったデータセットになっています。

2015年から2019年までのデータセットがありますが、今回は2016年のデータセットを使います。

World Happiness Report
Happiness scored according to economic production, social support, etc.

データセットのテーブルの中身はこのように構成されています。

説明
Country国の名前
Region(2015年と2016年のみ)この国が属する地域(例:Western Europe、Middle East and Northern Africa)
Happiness Rank幸福度に基づいたその国のランキング
Happiness Scoreサンプルとなった人に「0を最高として、あなたの幸福度を0~10の範囲で評価してください」という質問をして測定
Standard Error(2015年のみ)幸福度の標準誤差
Lower Confidence Interval(2016年のみ)幸福度の低い方の信頼区間
Upper Confidence Interval(2016年のみ)幸福度の高い方の信頼区間
Whisker.high(2017年のみ)この国の箱ひげ図の最大値
Whisker.low(2017年のみ)この国の箱ひげ図の最小値
Economy(1人あたりGDP)GDPが幸福度の計算に寄与する程度
Family家族が幸福度の計算に寄与する程度
Health(平均余命)平均余命が幸福度の計算に寄与する程度
Freedom自由が幸福度の計算に寄与する程度
Trust(政府の汚職)政府の汚職の認知が幸福度の計算に寄与する程度
Generosity寛容さが幸福度の計算に寄与する程度
Dystopia Residualディストピア残差が幸福度の計算に寄与する程度(ディストピア残差の構成要素の詳細については、上述のKaggleページを参照してください)

csvファイル読み込み

まずは、データセットを読み込んでみましょう。

#データを読み込み
DF <- read.table("2016.csv",
                 sep = ",",                #カンマ区切りのファイル
                 header = TRUE,            #1行目はヘッダー(列名)
                 stringsAsFactors = FALSE, #文字列を文字列型で取込む
                 fileEncoding="UTF-8")     #文字コードはUTF-8

必要なデータを抽出

必要なデータを抽出します。

今回はRegionが”Sub-Saharan Africa”の列と”Central and Eastern Europe”の列を使用します。

また、国名とランキング、信頼区間の情報を除外します。

#行抽出 
DF_SelectAf <- DF[DF$Region=="Sub-Saharan Africa",]
DF_SelectEE <- DF[DF$Region=="Central and Eastern Europe",]
#行結合
DF_Selected <- rbind(DF_SelectAf, DF_SelectEE)
#不要な列を削除
DF_Selected <- DF_Selected[, -c(1, 3, 5, 6)]

散布図-1

これで準備が整いました。

まずは標準関数で散布図を出力して相関関係を見ていきましょう。

pairs関数を用いると各指標間の散布図を出力します。

#標準のparis()を使う場合 [-1]は"Resion"列の除外を意味する
pairs(DF_Selected[-1]) 

実行するとこのような図が出力されます。見るとわかりますが、指標名は長いと表示域に入りきらないので少し工夫する必要があります。

一括で散布図を生成してくれるため、どの指標間に相関関係があるのかわかりますね!

散布図-2

次に“Region”毎に分けた散布図を出力します。

先ほどの散布図はSub-Saharan AfricaとCentral and Eastern Europeの2つの地域を合算して出力した図です。

地域ごとにどのような違いがあるのかを調べるためにはそれでは困ります。

そこで、latticeライブラリのsplom関数を使って地域ごとにプロットの色を変えて出力するようにします。

#ライブラリlatticeのsplom()を使う
library(lattice)
splom(DF_Selected[-1],           #散布図からは"Reginon"列を除く
      groups=DF_Selected$Region,      #色分け
      axis.text.cex=.3,               #目盛りのフォントサイズ
      varname.cex=.5)                 #項目名のフォントサイズ

このようにして、地域ごとに色を変えた散布図を見ると、その地域の特性を観察することができます。

ggpairs関数

ヒストグラムや密度プロット、ボックスプロットなどの複数の図を一括で出力して欲しいといったときに便利なのがGGallyライブラリのggpairs関数です。

ggpairs関数は以下の内容を一つの画像に一括で出力します。

  • 散布図
  • 密度プロット
  • ヒストグラム
  • ボックスプロット
  • 各指標間の相関係数の値
  • (グループ分けした場合の各指標間の相関係数の値)

#ライブラリGGallyのggpairs()で散布図マトリクスを描く
library(ggplot2)
library(GGally)
ggpairs(DF_Selected,                        #すべての列を含める
        aes( colour=as.factor(Region),      #色分け
             alpha=0.5),                    #透明度
        upper=list(continuous=wrap("cor", size=3)) ) +
  #相関係数の文字サイズ
  theme(axis.text =element_text(size=6),  #軸の文字サイズ
        strip.text=element_text(size=6))  #項目の文字サイズ

出力図を見ていただくとわかりますが、Rigionのグループ名が長い為、相関係数の値が表示域からオーバーしています。。。(書いているときに気が付きました。)

グループの名前を短くして表示できるように工夫しましょう。

ggpairs関数はとても便利! ggplot2を組み合わせると見た目が良いものを作ることができます。

相関図

最後に相関図についてやっていきます。

相関図は各標本間の相関関係を視覚的にわかりやすくする図のことです。

よくドラマとかのホームページを見ると載っている、登場人物間の関係を表した図も相関図ですね。

R言語では、qgraphというライブラリを用いることで相関図を作ることができます。

#(3)相関係数のグラフ表示

#相関行列を計算してオブジェクトCORに格納
COR <- cor(DF_Selected[-1])

#ライブラリ qgraph を使いr=.20を基準として視覚化
library(qgraph)
qgraph( COR, 
        minimum=.20,         #.20以上の相関関係を表示 
        labels=colnames(COR),#長い項目名を省略せずに表示
        edge.labels=T,       #辺に相関係数を表示
        label.scale=F,       #項目名を一定の大きさで表示  
        label.cex=0.8,       #項目名のフォントサイズ
        edge.label.cex=1.4 ) #辺のフォントサイズ

おわりに

今回は相関関係についてまとめました。

GitHubの方に一式置いてあります。参考にしていただければ幸いです。

CorrelationAnalysis/Correlation.R at main · soeatu/CorrelationAnalysis
相関分析. Contribute to soeatu/CorrelationAnalysis development by creating an account on GitHub.
タイトルとURLをコピーしました