χ2 (カイ二乗) 検定
適合度検定や独立性の検定は全て同じ関数 chisq.test() で行うことが出来る.この場合,引数のデータの形式と引数に確率を入れるかで検定内容が異なる.
検定したいデータの形式
以下の 1.2 が適合度検定,3 ~ 5 が独立性の検定である.いずれの場合も引数に correct=F を入れることで連続性の補正を抑制することが出来る.
検定関数の記述例
上のデータ形式それぞれの入力例である.
chisq.test(c(8, 12, 10, 9, 5, 6)) chisq.test(c(20,8,5,2), p=c(4, 3, 2, 1)/10) chisq.test(matrix(c(20, 15, 16, 4, 15, 7, 9, 4), ncol=4, byrow=T)) chisq.test(matrix(c(20, 15, 16, 9), ncol=2, byrow=T)) chisq.test(matrix(c(20, 15, 16, 4, 15, 7, 9, 4, 10), ncol=3, byrow=T)) |
実際の検定例
例えば以下のようなデータが取られた場合に,『第一外国語の単位を取得する』ことと『第二外国語の単位を取得する』ことに関連があるかを検定することを考える.
| 第一外国語 | 合計 | ||
単位取得 | 単位取得不可 | |||
第二外国語 | 単位取得 | 14 | 8 | 22 |
単位取得不可 | 4 | 17 | 21 | |
合計 | 18 | 25 | 43 |
このような場合は,例えば χ2 検定を用いればよい.
x <- matrix(c(14, 8, 4, 17), ncol=2, byrow=T) chisq.test(x) Pearson's Chi-squared test with Yates' continuity correction data: x X-squared = 7.0406, df = 1, p-value = 0.007968 |
χ2 検定は近似的な方法である.正確な計算を行う場合は,フィッシャーの直接確率検定を用いる.関数は fisher.test() を使い,引数には 2×2 の行列を与えればよい.
x <- matrix(c(14, 8, 4, 17), ncol=2, byrow=T) fisher.test(x) Fisher's Exact Test for Count Data data: x p-value = 0.005089 alternative hypothesis: true odds ratio is not equal to 1 95 percent confidence interval: 1.567890 39.549785 sample estimates: odds ratio 7.051895 |
フィッシャーの直接確率検定 (分割表が 2×2 よりも大きい場合)
上の場合は 2×2 の行列を引数に与えたが,分割表が 2×2 より大きい場合 (第二外国語を細分化する場合など) は,同じサイズの行列を引数に与えてフィッシャーの直接確率検定を用いればよい.
異なる状況下で同じ個体 (例えば学生) から2回データを取った場合など,関連のある (対応のある) 2つの集団からデータが取られた場合に,半年の間に単位取得状況に変化があるかを検定する場合はマクネマー検定を用いる.
| 前期の英語 | 合計 | ||
単位取得 | 単位取得不可 | |||
後期の英語 | 単位取得 | 14 | 8 | 22 |
単位取得不可 | 4 | 17 | 21 | |
合計 | 18 | 25 | 43 |
関数は mcnemar.test() を使い,引数には 2×2 の行列を与えればよい.このとき,correct=F を引数に与えることで,連続性の補正を抑制することが出来る.
x <- matrix(c(14, 8, 4, 17), ncol=2, byrow=T) mcnemar.test(x, correct=F) McNemar's Chi-squared test data: x McNemar's chi-squared = 1.3333, df = 1, p-value = 0.2482 |
マクネマー検定 (分割表が 2×2 よりも大きい場合)
異なる状況下で同じ個体 (例えば学生) から2回データを取った場合など,関連のある (対応のある) 2つの集団からデータが取られた場合に,調査項目が3つ以上で,半年の間に単位取得状況に変化があるかを検定する場合もマクネマー検定を用いる.この時,引数には分割表と同じサイズの行列を与えればよい.
「あなたは納豆が好きですか?」 という質問に対して,東京では 300 人中 245 人が,大阪では 250 人中 157 人が好きだと答えた場合に,好きな人の割合に差があるかどうか検定する場合は関数 prop.test() を使う.このとき,correct=F を引数に与えることで,連続性の補正を抑制することが出来る.
prop.test(c(245, 157), c(300,250), correct=F) 2-sample test for equality of proportions without continuity correction data: c(245, 157) out of c(300, 250) X-squared = 24.6789, df = 1, p-value = 6.772e-07 alternative hypothesis: two.sided 95 percent confidence interval: 0.1144583 0.2628750 sample estimates: prop 1 prop 2 0.8166667 0.6280000 |
オッズ比とその信頼区間を求める場合はパッケージ vcd を呼び出した後で summary(oddsratio(table(A,B),log=F)) を実行すればよい.このとき,対数オッズ比を計算する場合は引数 log=F をつけないこと.
いくつかの群の比率が独立変数と線形傾向があるかどうかを検定するための関数 prop.trend.test() がある.これはコクラン・アーミテージ検定といわれる検定方法である.指定は prop.trend.test (ベクトル1, ベクトル2) とすればよい.
ある納豆の製造会社が,大阪の人 10 人に「新製品『なっとうよん』を食べる前の納豆に対する評価」と「『なっとうよん』を 1 週間食べ続けてもらった後の納豆に対する評価」をアンケートで調査した.5 段階(5:良い ~ 1:悪い)で評価してもらった結果は以下の通りになった.
5:良い ~ 1:悪い |
| A | B | C | D | E | F | G | H | I | J |
食べる前 | 4 | 1 | 1 | 2 | 1 | 2 | 4 | 3 | 3 | 2 | |
食べた後 | 2 | 1 | 3 | 1 | 5 | 1 | 5 | 3 | 3 | 1 | |
前 - 後 | - | 0 | + | - | + | - | + | 0 | 0 | - |
1 週間で納豆の好き嫌いの割合に差があったかどうかを検定するときは符号検定を行う
x <- c(4, 1, 1, 2, 1, 2, 4, 3, 3, 2) y <- c(2, 1, 3, 1, 5, 1, 5, 3, 3, 1) binom.test(c(length(x[x>y]), length(x[x < y]))) Exact binomial test data: c(length(x[x > y]), length(x[x < y])) number of successes = 4, number of trials = 7, p-value = 1 alternative hypothesis: true probability of success is not equal to 0.5 95 percent confidence interval: 0.1840516 0.9010117 sample estimates: probability of success 0.5714286 |
コインを多数回投げた結果について,表と裏の出る確率が等しくなっているかを検定する場合は,比率の同一性検定 prop.test(表が出た回数, 裏が出た回数, p = 0.5) を行う.これは近似による検定なので,正確な検定を行う場合は二項検定 binom.test() を行えばよい.
binom.test(c(257, 243), p=1/2) # binom.test(表が出た回数, 裏が出た回数, 表が出る確率) |
例えば,A さんと B さんが同じものを測定することを考える.A さんと B さんの評価の一致度を測る場合は κ (カッパ) 係数を用いる.
| A さん | |||
良い | 普通 | 悪い | ||
B さん | 良い | 80 | 15 | 5 |
普通 | 10 | 40 | 20 | |
悪い | 5 | 10 | 25 |
κ (カッパ) 係数を計算する際は,パッケージ vcd を呼び出した後で関数 Kappa() を実行すればよい.
measure2 <- matrix(c(80, 15, 5, 10, 40, 20, 5, 10, 25), 3, byrow=T) Kappa(measure2) value ASE lwr upr Unweighted 0.4915254 0.05492153 0.3838812 0.5991696 # カッパ係数 Weighted 0.4736842 0.08145561 0.3140342 0.6333343 # 重みつきカッパ係数(不一致の程度も考慮) |
κ (カッパ) 係数に関連して,信頼性係数 ICC (Intraclass correlation coefficient) を求める場合は,パッケージ irr 中の関数 icc() を用いればよい.
data(anxiety) icc(anxiety, model="twoway", type="agreement") |