前回は線形モデル・単回帰でしたが、今回はクロス集計です。基本かつ王道のデータ処理で良い感じです。クロス集計に威力を発揮?するらしいmosaicplotを使ってみます。色を付けないと地味だけれども、色を付けるとかなりカッコよいです。ターゲットとするデータは、髪と目の色とな。
※「データのお砂場」投稿順Indexはこちら
今回使用させてもらうデータセットの解説ページのURLが以下です。
Hair and Eye Color of Statistics Students
かなり昔の米デラウエア州の大学生の髪の色と目の色のデータセットです。「目の色」と言われて思い出すのが、遥かな昔、米国で運転免許とったときのことですな。DMVというところで免許の手続きのときに「目の色、髪の色」を記入する欄がありました。お馬鹿な私は、黒目、黒髪だよなとて、Blackと書いたら担当者の人に目の色は Brown と直されました。その時初めて自分の目は Brown と分類されることに気づきプチ衝撃をうけましたぜ。同じような衝撃は、どこかで Alien と書いてある列に並べ、と言われたときもですかね。Alien といってシガニー・ウィーバー主演の「あれ」を思い浮かべたから。俺はアレかと。閑話休題。
まずはデータセットのロードから
いつものようにデータセットのロードからですが、今回初登場のデータ構造が、
table
であります。R言語には、2次元の行列であるMatrix、多次元のベクトルであるArrayなどもあるなかで、tableは多次元だけれども整数データの格納に適した構造みたいです。まさにクロス集計表向き。ロードしたデータは以下のように3次元。第1次元は4種、第2次元も4種、そして第3次元は2種のデータに分類。
mosaicplotの威力
上記のようなクロス集計表の図示に威力を発揮するのが、mosaicplotみたいです。とりあえず例のとおり、データセットをmosaicplotに渡してみました。
mosaicplot(HairEyeColor)
出力されたプロットは以下です。3次元、4x4x2に分類される集計結果を長方形の面積としてプロットしてくれています。何か大きく、何が小さいのかなど一目瞭然?ホントか?
しかし、上記のように色気のないグレー単色ではイマイチ視認性に欠ける気がします。以下のオプションをTRUEとすると、カテゴリの中で大きな比重のもの(青系)や稀なもの(赤系)を色付けしてくれます(実際には残差もとに計算しているみたい。)
mosaicplot(HairEyeColor, shad=TRUE)
上記の出力が冒頭のアイキャッチ画像に。これならカラフルで分かり易いかも(個人の感想です。)
apply登場
3次元の集計表、3次元目は男女の性別ですが、そこは無視して集計しなおし、というようなことで使えるのが、R言語の独特なデータ処理関数群の一つ apply であります。今回は、3次元から2次元への集約に使ってみると。こんな感じ。
性別抜きの2次元の表に変換できました。これまた mosaicplotに食わせてみます。何となく目の色に近い(BrownじゃなくてBlackだけれども)色で塗分けてみました。
mosaicplot(x, main="Relation between hair and eye color", color=c(1,4,2,3))
出力結果はこんな感じ。やっぱり黒髪には黒い(正しくはBrown)目、金髪には青い目が多いのね。
とりあえず、データセットの解説ページの例にはなかった色を付けられたからよしとします(ゆるゆるだな。)