Excelでカイ2乗検定をする方法!アンケートのクロス集計からp値の見方まで

Excelでカイ2乗検定をする方法!アンケートのクロス集計からp値の見方まで
Excelでカイ2乗検定をする方法を知りたいときはないでしょうか。

けど、そんな中で悩むことは、

・カイ2乗検定がどんな場面で使えるのかわからない
・クロス集計表の作り方(COUNTIFS)でつまずく
・p値の見方や「有意差あり」の判断がわからない

ですよね。

今回はそんなお悩みを解決する

・Excelでカイ2乗検定をする方法(CHISQ.TEST関数とクロス集計)

についてまとめます!

完成イメージ

アンケートの結果は、性別と賛否のように2つの項目が関係しているかを知りたい場面でよく使います。
今回は
・回答をCOUNTIFSでクロス集計し、CHISQ.TEST関数でp値を求めて「有意差」を判定する方法
をゴールにします。
p値が0.05より小さければ「2つの項目には関係がありそうだ」と判断できるようになります。

カイ2乗検定の完成イメージ
上の画像が完成形です。性別×賛否のクロス集計表・期待度数・p値・判定までを1枚のシートにまとめています。

なお、期待度数の求め方や、うまくいかないときの対処法(トラブルシュート)、VBAで一括集計する方法もあわせてご紹介します。
早速実装して試してみましょう!

STEP1. アンケートの回答を用意する

まずはカイ2乗検定の元になるアンケートの回答を用意します。
今回は「性別」と「賛否」の2項目で、30人分の回答をまとめました。
A列が回答No、B列が性別、C列が賛否です。
1行目が見出し、2行目以降がデータになります。
この回答をもとに、性別と賛否に関係があるかどうかを調べていきましょう。
アンケート回答の元データ

下の表をコピーして、Excelのシートに貼り付けるとそのまま試せます。

回答No 性別 賛否
1 女性 反対
2 男性 賛成
3 女性 賛成
4 女性 反対
5 男性 賛成
6 女性 反対
7 男性 賛成
8 男性 賛成
9 男性 反対
10 男性 賛成
11 女性 反対
12 女性 反対
13 女性 反対
14 男性 反対
15 女性 反対
16 女性 反対
17 女性 賛成
18 男性 賛成
19 女性 賛成
20 女性 反対
21 女性 賛成
22 男性 賛成
23 男性 賛成
24 女性 賛成
25 男性 賛成
26 男性 賛成
27 女性 賛成
28 男性 反対
29 男性 賛成
30 男性 賛成

※ 数式で求める列は空にしています。すでに値が入っている列はそのまま残して試せます。

STEP2. COUNTIFSで性別×賛否のクロス集計表を作る

まず、回答を「性別」×「賛否」の件数にまとめたクロス集計表を作ります。
表の右側の空いている場所に、見出しを入力します。
E1セルに「性別」、F1セルに「賛成」、G1セルに「反対」、H1セルに「合計」 です。
次に E2セルに「男性」、E3セルに「女性」、E4セルに「合計」 と入力します。
続いて件数を数えます。
F2セルに次のCOUNTIFS関数を入力してください。

=COUNTIFS($B$2:$B$31,$E2,$C$2:$C$31,F$1)

これは「B列が男性、かつC列が賛成の件数」を数えています。
この数式をF2セルからH3セルまでコピーすると、4つのマスの件数が一気に出ます。
合計行(4行目)は =SUM(F2:F3) のように縦を合計します。

POINT

条件の範囲は $B$2:$B$31 のように絶対参照($付き)にしておきます。
数える条件のセル($E2 と F$1)は、列・行の固定位置を変えると、コピーだけで全マスに展開できます。
$ の位置は「$E2(列固定)」と「F$1(行固定)」がポイントです。

COUNTIFSで作った性別×賛否のクロス集計表

クロス集計の数式はどのセルに入れる?

実際の入力画面がこちらです。
セルを選んで、数式バーにそのまま入力します。
入力中は引数のヒントが出るので、順番を確認しながら進められます。
引数は「範囲と条件」のペアを繰り返すだけなので、カンタンですね。
COUNTIFS関数の入力画面

STEP3. 期待度数を求める

カイ2乗検定では、実際の件数(実測度数)と期待度数を比べます。
期待度数とは「性別と賛否に関係がないと仮定したときに、ここに入るはずの件数」です。
期待度数は次の式で求められます。
期待度数 = その行の合計 × その列の合計 ÷ 全体の合計

E6セルに「期待度数」、F6セルに「賛成」、G6セルに「反対」を入力します。
左側は E7セルに「男性」、E8セルに「女性」 です。
男性・賛成の期待度数をF7セルに入力します。

=$H2*F$4/$H$4

これは「男性の合計(H2)× 賛成の合計(F4)÷ 全体の合計(H4)」を計算しています。
この数式をF7セルからG8セルまでコピーすると、4つの期待度数がすべて求まります。
数値は比較しやすいように小数点第2位まで表示しておきましょう。
期待度数の表

期待度数の数式はこう入れる

数式バーの様子がこちらです。
H2(行の合計)と F4(列の合計)は動かしたくないので、列・行の記号の前に $ を付けます。
H4(全体の合計)は $H$4 と両方固定しておくのがコツです。
期待度数の数式の入力画面

STEP4. CHISQ.TEST関数でp値を求める

いよいよ検定です。
E10セルに見出し「検定結果」、E11セルに「p値」と入力します。
そしてF11セルに次の数式を入れてください。

=CHISQ.TEST(F2:G3,F7:G8)

CHISQ.TESTは、実測度数の範囲と期待度数の範囲を渡すと、p値を返します。
第1引数が実測度数(F2:G3)、第2引数が期待度数(F7:G8)です。
2つの範囲は行数・列数をそろえて指定するのがポイントです。
CHISQ.TEST関数の入力画面

STEP5. p値を見て「有意差」を判定する

p値が出たら、あとは基準と比べるだけです。
p値は「性別と賛否に関係がない(偶然のばらつき)としたときに、今回のような偏りが起きる確率」を表します。
この確率が小さいほど「偶然では説明しにくい=関係がありそうだ」と判断できます。
慣例的に、p値が0.05(5%)より小さければ「有意差あり」 とします。
判断の目安として、基準値と自由度も出しておきましょう。

E12セルに「基準値」、F12セルに次の数式を入れます。

=CHISQ.INV(0.95,1)

これは自由度1のカイ2乗分布で上側5%の点(3.841)を返します。
E13セルに「自由度」、F13セルに =(2-1)*(2-1) を入れてください。
2×2のクロス集計なので、自由度は1になります。
最後にE14セルに「判定」、F14セルに次のIF関数を入れます。

=IF(F11<0.05,"有意差あり","有意差なし")

p値が0.05未満なら「有意差あり」と表示されます。
今回の結果を表にまとめると、次のようになりました。

項目 値 意味
実測度数(男性×賛成) 12件 実際のアンケート結果
期待度数(男性×賛成) 9件 関係がないなら9件のはず
p値 0.0253 偶然でこれだけ偏る確率は約2.5%
有意水準 0.05 これを下回れば「有意差あり」
判定 有意差あり 性別と賛否には関係がありそう
POINT

p値は「小さいほど関係がありそう」と読みます。
目安は 0.05未満で有意差あり、0.01未満ならより強い差のイメージです。
ただしp値が小さいだけで「必ず関係がある」と断定はできません。
件数や集め方もあわせて確認するのがおすすめです。

検定結果(p値・基準値・自由度・判定)

VBAでクロス集計と検定を一括で行う

毎回同じ分析をするなら、VBAで自動化するのがいちばんラクです。
Alt+F11でVBAエディターを開き、標準モジュールに次のコードを貼り付けます。

Sub Kai2Test()
    Dim ws As Worksheet, lastRow As Long
    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row
    ws.Range("E1:H1").Value = Array("性別", "賛成", "反対", "合計")
    ws.Range("E2").Value = "男性"
    ws.Range("E3").Value = "女性"
    ws.Range("E4").Value = "合計"
    ws.Range("F2:G3").Formula = _
        "=COUNTIFS($B$2:$B$" & lastRow & ",$E2,$C$2:$C$" & lastRow & ",F$1)"
    ws.Range("F4").Formula = "=SUM(F2:F3)"
    ws.Range("G4").Formula = "=SUM(G2:G3)"
    ws.Range("H2:H3").Formula = "=SUM(F2:G2)"
    ws.Range("H4").Formula = "=SUM(H2:H3)"
    ws.Range("F7").Formula = "=$H2*F$4/$H$4"
    ws.Range("F11").Formula = "=CHISQ.TEST(F2:G3,F7:G8)"
End Sub

実行すると、クロス集計と検定の数式がまとめて入ります。
ボタンに登録しておけば、クリック1つで分析できるようになります。

タカヒロ

タカヒロ
COUNTIFSの範囲を $B$2:$B$31 と固定している点に注目してください。
回答が増えても範囲を自動で伸ばせるように、最終行は lastRow で求めています。
数式を1つずつ手で入れるのが面倒なときほど、VBAが効きますよ。

うまくいかないときの対処法(トラブルシュート)

実際に試すと、思ったようにいかないこともあるかもしれません。
よくあるつまずきと対処法をまとめました。

症状 原因 対処
CHISQ.TESTが #VALUE! になる 実測値と期待値の範囲の行数・列数が違う 両方を同じ形(今回なら2行×2列)にする
#NAME? になる 関数名のつづり違い、または古いExcel =CHITEST() を使う(旧関数でも結果は同じです)
p値が #NUM! になる 期待度数に0以下の値がある 集計範囲を見直し、0件のカテゴリを統合する
判定が思った逆になる 実測と期待の範囲を逆にしている 第1引数を実測度数に直す
期待度数の合計が実測と合わない 絶対参照($)の位置がずれている $H2・F$4・$H$4 の $ の位置を確認する

関数の説明

今回使う3つの関数の概要です。
どれも統計や集計でよく使うので、違いを押さえておきましょう。

CHISQ.TEST関数(カイスクエア・テスト)

書式 =CHISQ.TEST(実測値, 期待値)
できること カイ2乗検定を行い、p値を返します。
戻り値 p値(0〜1の確率)
こんなときに アンケートなど2つの項目に関係があるかを調べたいとき。
注意 実測値と期待値の範囲は同じ形にします。旧関数 CHITEST でも同じ結果になります。
=CHISQ.TEST(F2:G3, F7:G8)

CHISQ.INV関数(カイスクエア・インバース)

書式 =CHISQ.INV(確率, 自由度)
できること カイ2乗分布の左側の累積確率に対応する値(境界値)を返します。
戻り値 カイ2乗値(数値)
こんなときに 有意水準5%の基準値(=CHISQ.INV(0.95,1) なら 3.841)を出したいとき。
注意 確率は左側からの累積です。右側(上側)5%なら 0.95 を指定します。
=CHISQ.INV(0.95, 1)

COUNTIFS関数(カウントイフス)

書式 =COUNTIFS(範囲1, 検索条件1, [範囲2, 検索条件2], …)
できること 複数の条件をすべて満たすセルの件数を数えます。
戻り値 件数(数値)
こんなときに 性別と賛否のように、2つの項目をかけ合わせた件数を数えたいとき。
注意 範囲と条件はペアで指定します。範囲は絶対参照にするとコピーがラクです。
=COUNTIFS($B$2:$B$31, $E2, $C$2:$C$31, F$1)

完成

性別×賛否のクロス集計からp値まで、1枚のシートにまとまりました。
今回のp値は0.0253で、0.05を下回ったので「有意差あり」と判定できました。
思ったとおりに動きましたか?
集計のCOUNTIFSと検定のCHISQ.TESTを一度作っておけば、回答を追加したときも自動で再計算されます。
アンケート結果の読み取りが、ぐっとスムーズになりますね。
完成したアンケート集計と検定結果

さいごに

いかがでしょうか。

今回は、

・Excelでカイ2乗検定をする方法(CHISQ.TEST関数とクロス集計)

についてまとめました。

まずは今回のサンプルデータで、ぜひ一度試してみてください。
クロス集計とカイ2乗検定ができるようになると、アンケート結果の読み取りがぐっとラクになりますよ。
また、他にも便利なExcelの時短テクニックがありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。






コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA ImageChange Image