スタートページ> JavaScript> 他言語> R言語
下はある質問の賛成比率です。男性と女性により賛成比率に差があるかを検討したいのです、
賛成 反対 男性 40(a) 10(b) 女性 4(c) 16(d)
このような問題を「2×2分割表の検定」といいます。
考え方
p1(男性の賛成/反対比率)= 40/10 = 4
p2(女性の賛成/反対比率)= 4/16 = 0.25
p1/p2 = 4/9,25 = 16 これを odds という。
この p1/p2 が1に近ければ「差がない」といえます。
それには、
対立仮説:p1/p2 ≠ 1 比率に差がある
帰無仮説:p1/p2 = 1 比率に差がない
として、P値を求め
、
P<0.05 帰無仮説の発生確率は低い→差があるといえる。
P>0.05 帰無仮説の発生確率はかなりある→差があると決めつけられない。
とすればよいのです。
すなわち、「2×2分割表の検定」とは、上の表の a~dのデータからPを計算することです。
それには、カイ2乗検定(chisq.test)とフィッシャーの正確確率検定(fisher.test)があります。
chisq.test は、χ2を計算してχ2からP値を算出します。χ2を介するために正確度が劣ります。
それに対して、fisher.test は直接にP値を計算します、精度はよいのですが、複雑な計算を伴うので大規模な問題には非効率です(2×2では問題はありませんが)。
なお、2×2分割表では、横・縦の合計がわかっているならば、a~dの1つを決めれば他の値も決まります。自由に値を決められるのは1つだけなので、自由度は1になります。
賛成 反対 男性 40 10 女性 4 16 男性と女性により賛成比率に差があるか
chisq.test(matrix(c(40,10, 4,16), nrow=2, byrow=T)) # 男性 ┘ └ 女性 # Pearson's Chi-squared test with Yates' continuity correction # data: matrix(c(40, 10, 4, 16), nrow = 2, byrow = T) # X-squared = 19.533, df = 1, p-value = 9.888e-06 < 0.05 帰無仮説は棄却→差がある #
〓〓〓 上の問題(明らかに差がある例)
fisher.test(matrix(c(40,10, 4,16), nrow=2, byrow=T))
# Fisher's Exact Test for Count Data
# data: matrix(c(40, 10, 4, 16), nrow = 2, byrow = T)
# p-value = 4.719e-06 < 0.05 帰無仮説は棄却→差がある
# alternative hypothesis: true odds ratio is not equal to 1
# ↑ └ = ad/cb = p1/p2
# └ 対立仮説:p1/p2 ≠ 1 比率に差がある
# ⇔ 帰無仮説:p1/p2 = 1 比率に差がない
# 95 percent confidence interval: odds(p1/p2) の95%信頼区間
# 3.84091 76.66866 4/9,25 = 16 はこの範囲に入っている ★
# 信頼下限 信頼上限
# sample estimates:
# odds ratio
# 15.16792 標本から計算した p1/p2
# chisq.test より fisher.test のほうが得られる情報が多い
# 〓〓〓 差がないと明らかな例)
# 賛成 反対
# 男性 26 24
# 女性 10 10
# odds = p1/p2 = ad/cb = (26*10)/(10*24) = 1.08
fisher.test(matrix(c(26,24, 10,10), nrow=2, byrow=T))
# Fisher's Exact Test for Count Data
# data: matrix(c(26, 24, 10, 10), nrow = 2, byrow = T)
# p-value = 1 > 0.05 帰無仮説は棄却されない→差があるとはいえない ★
# alternative hypothesis: true odds ratio is not equal to 1
# 95 percent confidence interval: odds(p1/p2) の95%信頼区間
# 0.3370891 3.4775463 1,08 はこの範囲に入っている
# 信頼下限 信頼上限
# sample estimates:
# odds ratio
# 1.082094 標本から計算した odds
# 〓〓〓 男性のほうが賛成比率が大だといえるか(上側検定)
fisher.test(matrix(c(40,10, 4,16), nrow=2, byrow=T), alternative="g")
# Fisher's Exact Test for Count Data
# data: matrix(c(40, 10, 4, 16), nrow = 2, byrow = T)
# p-value = 4.719e-06 < 0.05 →大だといえる ★
# alternative hypothesis: true odds ratio is greater than 1
# 95 percent confidence interval:
# 4.586901 Inf
# sample estimates:
# odds ratio
# 15.16792
# 〓〓〓 男性のほうが賛成比率が小だといえるか(下側検定)
fisher.test(matrix(c(40,10, 4,16), nrow=2, byrow=T), alternative="l")
# Fisher's Exact Test for Count Data
# data: matrix(c(40, 10, 4, 16), nrow = 2, byrow = T)
# p-value = 1 < 0.05 →大だとはいえない ★
# alternative hypothesis: true odds ratio is greater than 1
# 95 percent confidence interval:
# 0.00000 59.63688
# sample estimates:
# odds ratio
# 15.16792
# ケースA # matrix(c(10, 12, 8, 14, 12, 計算による理論値 # 11, 11, 9, 13, 13), 実験による計測値 # nrow=2, byrow=T) # 計測値は理論値に合致しているといえるか(両側検定) # ケースB # --- 項目 --- # matrix(c(10, 12, 8, 14, 12, 対策前 # 15, 18, 17, 10, 10), 対策後 # nrow=2, byrow=T) # 対策により向上したといえるか(上側検定)
〓〓〓 ケースA chisq.test chisq.test(matrix(c(10, 12, 8, 14, 12, 11, 12, 9, 13, 13), nrow=2, byrow=T)) # Pearson's Chi-squared test # data: matrix(c(10, 12, 8, 14, 12, 11, 12, 9, 13, 13), nrow = 2, byrow = T) # X-squared = 0.14844, df = 4, p-value = 0.9974 > 0.05 → 差があるとはいえない →合致している 〓〓〓 ケースA fisher.test fisher.test(matrix(c(10, 12, 8, 14, 12, 11, 12, 9, 13, 13), nrow=2, byrow=T)) # Fisher's Exact Test for Count Data # data: matrix(c(10, 12, 8, 14, 12, 11, 12, 9, 13, 13), nrow = 2, byrow = T) # p-value = 1 > 0.05 差があるとはいえない →合致している # alternative hypothesis: two.sided 両側検定 # 2x2 と異なり、P値しか得られません。 〓〓〓 ケースB fisher.test fisher.test(matrix(c(10, 12, 8, 14, 12, 15, 18, 17, 10, 10), nrow=2, byrow=T), alternative="g") # Fisher's Exact Test for Count Data # data: matrix(c(10, 12, 8, 14, 12, 15, 18, 17, 10, 10), nrow = 2, byrow = T) # p-value = 0.3178 > 0.05 → 差があるといえる → 改善されたといえる # alternative hypothesis: g 上側検定