<< トップページへ

<< 目次へ

最終更新日 : 2008.11.11

カテゴリカルデータ解析の仕組み



 カテゴリカルデータとは名義尺度の尺度水準をもつデータのことである。名義尺度であるデータは順序性や等間隔性が存在しておらず、ここで扱われる数値は分類的に割り当てられた単なるラベルにすぎないのである。ただし、生死、有無、男女といったような2つの水準(この水準という用語はカテゴリ、属性、レベルなどともいうのであった)しか持たないようなカテゴリカルデータのことを特に2値データという。2値データはカテゴリカルデータの特別な場合で、これは名義尺度でありながらも間隔尺度としても扱うことができるのである。この2値データ(0と1とで表される)の特性を利用したものがカテゴリカルデータの解析法である。

 ここではカテゴリカルデータ解析の仕組みを解説する。そのために、まずは最も単純な例について考えてみよう。表1はある大学生の男女別身長データである。いうまでもないが、ここでは性別と身長という2つの変数が扱われることになる。そして性別はカテゴリカル型(maleとfemaleの2つの水準をもつ)、身長は連続型(単位cmという"長さ")である。

表1 男女別の身長データ
性別 male, male, male, male, female, female, female, female
身長 175, 180, 169, 177, 156, 170, 165, 160

 さて、これを分散分析モデルとして扱う場合、次のようにモデル式として表すことができるのであった。

身長 = 性別 (性別はカテゴリカル型)

 そして、このモデルをRで解析するためには次のようにコマンドする。

> sex <- rep(c("male", "female"), c(4, 4))
> sex <- factor(sex, levels=c("male", "female"))
> height <- c(175, 180, 169, 177, 156, 170, 165, 160)
> result <- lm(height ~ sex)
> summary(result)

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  175.250      2.704  64.807 9.08e-10 ***
sexfemale    -12.500      3.824  -3.269   0.0171 *  
---

 最終的に得られたモデル式は次のようになる。

height = 175.25 - 12.50 * sex

 このモデル式の意味は、定数項(切片)は男性の身長の平均値を表しており、sexの係数である-12.50という値は定数項からこの値を引いたとき女性の身長の平均値になる。いいかえれば、sex = 1のとき175.25 - 12.50 * 1 = 162.75となり、これは女性身長の平均値と一致し、sex = 0のとき175.25 - 12.50 * 0 = 175.25となり、これは男性身長の平均値と一致するわけである。

 ここまでは既に解説済みのことであるが、なぜ独立変数がカテゴリカル型である場合に上記モデル式にあるような、定数項および係数が導き出されるのかはまだ解説していない。そこで、どのようにしてカテゴリカル型の変数が処理されているかをここで解説する。

 カテゴリカル型の変数はダミー変数に置き換えられて解析される。ダミー変数とは0と1だけでそのデータのもつ情報を表すものである。例えば、性別というカテゴリカル型変数は男性と女性という2つの水準をもっている。ここで男性と女性とを0と1だけで表現するにはどうすればよいかを考えることになる。

 ダミー変数は水準の数だけ用意される。すなわち、男性と女性という2つの変数を"とりあえず"用意するわけである。それから、もしある被験者が男性であるならば、男性であるという証のために1を入力する。当然ながら、男性である場合は女性ではありえないので、女性ではないという証のために0を入力する。したがって、表2において、被験者A-Dまでの4人は男性ということになるし、E-Hまでの被験者は女性であるということを意味している。

表2 性別のダミー変数
被験者 男性 女性
A
B
C
D
E
F
G
H
1
1
1
1
0
0
0
0
0
0
0
0
1
1
1
1

 実際に解析に用いる場合は最初の列の変数を削除して解析することになる。なぜなら、それはたとえ1列目の変数(男性という変数)を削除しても必要な情報は失われないからである。例えば、女性の変数において0ということは、それは女性ではないということを意味しているわけであるから、男性であるということの情報を失っていることにはならないのである。

 それでは実際に表2のダミー変数を用いて解析をしてみよう。すると、その結果は先ほどの結果と完全に一致するのが確認できる。要するにカテゴリカル型として指定された変数を独立変数として解析するということは、その変数をダミー変数に置き換えて解析しているということなのである。そしてこれがカテゴリカルデータ解析の基本的な仕組みである。

# ダミー変数を用意する
> female <- c(0, 0, 0, 0, 1, 1, 1, 1)

# ダミー変数femaleを独立変数として解析
> result2 <- lm(height ~ female)
> summary(result2)

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  175.250      2.704  64.807 9.08e-10 ***
female       -12.500      3.824  -3.269   0.0171 *  
---

 ところで、先の解析では第1列目の変数(男性)を削除して解析をしたが、これを「男性をベースラインとして解析をする」といった言い方をすることがある。Rでは最初の変数をベースラインとして解析するが、SASでは最後の変数をベースラインとして解析するので得られる定数項や係数の値は異なる。しかし、これらは値が異なるものの、そこから得られる結論は全く同じなので心配はない。

 試しに今度はSASが採用しているように最後の変数(女性)をベースラインとして解析してみよう。

> male <- c(1, 1, 1, 1, 0, 0, 0, 0)
> result3 <- lm(height ~ male)
> summary(result3)

Call:
lm(formula = height ~ male)

Residuals:
   Min     1Q Median     3Q    Max 
-6.750 -3.625  0.750  2.875  7.250 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  162.750      2.704  60.185 1.41e-09 ***
male          12.500      3.824   3.269   0.0171 *  
---

 それぞれの解析で得られたモデル式を比べてみよう。

男性をベースラインにした場合 :

height = 175.25 - 12.50 * sex

女性をベースラインにした場合 :

height = 162.75 + 12.50 * sex

 見てのとおり、どの変数をベースラインとしても得られる結論は同じものである。また、SASに準じた形で出力させたい場合はlm()の引数に次のように指定すれば良い。

> result4 <- lm(height ~ sex, contrasts=list(sex="contr.SAS"))
> summary(result4)

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  162.750      2.704  60.185 1.41e-09 ***
sexmale       12.500      3.824   3.269   0.0171 *  
---

 さらに、RともSASとも違ったMinitabのように定数項(切片)が全平均となるようにすることもできる。これについての詳しい計算過程は私もそれほど理解していないが、簡単にいえばRやSASで採用されている方法では最初ないしは最後の変数を基準(0)としているのに対して、Minitabで採用されている方法はすべての変数の合計を基準(0)としている。興味があるならRのcontr.sum()とcontr.SAS()という関数について調べてみるとよい。

> result5 <- lm(height ~ sex, contrasts=list(sex="contr.sum"))
> summary(result5)

Call:
lm(formula = height ~ sex, contrasts = list(sex = "contr.sum"))

Residuals:
   Min     1Q Median     3Q    Max 
-6.750 -3.625  0.750  2.875  7.250 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  169.000      1.912  88.383 1.41e-10 ***
sex1           6.250      1.912   3.269   0.0171 *  
---

 これにおいては、定数項は男女を混みにした全平均となっている。つまり、全平均169.00からの男性の平均値の偏差がsex1の係数として出力されている。すなわち、男性の平均値は169.00 + 6.25 = 175.25と導くことができる。一方で女性の平均値は169.00 - 6.25 = 162.75と導くことができる。これについて、より詳しく学びたい場合は野間口・野間口訳「一般線形モデルによる生物科学のための現代統計学」共立出版(2007)の第3章を参照するとよい。