クロス表の分析
2×2分割表,あるいはk×l分割表で集計されたデータを分析する方法のひとつが独立性の検定である。これは,例えば,性別という要因と免許の有無という要因の2要因間の関連を確かめるための検定方法である。以下に紹介する連関係数も目的としては独立性の検定と同じものである。というか,2要因間にどの程度の関連があるかを表す指標が連関係数であり,その係数の有意性の検定として独立性の検定が行われるといってよい。
Contents
|
T 2変数間の関連性をみる
四分点相関係数は2×2分割表で集計されたデータのみに適用できるもので,k×l分割表で集計されたデータには適用できません。
この四分点相関係数は以下のように各カテゴリを0と1に置き換えて,その相関係数を求めてあげれば算出することができます。そして,この係数の有意性の検定は独立性の検定かフィッシャーのExact検定を適用すればよろしい(2×2分割表の場合はフィッシャーのExact検定を行った方が良い)。
また,四分点相関係数の値の取りうる範囲は -1≦φ≦1 です。ただし,名義尺度を扱う場合においてはマイナスの値は意味を持たないので,通常は四分点相関係数の絶対値をとります。
Rで四分点相関係数を求めてみる
> x <- c(1,1,1,1,1,0,0,0,0,0) > y <- c(1,1,1,1,0,1,1,0,0,0) > cor(x,y) #四分点相関係数 [1] 0.4082483 > fisher.test(my.table) #フィッシャーのExact検定 Fisher's Exact Test for Count Data data: my.table p-value = 0.5238 alternative hypothesis: true odds ratio is not equal to 1 95 percent confidence interval: 0.2180460 390.5629165 sample estimates: odds ratio 4.918388
四分点相関係数を求めるための関数はこちら
ユールの連関係数も2×2分割表にのみ適用できる連関係数です。ユールの連関係数Qは次式によって求めることができます。
この連関係数は関連が強いほど1あるいは-1に近づき,完全に独立している場合は0になります。これもまた名義尺度を扱う場合にマイナスの値は意味をもたないので,絶対値をとる必要があります。
A' B' A n11 n12 B n21 n22
ユールの連関係数を求めるための関数はこちら
前述した2つの連関係数は2×2分割表にのみ適用できるものでしたが,このクラメールの連関係数はk×l分割表にも適用することができます。もちろん,2×2分割表にも適用できるのですが,その場合は四分点相関係数の値の絶対値と一致します。また,この値はカテゴリ数がいくつであっても必ず0から1の範囲をとります。
クラメールの連関係数Vは次式によって求められます。ただし、次式はk×l(k <= l)分割表について計算されるものです。クラメールの連関係数は行列を転置しても、その計算結果は同じものになります。例えば2×3の行列をインプットとした場合も、3×2の行列をインプットとした場合も同じ値になるということです。しかし、次式は前述したように k×l(k <= l) という条件を課している点に注意してください(インプットとして、行数は列数「以下」でなくてはならない、ということです)。
A' B' C' 計 A n11 n12 n13 n1. B n21 n22 n23 n2. C n31 n32 n33 n3. 計 n.1 n.2 n.3 N
クラメールの連関係数を求めるための関数はこちら
U クロス表における多重比較
クロス表の分析というのは単純のようですが,意外とややこしい部分が多くあります。その1つがクロス表における多重比較の方法です。今回は1×l分割表,k×2分割表,k×l分割表の3種類についての分析を例に挙げて説明していきます。
1- 1×l分割表の分析 Rのchisq.test()を使用。
カテゴリA | カテゴリB | カテゴリC | カテゴリD | カテゴリE | |
度数 | 63 | 25 | 33 | 40 | 19 |
帰無仮説 ・・・ 各カテゴリの度数に違いはない
検定結果 ・・・ X-squared = 32.3333, df = 4, p-value = 0.000001635
解釈 ・・・ カテゴリによって度数に違いがあるようだ。
さて,最終的に「カテゴリによって度数に違いがある」ということが分かったのですが,さらにカテゴリAとカテゴリBとを比較したらどちらの方が有意に高いといえるかを調べたいときも出てきます。そのような場合には次のようにして多重比較を行います。
1) 各カテゴリの比率を計算する。
カテゴリA | カテゴリB | カテゴリC | カテゴリD | カテゴリE | 合計 | |
度数 | 63 | 25 | 33 | 40 | 19 | 180 |
比率 | 0.350 | 0.138 | 0.183 | 0.222 | 0.105 | 1 |
2) 比率の大きい順に並べ替える(別に並び替えなくても良いのですが分かりやすいので)。
A(0.350) > D(0.222) > C(0.183) > B(0.138) > E(0.105) |
3) 各カテゴリ間の比率の差を表にまとめる。
A D C B E A 0.128 (2) 0.167 (3) 0.212 (4) 0.245 (5) D 0.039 (2) 0.084 (3) 0.117 (4) C 0.045 (2) 0.078 (3) B 0.033 (2)
・・・ (式1)
ここに, α:有意水準, m:カテゴリ数, r:
1回目の比較・・・r = m
2回目の比較・・・r = m -1
3回目の比較・・・r = m -2
・
・
・
n回目の比較・・・r = m - (n -1)
5) 4)で設定した有意水準でchisq.test()を用いて検定を行う。検定を行う順番は3)のところでまとめた表において,1回目の比較が(5):{A vs E}, 2回目の比較が(4):{A vs B}{D vs E}, 3回目の比較が(3):{A vs C}{D vs C}{C vs E}, 4回目の比較が(2):{A vs C}{D vs C}{C vs B}{B vs E}という順に比較を行っていきます。
分析例
1回目の比較 ・・・ α' = 2 * 0.05 / (5 * (5 - 1)) = 0.005
#{A vs E} > dat <- matrix(c(63,19),ncol=2) > dat [,1] [,2] [1,] 63 19 > chisq.test(dat) Chi-squared test for given probabilities data: dat X-squared = 23.6098, df = 1, p-value = 0.00000118
したがって,α' = 0.005 > p-value = 0.00000118なのでAとEは有意差ありと判断します。ただし,この段階で有意差が認められなかった場合はその時点で検定を終了します。有意差が認められれば次の比較に移ります。
2回目の比較 ・・・ α' = 2 * 0.05 / (5 * (4 - 1)) = 0.006666667
#{A vs B} > dat <- matrix(c(63,25),ncol=2) > dat [,1] [,2] [1,] 63 25 > chisq.test(dat) Chi-squared test for given probabilities data: dat X-squared = 16.4091, df = 1, p-value = 0.00005104 #{D vs E} > dat <- matrix(c(40,19),ncol=2) > dat [,1] [,2] [1,] 40 19 > chisq.test(dat) Chi-squared test for given probabilities data: dat X-squared = 7.4746, df = 1, p-value = 0.006258
したがって,α' = 0.006666667 > p-value = 0.00005104なのでAとBには有意差あり,α' = 0.006666667 > p-value = 0.006258なのでDとEにも有意差ありと判断します。これと同じように以降,検定を進めて行きます。
2- k×2分割表の分析 Rのprop.test()を使用。
カテゴリA | カテゴリB | |
グループA | 58 | 34 |
グループB | 38 | 40 |
グループC | 71 | 29 |
帰無仮説 ・・・ 3つのグループにおいてカテゴリAの比率は等しい
検定結果 ・・・ X-squared = 9.3046, df = 2, p-value = 0.00954
解釈 ・・・ グループによってカテゴリAの比率が異なる
さて,最終的には「グループによってカテゴリAの比率が異なる」と分かったのですが,グループAとグループBとでは差があるのかといったことを調べたい場合もでてきます。そのような場合は次のようにして多重比較を行います。
1) カテゴリAの比率を計算する。
カテゴリA | カテゴリB | 合計 | カテゴリAの比率 | |
グループA | 58 | 34 | 92 | 0.630 |
グループB | 38 | 40 | 78 | 0.487 |
グループC | 71 | 29 | 100 | 0.710 |
2) 比率の大きい順に並べ替える(別に並び替えなくても良いのですが分かりやすいので)。
グループC(0.710) > グループA(0.630) > グループB(0.487) |
3) 各カテゴリ間の比率の差を表にまとめる。
グループC | グループA | グループB | |
グループC | 0.079 (2) | 0.222 (3) | |
グループA | 0.143 (2) |
4) (式1)によって名義的有意水準を設定する。
5) 以下のような組み合わせで対比較していく。
1回目 ・・・ {グループC vs グループB}
2回目 ・・・ {グループC vs グループA}{グループA vs グループB}
基本的にやり方は1×k分割表の分析と同じです。ただし,使用する関数はprop.test()です。
3- k×l分割表の分析 Rのchisq.test()を使用。
このような複雑な分割表においては多重比較など行わない方が無難です。
その理由は,
ということです。何でもかんでも多重比較すればよいというわけではないのですわ(1つ覚えればそれをどこにでも使いたくなるものですが無用な多用は禁物)。