カテゴリカルデータの解析 (その1)

カテゴリカルデータの解析

「アンケート」などに代表されるカテゴリカルデータの解析法についてざっとまとめました.Kashiwa.R#3で発表する内容を文章にしたものです.
内容のほぼすべては,『カテゴリカルデータ解析 (Rで学ぶデータサイエンス 1)』 藤井良宜 2010年 共立出版 を大いに参考にしています.


要約

  • xtab()で集計
  • 変数間の関係性を調べるいろいろな方法がある
  • みかけ上の相関に注意


カテゴリカルデータとは?

連続変数ではなくて,グループで分類されるような変数をもつデータです.
「アンケート」が良い例.グループには,順序グループ (例: なし,軽度,重度) と名義グループ (例: 男性,女性,その他) の2種類があります.
ここでは,データの項目のひとつを「変数」と呼び (例: 症状,性別),項目に含まれる分類を「カテゴリー」と呼びます (例: {なし,軽度,重度},{男性,女性,その他}).


データをR上に載せるまで

省略します….
read.table()関数を使ったり,直にデータフレームを打ち込んだりしてみてください.


個票データと集計データ

個票データ

個票データはひとつひとつの個体情報のリストです.
たとえば,vcdパッケージに含まれるArthritis.これは,関節炎に関する臨床試験のデータで,84人の患者さんひとりひとりの情報が行ごとに記録されているようです.

> install.packages("vcd")
> library(vcd)
> head(Arthritis)
  ID Treatment  Sex Age Improved
1 57   Treated Male  27     Some
2 46   Treated Male  29     None
3 77   Treated Male  30     None
4 17   Treated Male  32   Marked
5 36   Treated Male  46   Marked
6 23   Treated Male  58   Marked


個票データの場合,summary()でそれぞれの変数の概要を知ることができます.

> summary(Arthritis)
       ID          Treatment      Sex          Age          Improved 
 Min.   : 1.00   Placebo:43   Female:59   Min.   :23.00   None  :42  
 1st Qu.:21.75   Treated:41   Male  :25   1st Qu.:46.00   Some  :14  
 Median :42.50                            Median :57.00   Marked:28  
 Mean   :42.50                            Mean   :53.36              
 3rd Qu.:63.25                            3rd Qu.:63.00              
 Max.   :84.00                            Max.   :74.00              


集計データ

集計データは,ひとつひとつの個体情報の集計結果です.
同じくvcdパッケージに含まれるDanishWelfareがこれ.アルコール消費量,収入,婚姻状況,住居の情報について,それぞれの変数のそれぞれのカテゴリーの組み合わせごとに,頻度が記録されています.

> head(DanishWelfare)
  Freq Alcohol Income  Status         Urban
1    1      <1   0-50   Widow    Copenhagen
2    4      <1   0-50   Widow SubCopenhagen
3    1      <1   0-50   Widow     LargeCity
4    8      <1   0-50   Widow          City
5    6      <1   0-50   Widow       Country
6   14      <1   0-50 Married    Copenhagen

集計データの場合は,単にsummary()を適用しても意味がありません.


どちらにしてもxtab()

それではどうするかというと,個票データでも集計データでも,まずはxtab()を適用します.xtab()を使うことで,ひとつ以上の変数について,各カテゴリーの組み合わせごとの度数を表す表形式のデータ (クロス表) が得られます.

> # Arthritisで,処置 (Treatment) と病状がどれだけ改善したか (Improved) の
> # カテゴリーの組み合わせごとの頻度.
> (arthritis.imp.tre <- xtabs(~ Improved + Treatment, data = Arthritis))
        Treatment
Improved Placebo Treated
  None        29      13
  Some         7       7
  Marked       7      21
> # DanishWalfareで,アルコール消費量 (Alcohol) と収入 (Income) の
> # カテゴリーの組み合わせごとの頻度.
> (danish.alc.inc <- xtabs(Freq ~ Alcohol + Income, data = DanishWelfare))
       Income
Alcohol 0-50 50-100 100-150 >150
    <1   382    748     273  936
    1-2  150    567     437  929
    >2    34    161     144  383

個票データではデータのカウント数を指定しないのに対し,集計データでは頻度 (Freq) を指定しているのに注意してください.
なんとも簡単に集計作業ができてしまいます:)


度数でなく割合を見たいときにはprop.table()関数を使います.
marginで,何に対する割合にするかを指定します.

> round(prop.table(arthritis.imp.tre, margin = 2), 2)
        Treatment
Improved Placebo Treated
  None      0.67    0.32
  Some      0.16    0.17
  Marked    0.16    0.51
> # アルコール摂取量 (Alcohol) ごとのそれぞれの収入状況 (Income) の割合
> round(prop.table(danish.alc.inc, margin = 1), 2)
       Income
Alcohol 0-50 50-100 100-150 >150
    <1  0.16   0.32    0.12 0.40
    1-2 0.07   0.27    0.21 0.45
    >2  0.05   0.22    0.20 0.53


xtabs()を用いた操作をマスターすれば,カテゴリカルデータを解析する作業が非常に楽になります.
table()関数でも同じことができるようですが,ここでは省略してしまいます:(


その2 につづく