カイ二乗検定:カテゴリ × カテゴリ × クロス集計表+モザイクプロット

Chi-square test with crosstab and mosaic plot

2つのカテゴリ変数が「独立か」「関連していそうか」を、クロス集計表・期待度数・標準化残差・モザイクプロットまで含めて読む基本ページです。カテゴリ同士の分析で最もよく出てくる手法を、初心者にも分かるように順番に整理します。

このページでは、 学習支援の種類(対照群 / ワークショップ群 / コーチング群) と 試験結果(合格 / 不合格) の関連を例に、カイ二乗検定の考え方、前提条件、R による実装、図の読み方、そしてレポートでの書き方までを一気通貫で扱います。学術レポートを意識しつつも、「まず何を見ればよいか」が迷子にならない構成にしています。

比率・カテゴリデータ chisq.testクロス集計表モザイクプロット標準化残差初心者向け

このページのゴール

  • カイ二乗検定が「カテゴリ変数どうしの独立性」をみる検定であることを理解する
  • クロス集計表、期待度数、χ 2 値、自由度、p 値の読み方を理解する
  • 標準化残差とモザイクプロットから「どのセルが関連を特徴づけるか」を説明できるようになる
  • 学術レポートで使える日本語 / 英語の書き方を、そのまま応用できるようになる
···

まず押さえる4つのポイント

1. まずはクロス集計表を作る

カテゴリ変数どうしの分析では、最初に table()xtabs() でクロス集計表を作ります。ここが出発点です。

2. 帰無仮説は「独立」

カイ二乗検定の帰無仮説は、「行変数と列変数に関連がなく、独立である」です。p 値が小さいと、独立とは言いにくいと判断します。

3. 有意差だけでは場所が分からない

χ2 検定が有意でも、それだけでは「どのセルが効いているか」は分かりません。期待度数と標準化残差を確認します。

4. モザイク図は文章化の助けになる

モザイクプロットや比率の棒グラフを添えると、「どの群で合格が多い / 少ないか」を視覚的に説明しやすくなります。

···

分析の概要と前提条件

どんなときに使うか

カイ二乗検定(Pearson の χ2 検定)は、2つのカテゴリ変数のあいだに関連があるかを調べたいときの基本手法です。今回の例では、学習支援の種類と試験結果の関連を検討します。

必要なデータ形式:1行が1観測で、各行に groupresult のようなカテゴリ変数を持たせる方法が分かりやすいです。すでに集計済みの表(count table)から始めても構いません。

用語の補足:「群ごとに合格率を比べる」文脈では、教科書によっては 同質性の検定 と呼ぶことがあります。ただし、2次元のクロス集計表に対する計算は、R の chisq.test() では同じ枠組みで扱えます。

何を計算しているのか

H0: 2つのカテゴリ変数は独立である
Eij = (行合計 × 列合計) / 総数
χ2 = Σ (Oij - Eij)2 / Eij

まず、もし2変数が独立なら各セルにどれくらい入るはずかという 期待度数 を計算します。次に、観測度数 O と期待度数 E のずれを全セルで足し合わせたものが χ2 統計量です。

  • 各観測が互いに独立していること
  • セルの期待度数が極端に小さすぎないこと
  • データが人数・件数などの 度数 であること(平均値ではありません)
  • 自由度は (r - 1) × (c - 1)
···

前提条件はどう確認するか

カテゴリデータの検定では、正規性ではなく、独立性期待度数の妥当さ が中心になります。

1. 独立性は設計で担保する

同じ人を重複して数えたり、同一対象を前後で並べたりしていないかを確認します。前後比較の 2 値データなら McNemar 検定が候補です。

2. 期待度数を確認する

R の chisq.test() は期待度数を返します。期待度数が小さいセルが多いと、漸近近似による p 値が不安定になることがあります。

3. 割合だけでなく件数も見る

割合が違って見えても、元の n が小さいと不確実性は大きくなります。クロス集計表の件数と、必要なら総数も一緒に確認します。

4. 有意差の位置は残差でみる

χ2 検定は表全体の関連をみる検定です。どのセルが関連を強く押しているかは、標準化残差とモザイク図で補います。

5. 小さい期待度数なら代替法へ

小さな表や期待度数が小さいケースでは、fisher.test()simulate.p.value = TRUE の利用を検討します。

6. 順序カテゴリかどうかも意識する

Likert など順序のあるカテゴリを名義尺度として扱うのが簡単な第一歩ですが、順序を活かした別の方法が適切なこともあります。

···

データの形をつかむ

このページでは、1行が1人のサンプルデータを使います。R では raw data からクロス集計表を作る流れが分かりやすいです。

分析に使う元データ(先頭12行)

1行が1観測で、group が支援の種類、result が合否です。

idgroupresult
1対照群合格
2対照群合格
3対照群合格
4対照群合格
5対照群合格
6対照群合格
7対照群合格
8対照群合格
9対照群合格
10対照群合格
11対照群合格
12対照群合格

このサンプルで比べるもの

  • 対照群:通常の学習のみ
  • ワークショップ群:短時間の補助セッションあり
  • コーチング群:より強い個別支援あり

結果変数は 合格 / 不合格 の 2 値カテゴリです。今回の設定では各群 32 人ずつで、合計 96 人の例を用いています。群サイズをそろえてありますが、カイ二乗検定自体は不均衡な表でも実行できます。

初心者向けの読み方:まず件数表を見て、その次に行百分率・期待度数・残差へ進むと、解釈がかなり整理しやすくなります。

観測度数のクロス集計表

合格不合格合計
対照群171532
ワークショップ群24832
コーチング群29332
合計702696

群ごとの割合(行百分率)

同じ群の中で合格 / 不合格が何%かをみます。結果の方向を把握する最短ルートです。

合格率不合格率
対照群53.1%46.9%
ワークショップ群75.0%25.0%
コーチング群90.6%9.4%

ここから読み取れること

  • 対照群の合格率は 53.1%
  • ワークショップ群の合格率は 75.0%
  • コーチング群の合格率は 90.6%

この時点でも群差は見えていそうですが、どこまでを「偶然のばらつき」で説明できるかを確認するのがカイ二乗検定です。

···

Rコードを順番に実行する

Rコード:データの読み込みとクロス集計prep
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)
Rコード:カイ二乗検定と関連量analysis
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
Rコード:小さい期待度数への備えfallback
# 期待度数が小さいセルが多いときの候補
fisher.test(tab)

# Monte Carlo による p 値(大きめの表でも使いやすい)
chisq.test(tab, simulate.p.value = TRUE, B = 10000)
Rコード:モザイクプロットと比率の可視化visual
# 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"
)
主な出力イメージoutput
# 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
···

出力の読み方

カイ二乗検定の出力は、最初は 観測度数 → 期待度数 → χ2 値 → p 値 → 残差 の順に読むと整理しやすくなります。

Test statisticχ2(2) = 11.50
p-valuep = 0.003
Effect sizeCramér's V = 0.35
Min expected count8.67

期待度数の表

もし群と合否が独立なら、各群の合格 / 不合格はこのくらいになる、という基準値です。

期待度数:合格期待度数:不合格
対照群23.338.67
ワークショップ群23.338.67
コーチング群23.338.67

標準化残差の表

符号は「期待より多い / 少ない」の向き、絶対値の大きさは「ずれの強さ」の目安になります。

合格セルの標準化残差不合格セルの標準化残差
対照群-3.093.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 値を検討します。

···

図の読み方

Chi-square test figureLeft panel shows a mosaic-style plot of pass and fail proportions across Control, Workshop, and Coaching groups. Right panel shows standardized residuals as a heatmap.図1 モザイク図と標準化残差の見取り図左:群ごとの合格 / 不合格の比率 右:期待度数からのずれ(標準化残差)Mosaic-style viewStandardized residualsControl46.9% fail53.1% passWorkshop25.0% fail75.0% passCoaching9.4% fail90.6% pass100%0%PassFailPassFailControl-3.09Less than expected3.09More than expectedWorkshop0.32More than expected-0.32Less than expectedCoaching2.76More than expected-2.76Less than expected目安として |stdres| が 2 前後を超えるセルは、関連を特徴づける候補として読みやすい。

図1 群ごとの合否の比率を示したモザイク風プロットと、標準化残差のヒートマップ。左ではコーチング群ほど合格割合が高く、右では対照群の不合格とコーチング群の合格が期待より多いことが分かる。

どこを見るとよいか

  • 左のモザイク図では、対照群 → ワークショップ群 → コーチング群 の順に合格割合が高くなっていることが分かります。
  • 右の標準化残差では、対照群 × 不合格コーチング群 × 合格 が正方向に大きく、今回の関連を特徴づけています。
  • 標準化残差が負のセルは、期待より少ない方向です。たとえば コーチング群 × 不合格 は期待より不合格が少ないことを示します。
  • 文章化するときは、「有意な関連があった」だけで終わらせず、どの群でどのカテゴリが期待より多かった / 少なかったか を一言書くと説得力が増します。
···

レポート用の結果記述例

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)を書く
  • どのセルが関連を特徴づけたかを、残差ベースで一言添える
···

初心者がつまずきやすい点

平均値の検定だと思ってしまう

カイ二乗検定が扱うのは 人数・件数 です。平均値の比較ではありません。カテゴリ変数どうしの表を分析する手法です。

有意 = すべてのセルが違う、と読む

カイ二乗検定の有意差は、表全体として独立とは言いにくいという意味です。どのセルが中心かは標準化残差やモザイク図で確認します。

割合だけを見て n を忘れる

見かけの差が大きくても、元の件数が小さいと不安定です。必ずクロス集計表の件数も一緒に見ます。

前後比較にもそのまま使う

同じ人を前後で 2 値に分類したデータは独立ではありません。その場合は McNemar 検定が適切です。

期待度数を確認しない

期待度数が小さいセルが多いと、通常のカイ二乗近似に注意が必要です。Fisher 検定や Monte Carlo p 値を検討します。

因果関係まで言い切る

カイ二乗検定が示すのは関連の有無です。設計や交絡を無視して「支援が原因で合格した」とまでは言えません。

···

よくある質問

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の公式ドキュメント、一次資料に近い参考文献を優先して整理しています。更新や訂正の方針は編集方針ページで公開しています。

サイト情報

運営の目的、広告掲載方針、プライバシーポリシー、問い合わせ方法はサイト情報ページ群にまとめています。

···