今回のサンプルデータセットは皆さんよくご存じのタイタニック号です。映画タイタニックも見ましたが、この老人の記憶の奥底にあるタイタニックはTVドラマ「タイムトンネル」のタイタニックなんであります。といって若者も中年も知らないか、タイムトンネル、SFタイムトラベル物の嚆矢かと。それはさておきデータ処理にとりくみますです。
※「データのお砂場」投稿順Indexはこちら
R言語のサンプルデータセットをABC順(大文字先)で端から試してみています。今回のサンプル・データセットの解説ページへのリンクは以下です。
Survival of passengers on the Titanic
久しぶりにカテゴリカルデータです。4次元のテーブル。内訳は、
-
- Class 1等、2等、3等 そして乗組員というクラス分け
- Sex 女性か男性か
- Age 大人か子供か
- Survived 最後は恐ろしい、生存できたか否か
です。なお、上記のページに書いてありましたが、タイタニック号専門のウエブサイトがあるのですな、以下に。
まずは生データ
いつものように生データを眺めてみます。head()の出力は長いので途中までで切ってしまいました。
プロットと再集計
データ数はそれほど多くないのですが、4次元のテーブルなので、ちょっと込み入っていて全貌の把握がしずらいです。以前にカテゴリカルデータを扱ったときに定石を学びました。
-
- まずはモザイクプロットでデータの全貌を眺める
- 次に apply関数使って、切り口を変えて再集計してみる
解説ページに記載されている処理例もこのステップ通りだったです。まずはモザイクプロット。処理例では無色でしたが、前回学んだのでチョイと色を付けてみましたぜ。コマンドが以下に。
mosaicplot(Titanic, main = "Survival on the Titanic", shad=TRUE)
冒頭にも掲げましたが結果が以下に。恐ろしいことにYesが生存、Noはおなくなりです。
その後、各次元で再集計をしてみているのですが、処理例では、子供か大人か、女性か男性かという集計をしているのに、1等、2等。。。のクラスでは集計していないのです。なぜ? 当方では忖度無に集計してみました。
apply(Titanic, c(3, 4), sum) apply(Titanic, c(2, 4), sum) apply(Titanic, c(1, 4), sum)
ただ、上記の処理では度数(人数)は分かるのですが、割合は分かりずらいです。そこで割合を棒グラフにしてみました。なお、お子さんか大人かのグラフは大多数が大人ばかりでイマイチだったので割愛いたしました。以下は性別毎の処理。
sexTable <- prop.table(apply(Titanic, c(2, 4), sum)) barplot(sexTable)
濃い灰色は男性です。生存者(Yes)をみると男女半々ですが、おなくなりになった方(No)を見ると、男性の割合が非常に多いことが分かります。
以下は忖度なし、クラス別のグラフ。
classTable <- prop.table(apply(Titanic, c(1, 4), sum)) barplot(classTable)
下から、1等、2等、3等、乗組員さんです。1等の方が生存しとりますな。やっぱり。そして乗組員さんは最後まで頑張った感じがいたします。
対数線形モデル
解説ページの処理例では、applyした後、further analysisにはloglm()使えというコメントがあり(でも実例ないのです。)対数線形モデル、何だかよく分かりませんが、ともかく処理かけてみました。分からなくてもRなので計算は出来てしまう~。こんな感じ。
library(MASS) survive <- loglm(~ Class + Sex + Age, data = Titanic)
統計的な結果がこちら。ううむサッパリです。
そして各次元での様子がこちら。この結果をどう理解すべきかこれまたサッパリです。
素人は勉強しないと結果を読むこともできませんな。また以下の
同志社大様の方のページを読ませていただいて勉強しますか?(読んでも理解せんとな、自分。)