Topic 4
カイ二乗検定:カテゴリ × カテゴリ × クロス集計表+モザイクプロット
Chi-square test with crosstab and mosaic plot
2つのカテゴリ変数が「独立か」「関連していそうか」を、クロス集計表・期待度数・標準化残差・モザイクプロットまで含めて読む基本ページです。カテゴリ同士の分析で最もよく出てくる手法を、初心者にも分かるように順番に整理します。
このページでは、 学習支援の種類(対照群 / ワークショップ群 / コーチング群) と 試験結果(合格 / 不合格) の関連を例に、カイ二乗検定の考え方、前提条件、R による実装、図の読み方、そしてレポートでの書き方までを一気通貫で扱います。学術レポートを意識しつつも、「まず何を見ればよいか」が迷子にならない構成にしています。
このページのゴール
- カイ二乗検定が「カテゴリ変数どうしの独立性」をみる検定であることを理解する
- クロス集計表、期待度数、χ 2 値、自由度、p 値の読み方を理解する
- 標準化残差とモザイクプロットから「どのセルが関連を特徴づけるか」を説明できるようになる
- 学術レポートで使える日本語 / 英語の書き方を、そのまま応用できるようになる
Start here
まず押さえる4つのポイント
1. まずはクロス集計表を作る
カテゴリ変数どうしの分析では、最初に table() や xtabs() でクロス集計表を作ります。ここが出発点です。
2. 帰無仮説は「独立」
カイ二乗検定の帰無仮説は、「行変数と列変数に関連がなく、独立である」です。p 値が小さいと、独立とは言いにくいと判断します。
3. 有意差だけでは場所が分からない
χ2 検定が有意でも、それだけでは「どのセルが効いているか」は分かりません。期待度数と標準化残差を確認します。
4. モザイク図は文章化の助けになる
モザイクプロットや比率の棒グラフを添えると、「どの群で合格が多い / 少ないか」を視覚的に説明しやすくなります。
Basics
分析の概要と前提条件
どんなときに使うか
カイ二乗検定(Pearson の χ2 検定)は、2つのカテゴリ変数のあいだに関連があるかを調べたいときの基本手法です。今回の例では、学習支援の種類と試験結果の関連を検討します。
必要なデータ形式:1行が1観測で、各行に group と result のようなカテゴリ変数を持たせる方法が分かりやすいです。すでに集計済みの表(count table)から始めても構いません。
何を計算しているのか
まず、もし2変数が独立なら各セルにどれくらい入るはずかという 期待度数 を計算します。次に、観測度数 O と期待度数 E のずれを全セルで足し合わせたものが χ2 統計量です。
- 各観測が互いに独立していること
- セルの期待度数が極端に小さすぎないこと
- データが人数・件数などの 度数 であること(平均値ではありません)
- 自由度は (r - 1) × (c - 1)
Assumption check
前提条件はどう確認するか
カテゴリデータの検定では、正規性ではなく、独立性 と 期待度数の妥当さ が中心になります。
1. 独立性は設計で担保する
同じ人を重複して数えたり、同一対象を前後で並べたりしていないかを確認します。前後比較の 2 値データなら McNemar 検定が候補です。
2. 期待度数を確認する
R の chisq.test() は期待度数を返します。期待度数が小さいセルが多いと、漸近近似による p 値が不安定になることがあります。
3. 割合だけでなく件数も見る
割合が違って見えても、元の n が小さいと不確実性は大きくなります。クロス集計表の件数と、必要なら総数も一緒に確認します。
4. 有意差の位置は残差でみる
χ2 検定は表全体の関連をみる検定です。どのセルが関連を強く押しているかは、標準化残差とモザイク図で補います。
5. 小さい期待度数なら代替法へ
小さな表や期待度数が小さいケースでは、fisher.test() や simulate.p.value = TRUE の利用を検討します。
6. 順序カテゴリかどうかも意識する
Likert など順序のあるカテゴリを名義尺度として扱うのが簡単な第一歩ですが、順序を活かした別の方法が適切なこともあります。
Data structure
データの形をつかむ
このページでは、1行が1人のサンプルデータを使います。R では raw data からクロス集計表を作る流れが分かりやすいです。
分析に使う元データ(先頭12行)
1行が1観測で、group が支援の種類、result が合否です。
| id | group | result |
|---|---|---|
| 1 | 対照群 | 合格 |
| 2 | 対照群 | 合格 |
| 3 | 対照群 | 合格 |
| 4 | 対照群 | 合格 |
| 5 | 対照群 | 合格 |
| 6 | 対照群 | 合格 |
| 7 | 対照群 | 合格 |
| 8 | 対照群 | 合格 |
| 9 | 対照群 | 合格 |
| 10 | 対照群 | 合格 |
| 11 | 対照群 | 合格 |
| 12 | 対照群 | 合格 |
このサンプルで比べるもの
- 対照群:通常の学習のみ
- ワークショップ群:短時間の補助セッションあり
- コーチング群:より強い個別支援あり
結果変数は 合格 / 不合格 の 2 値カテゴリです。今回の設定では各群 32 人ずつで、合計 96 人の例を用いています。群サイズをそろえてありますが、カイ二乗検定自体は不均衡な表でも実行できます。
観測度数のクロス集計表
| 群 | 合格 | 不合格 | 合計 |
|---|---|---|---|
| 対照群 | 17 | 15 | 32 |
| ワークショップ群 | 24 | 8 | 32 |
| コーチング群 | 29 | 3 | 32 |
| 合計 | 70 | 26 | 96 |
群ごとの割合(行百分率)
同じ群の中で合格 / 不合格が何%かをみます。結果の方向を把握する最短ルートです。
| 群 | 合格率 | 不合格率 |
|---|---|---|
| 対照群 | 53.1% | 46.9% |
| ワークショップ群 | 75.0% | 25.0% |
| コーチング群 | 90.6% | 9.4% |
ここから読み取れること
- 対照群の合格率は 53.1%
- ワークショップ群の合格率は 75.0%
- コーチング群の合格率は 90.6%
この時点でも群差は見えていそうですが、どこまでを「偶然のばらつき」で説明できるかを確認するのがカイ二乗検定です。
R code
Rコードを順番に実行する
dat <- read.csv("sample-data/sample_chisq_support_pass.csv")
dat$group <- factor(dat$group, levels = c("Control", "Workshop", "Coaching"))
dat$result <- factor(dat$result, levels = c("Pass", "Fail"))
tab <- table(dat$group, dat$result)
tab
addmargins(tab)
# 群ごとの割合(行百分率)
prop.table(tab, margin = 1)
chi <- chisq.test(tab)
chi
# 期待度数
chi$expected
# Pearson residuals
chi$residuals
# standardized residuals
round(chi$stdres, 2)
# 効果量 Cramér's V を手計算
cramers_v <- sqrt(
unname(chi$statistic) /
(sum(tab) * min(nrow(tab) - 1, ncol(tab) - 1))
)
cramers_v
# 期待度数が小さいセルが多いときの候補
fisher.test(tab)
# Monte Carlo による p 値(大きめの表でも使いやすい)
chisq.test(tab, simulate.p.value = TRUE, B = 10000)
# base R のモザイクプロット
mosaicplot(
tab,
shade = TRUE,
color = TRUE,
xlab = "Support program",
ylab = "Exam result",
main = "Pass / fail by support program"
)
# 100% stacked bar chart
barplot(
prop.table(tab, margin = 1),
beside = FALSE,
col = c("#dbeafe", "#fee2e2"),
legend.text = TRUE,
args.legend = list(x = "topright", bty = "n"),
ylab = "Proportion",
main = "Row proportions"
)
# Pearson's Chi-squared test
# X-squared = 11.499, df = 2, p-value = 0.00318
# chi$expected
# Pass Fail
# Control 23.33 8.67
# Workshop 23.33 8.67
# Coaching 23.33 8.67
# round(chi$stdres, 2)
# Pass Fail
# Control -3.09 3.09
# Workshop 0.32 -0.32
# Coaching 2.76 -2.76
# cramers_v
# [1] 0.346
Interpretation
出力の読み方
カイ二乗検定の出力は、最初は 観測度数 → 期待度数 → χ2 値 → p 値 → 残差 の順に読むと整理しやすくなります。
期待度数の表
もし群と合否が独立なら、各群の合格 / 不合格はこのくらいになる、という基準値です。
| 群 | 期待度数:合格 | 期待度数:不合格 |
|---|---|---|
| 対照群 | 23.33 | 8.67 |
| ワークショップ群 | 23.33 | 8.67 |
| コーチング群 | 23.33 | 8.67 |
標準化残差の表
符号は「期待より多い / 少ない」の向き、絶対値の大きさは「ずれの強さ」の目安になります。
| 群 | 合格セルの標準化残差 | 不合格セルの標準化残差 |
|---|---|---|
| 対照群 | -3.09 | 3.09 |
| ワークショップ群 | 0.32 | -0.32 |
| コーチング群 | 2.76 | -2.76 |
χ2(2) = 11.50
表全体として、観測度数と期待度数のずれが独立仮説のもとではやや大きいことを示します。自由度 2 は、3 行 × 2 列の表に対して (3-1)×(2-1) で決まります。
p = 0.003
「学習支援の種類と試験結果は独立である」という帰無仮説のもとでは、今回のようなずれはそれほど出やすくないことを示します。したがって、この例では 両者に関連がある と解釈しやすい結果です。
Cramér's V = 0.35
有意かどうかだけでなく、関連の強さを補足するために効果量も示しておくと実務的です。今回のサンプルでは、中程度以上の関連として読める水準です。
どのセルが効いているか
対照群 × 不合格の標準化残差は +3.09 で、期待より不合格が多い方向です。逆に、コーチング群 × 合格は +2.76 で、期待より合格が多い方向でした。
ワークショップ群は中間的
ワークショップ群の標準化残差は合格側 +0.32、不合格側 -0.32 と小さく、今回の関連を強く押している中心セルではありません。
期待度数の確認
今回の最小期待度数は 8.67 で、少なくとも極端に小さいセルはありません。小さいセルが多い場合は Fisher の正確確率検定や Monte Carlo p 値を検討します。
Figure
図の読み方
図1 群ごとの合否の比率を示したモザイク風プロットと、標準化残差のヒートマップ。左ではコーチング群ほど合格割合が高く、右では対照群の不合格とコーチング群の合格が期待より多いことが分かる。
どこを見るとよいか
- 左のモザイク図では、対照群 → ワークショップ群 → コーチング群 の順に合格割合が高くなっていることが分かります。
- 右の標準化残差では、対照群 × 不合格 と コーチング群 × 合格 が正方向に大きく、今回の関連を特徴づけています。
- 標準化残差が負のセルは、期待より少ない方向です。たとえば コーチング群 × 不合格 は期待より不合格が少ないことを示します。
- 文章化するときは、「有意な関連があった」だけで終わらせず、どの群でどのカテゴリが期待より多かった / 少なかったか を一言書くと説得力が増します。
Writing
レポート用の結果記述例
Japanese / simple
初学者向けの書き方
学習支援の種類と試験結果の関連を検討するためにカイ二乗検定を行ったところ、両者には有意な関連が認められた(Pearson のカイ二乗検定, χ2(2)=11.50, p = 0.003, Cramér's V = 0.35)。合格率は、対照群 53.1%、ワークショップ群 75.0%、コーチング群 90.6% であった。標準化残差の確認から、対照群では不合格が期待より多く、コーチング群では合格が期待より多い傾向が示された。図1にクロス集計の可視化を示した。
Japanese / academic
やや学術寄りの書き方
学習支援の種類(対照群、ワークショップ群、コーチング群)と試験結果(合格 / 不合格)の関連を検討するため、Pearson のカイ二乗検定を実施した。その結果、両変数のあいだに有意な関連が認められた(χ2(2) = 11.50, p = .003, Cramér's V = .35)。各群の合格率は、対照群で 53.1%、ワークショップ群で 75.0%、コーチング群で 90.6% であった。標準化残差の検討から、対照群では不合格が期待度数より多く、コーチング群では合格が期待度数より多いことが示唆された。
English
Report writing example
A Pearson's chi-square test of independence was conducted to examine the association between support program type and exam result. The association was statistically significant, χ2(2) = 11.50, p = .003, Cramér's V = .35. The pass rates were 53.1% in the control group, 75.0% in the workshop group, and 90.6% in the coaching group. Inspection of the standardized residuals suggested that failures were more frequent than expected in the control group, whereas passes were more frequent than expected in the coaching group.
Caption
図キャプション例(日本語)
図1 学習支援の種類と試験結果のクロス集計の可視化。左は群ごとの合格 / 不合格比率、右は期待度数からのずれを示す標準化残差である。
Checklist
最低限書いておきたい項目
- 表の行と列が何を表すかを書く
- χ2 値、自由度、p 値を書く
- 群ごとの割合または件数を書く
- 必要なら効果量(Cramér's V)を書く
- どのセルが関連を特徴づけたかを、残差ベースで一言添える
Common pitfalls
初心者がつまずきやすい点
平均値の検定だと思ってしまう
カイ二乗検定が扱うのは 人数・件数 です。平均値の比較ではありません。カテゴリ変数どうしの表を分析する手法です。
有意 = すべてのセルが違う、と読む
カイ二乗検定の有意差は、表全体として独立とは言いにくいという意味です。どのセルが中心かは標準化残差やモザイク図で確認します。
割合だけを見て n を忘れる
見かけの差が大きくても、元の件数が小さいと不安定です。必ずクロス集計表の件数も一緒に見ます。
前後比較にもそのまま使う
同じ人を前後で 2 値に分類したデータは独立ではありません。その場合は McNemar 検定が適切です。
期待度数を確認しない
期待度数が小さいセルが多いと、通常のカイ二乗近似に注意が必要です。Fisher 検定や Monte Carlo p 値を検討します。
因果関係まで言い切る
カイ二乗検定が示すのは関連の有無です。設計や交絡を無視して「支援が原因で合格した」とまでは言えません。
FAQ
よくある質問
Q. raw data がなく、すでに集計表だけあるときはどうしますか?
A. そのまま行列や表を作って chisq.test(tab) を実行できます。たとえば matrix(c(17,15,24,8,29,3), nrow = 3, byrow = TRUE) のように表を作れば十分です。
Q. 2×2 表では何か違いますか?
A. R の chisq.test() は 2×2 表のとき、既定では連続性補正(Yates 補正)を使います。今回の 3×2 表ではその補正は入りません。
Q. どの群間が違うかをもっとはっきり知りたいです。
A. カイ二乗検定は表全体の関連を見る検定です。2 値アウトカムなら、群ごとの比率比較やロジスティック回帰を補助的に使うと、どの比較が効いているかを詳しく述べやすくなります。
Q. Likert 尺度にもカイ二乗検定を使えますか?
A. 名義尺度として扱うなら使えます。ただし、順序を持つカテゴリなので、研究目的によっては順序情報を活かす方法の方が適切なこともあります。
Q. 「相関がある」と書いてもよいですか?
A. 数学的な相関係数とは別なので、カテゴリ変数では 関連があった、独立ではなかった と書く方が誤解が少ないです。
代替手法
代替手法・次の一歩
研究課題やデータ構造が少し変わると、選ぶべき手法も変わります。このテーマを土台にしつつ、どの条件で別の方法へ進むかを押さえておくと、分析計画が立てやすくなります。
Fisher の正確確率検定
期待度数が小さいセルが多いときの第一候補です。R では fisher.test(tab) を使います。小さな表や sparse な表で特に重要です。
Monte Carlo p 値
大きめの表や exact test が重い表では、chisq.test(tab, simulate.p.value = TRUE) も現実的な選択肢です。
比率比較 / ロジスティック回帰
列変数が 2 値なら、どの群の合格率が高いかをより具体的に言いたい場面があります。その場合は比率比較やロジスティック回帰が相性のよい次の一歩です。
McNemar 検定
同じ対象の前後で「成功 / 失敗」が変わったかをみるときは、独立群のカイ二乗検定ではなく McNemar 検定を使います。
順序カテゴリの方法
カテゴリに自然な順序がある場合、単に名義尺度として扱うだけでなく、順序を活かした分析の方が研究質問に合うことがあります。
可視化の工夫
モザイク図に加えて、100% 積み上げ棒グラフや残差ヒートマップを併記すると、レポートや発表での説明がかなりしやすくなります。
参考資料
参考資料
このページは、R 本体の公式ドキュメントと Penn State の教材を軸に、初心者向けに再構成しています。
運営と利用上の注意
このページの位置づけ
本サイトのトピックページは、Rによるデータ分析の学習支援とレポート作成の補助を目的としたオリジナル解説です。サンプルデータとコードは再現練習用に作成しているため、実データを扱う際には研究計画・前提条件・欠測・外れ値・尺度水準をあらためて確認してください。
編集方針
ページ本文は、標準的な統計手法、Rの公式ドキュメント、一次資料に近い参考文献を優先して整理しています。更新や訂正の方針は編集方針ページで公開しています。