全変数の関連を楽に把握する試み(ただし道半ば)

二次分析をする際に、データのどこが使える部分なのかわからない時がしばしばある。そういう時に、褒められた方法とは言えないかもしれないが、全変数の関連を把握できると分析のとっかかりになることがある。

ということで、いかに楽に把握をするかということをたまに考えたりするのだが、一つ方法を考えてみた。ちなみに、今回のエントリ内容はタイトルにもあるように道半ばであって、いかなる状況でも対応できるものではない。

カテゴリカル相関係数

連続変数だけを扱っていれば、相関行列を作成して表示すればいいのだが、カテゴリカル変数が入るとけっこうやっかいだ。そこでカテゴリカル相関係数を利用できないか、と考えた。

一応、相関係数の種類を書き出しておこう。点双列相関係数(point-biserial correlation)だけ訳語があるようなのだが、ポイント・バイシリアルと書いた方が覚えやすい気はする。

  • ピアソンの積率相関係数: 連続変数と連続変数
  • ポリコリック相関係数: 順序変数と順序変数
  • ポリシリアル相関係数: 順序変数と連続変数
  • テトラコリック相関係数: 2値データと2値データ
  • 点双列相関係数: 2値データと連続変数

ピアソン以外の相関係数はRではpolycorパッケージを利用する。データタイプの判別をして自動で適した相関係数を出力するhetcorコマンドがpolycorパッケージにある。

AERパッケージに含まれるCPS1085データを使用しよう。

データの作成

CPS1985の呼び出して連続と2値データの変数のみ抽出する。

library(AER)
data(CPS1985)
str(CPS1985) # データ構造の把握
r <- cbind(1, 2, 3, 4, 6, 7, 10, 11) # 連続と2値データのみ抽出
data <- CPS1985[,r]

相関マトリックスの作成する。

library(polycor)
het<- hetcor(data)
res <-het$correlations # 相関行列のみ取り出し
print(res)

hetcor機能でデータフレームに含まれる変数同士すべての相関係数を適切な方法で計算してくれる。

print(res)もしくはresで相関行列を表示できる。下のものはhetcor(data)を格納したhetを表示したものだ。RStudioでは表示されず、コンソールから実行しないと正しく表示されなかった。

Correlations/Type of Correlation:
              wage education experience     age     region     gender      union    married
wage             1   Pearson    Pearson Pearson Polyserial Polyserial Polyserial Polyserial
education   0.3819         1    Pearson Pearson Polyserial Polyserial Polyserial Polyserial
experience 0.08706   -0.3527          1 Pearson Polyserial Polyserial Polyserial Polyserial
age          0.177     -0.15      0.978       1 Polyserial Polyserial Polyserial Polyserial
region      0.2012    0.1831   0.009742  0.0511          1 Polychoric Polychoric Polychoric
gender     -0.2572  0.002558    0.09412 0.09928    0.03538          1 Polychoric Polychoric
union       0.2203  -0.03494     0.1666  0.1707      0.175    -0.2925          1 Polychoric
married     0.1283  -0.04662     0.3514  0.3558   -0.01116     0.0182     0.1821          1

それぞれの変数がどの種の相関係数で計算されているかが表記される。

プロットする

これを以前のエントリでとりあげた相関プロットで表示する。

library("corrplot")
png(height=800, width=800, pointsize=15, file="corrplot02.png")
corrplot(corr = res, type="upper", addCoef.col="black" )

f:id:iDES:20191005222806p:plain

考察

相関係数は3値以上のカテゴリカル変数には対応していない。順序があれば、相関係数の計算はできるが、CPS1985のethnicity変数はcauc/hispanic/otherの3値でかつ、順序がない。この種の変数はクロス表分析(カテゴリカル×カテゴリカル)か分散分析(カテゴリカル×連続)をするしかない。

ということで、3値以上の順序の無いカテゴリカル変数があるとこの方法で把握することは無理だという欠点があるものの(それはわりと致命的な場合も多いが)、気軽に全変数の関連を調べることができるようになった、かもしれない。