ページ

2016年2月29日月曜日

【R】分割表の自動カテゴリー統合プログラム : optrecod (その1)

分割表(クロス集計表)で行の変数と列の変数の独立性を検定するにはピアソンのカイ自乗適合度検定を使うのが定石である。しかし、これには弱点がある。


  • 多項分布を正規分布で近似したもの:従って、セル内の推定確率が著しく小さい場合は、当然、誤差が生じる。そのために、連続性を加味したイエーツ近似 (私は詳しくない。修正しすぎ、との批判があり、あまり使われないらしい)、あるいはフィッシャーの正確確率検定 が使われる。フィシャーの検定は恐ろしく計算機コストがかかり、実用的でない場合がある(Rで計算するとエラーを吐き出して終わるケースが多々)。
  • そもそもセル内の推定確率が著しく小さいのは、カテゴリーを細かく分け過ぎているため。当然、リコードすれば上の近似の問題は解消される。しかし、カテゴリーを統合しすぎれば意味のない分析になり、誤った統合を行うと、統合したにも関わらずP値は上昇してしまう。
今回はこの問題を自動的に解消するプログラムを作ろうと思う。

方針
方針は以下のとおりだ。
  • 多項分布を前提とし、正規分布近似を行わない。
  • 統合がうまく行っているかどうかは、赤池の情報量基準AICで判断する。
  • 自動化のために、AICが最も低下するようなリコードを実行する。
  • 自動化のために、再帰プログラムとする。

まずは多項分布モデルとそのAICについておさらいをしておこう。(詳しくは坂本・石黒・北川「情報量統計学」共立出版(株)1991を参照のこと。)

次のような分割表を考える。

2×2分割表
変数xとyのクロス集計表

各変数のカテゴリーがx1,x2,y1,y2と表現されている。nは出現頻度。

y1 y2
x1 n11 n12
x2 n21 n22

上には2×2分割表を示しているが、一般のp×q分割表も同様に考えることが出来る(モデルでは一般的に表現する)。

これに対して次のような確率関数を当てはめる。

モデル1(xとyが非独立の場合)
\[
P_{1}(n_{ij} | p_{ij}) = \frac{N!}{\prod_{ij} n_{ij}!} \prod_{i,j} p_{ij}^{n_{ij}}
\]
ただし(・は添え字で総和をとる操作)、
\[
p_{\cdot \cdot} = 1, \; n_{\cdot \cdot} = N
\]

モデル0(xとyが独立の場合)
\[
P_{0}(n_{ij} | p_{i},q_{j}) = \frac{N!}{\prod_{ij} n_{ij}!} \prod_{i,j} (p_{i} q_{j})^{n_{ij}}
\]
ただし、
\[
p_{\cdot} = 1, \; q_{\cdot} = 1
\]

これを用いて、それぞれのモデルのAICは次のように計算される。
\[
AIC_{1} = -2A -2 \sum_{ij} n_{ij} \log n_{ij} + 2 N \log N + 2(pq -1)
\]
\[
\begin{eqnarray} AIC_{0} & = & -2A -2 \sum_{ij} n_{ij} (\log n_{i \cdot} + \log n_{\cdot j} - \log N) \\ & & + 2 N \log N + 2(p + q -2) \end{eqnarray}
\]
ただし、
\[
A = \log \left( \frac{N!}{\prod_{ij} n_{ij}!} \right)
\]

二つのモデルの差は、

\[
\begin{eqnarray} \Delta AIC & = & AIC_{1} - AIC_{0} \\ & = & -2 \sum_{ij} n_{ij} \log \left( \frac{N \cdot n_{ij}}{n_{i \cdot} \cdot m_{\cdot j}} \right) + 2(p-1)(q-1) \\ & \simeq & -\chi^{2} + 2(p-1)(q-1) \end{eqnarray}
\]

この分割表が意味を持つかどうか(独立性の検定に相当)は、⊿AICの符号によって判断できる(正であればAICが独立の場合よりも悪化していると考える)。

次回は上の独立性判定の分析例、カテゴリー統合(リコード)した場合について考えてみる。