第161回: 「統計の実務」21 クロス集計とカイ二乗検定《その2: A/BテストとRコマンダー》
◀前の記事へ 次の記事へ▶
≡ はじめに
前回は、「クロス集計とカイ二乗検定《その1: A/Bテスト》」について書きました。
内容は、「クロス集計とカイ二乗検定」の仕組みを理解するための例として、「A/Bテスト」の結果のクロス集計表の作成と、カイ二乗検定をする話でした。
ツールを使わずに(Excelは使うほうが便利と思うけど)ノートに鉛筆と電卓で十分にカイ二乗検定を行って「AとBに統計的な有意差があるか」の判定が出来ることが分かってもらえたのではと思っています。
今回は、「A/Bテスト」の結果の分析をRコマンダーで行う方法について書きます。次回は、「A/Bテスト」を一般化して「独立性の検定」について書こうと思います。
「本当に、これって結果に関係するのかな?」と思うことって、ありませんか? 例えば、職種によって残業時間が違うとか、、、。もちろん、t検定でもよいけど、原因分析のフェーズでは数値データは取っていないかもしれません。今あるカテゴリデータ(文字データ)で「結果に影響を与えている何か」が見つかればしめたものです。あとは、その原因を掘り下げて対策につなげればよいからです。そんな話を次回はします。
それでは、まずは、前回の確認テストの答え合わせをし、カイ二乗検定の復習としたいと思います。
≡ 前回の理解度確認テスト
前回の最後の方に「カイ二乗検定の理解度確認テスト」を載せました。
カイ二乗検定の説明に一般的に用いられる事例です。
例えば、BellCurveというウェブサイトの「25-4. 適合度の検定」と同じです。
その後、Twitterに2択問題として出題しましたので、そちらで解説します。
昨日のnoteの理解度テストを2択問題にしてみました。
— あきやま🌱 (@akiyama924) February 1, 2022
ある組織のメンバーの血液型を調べたところA型20人、O型15人、B型25人、AB型7人でした。有意水準を0.05としたときに、「カイ二乗検定」した結果はどれですか。
なお、日本人の平均血液型割合は円グラフ(連ツイ)の通りです。
ヒントのワークシートと円グラフはこちらです。 pic.twitter.com/lssochfgMB
— あきやま🌱 (@akiyama924) February 1, 2022
まずは、前回書いた、カイ二乗検定のプロセスを再掲します。
「帰無仮説」を確認する
「カイ二乗値」を計算する
「自由度」を求める
「有意水準」を決める
2のカイ二乗値と3の自由度から「p値」を求める
5で見つけたp値と4で決めておいた有意水準を比較して「統計的に有意な差があるかどうかの結論」を出す
この順番で実施すればOKです。
■ 「帰無仮説」を確認する
Twitterの問題についていた集計表を再掲します。

観測度数の行に、実際に観測された、ある組織の血液型別人数が埋まっています。問題文の以下にあたります。
ある組織のメンバーの血液型を調べたところA型20人、O型15人、B型25人、AB型7人でした。
表の2行目は、「日本人の平均血液型割合」です。
帰無仮説は、差が無いことを仮説にしますので、「ある組織の血液型の人数割合と、日本人の平均血液型割合には差が無い」です。
「差が無いこと」を仮説にするのは、「差が無い」状況は1つしかないからです。その1つしかない状況になる確率を求めて、それを捨てることができれば、差があると示せます。
逆に「差があること」を仮説としてしまいますと、「A型が突出して多い」パターンや「O型とAB型が突出して多い」パターン等々、いくつでも仮説を立てることができるので検定することが困難になります。
■ 「カイ二乗値」を計算する
カイ二乗値は、「(観測度数 - 期待度数)の2乗 ÷ 期待度数」の総和という定義でした。要は、二つのデータ群のずれの大きさを数値化したものです。
カイ二乗値を求めるためには、「期待度数」が必要です。先ほどの表(一か所だけ黄色にしたもの)を再掲します。

「期待度数」の行が空欄になっています。でも、ヒントとして、合計のセルに「67」が入っています。
「日本人の平均血液型割合」と合計の67と日本人のA型の割合の39%から、67人中、A型の人が何人いることが期待できるか、つまり、黄色のセルを埋めることができます。黄色のセルは合計67人の39%ですから、
黄色のセルの値 = 67 × 39 ÷ 100 = 26.13です。同様に、期待度数の行の他のセルも埋めますと以下の表となります。

67人の組織が、「日本人の平均血液型割合」だったら何人ずつと期待されるか? の値が「期待度数」の行の値です。例えばAB型の列を見ると、ある組織では7名で期待度数は6.7名なので、AB型の人数はだいたい期待通りの人数です。
ここまでいけば、あとは、ズレの計算だけです。それぞれの差分の2乗をズレ行に埋めて、その合計をピンクのセルに計算します。A型のところのズレは、
A型のズレ = (観測度数 - 期待度数)の2乗 ÷ 期待度数
= (20 - 26.13)^2 ÷ 26.13
= (-6.13)^2 ÷ 26.13
= 37.5769 ÷ 26.13
= 1.43807501
こんな表になります。

カイ二乗値は、「(観測度数 - 期待度数)の2乗 ÷ 期待度数」の総和ですから、右下の「9.603166948」がカイ二乗値ということになります。
有効桁はせいぜい2桁なので「9.6」でよいでしょう。(有効桁を考慮した丸めは最後に行ってください。
■ 「自由度」を求める
自由度は、「自由に選べる値」です。
今回、カイ二乗値の計算に使った値は、下表の黄色の4つです。

でも、合計値の67(緑色のセル)を使用(固定)して期待度数を求めていました。したがって、自由度は4-1=3です。
誤魔化されたようで、納得いきませんよね? こう考えてみてはどうでしょうか。
組織のメンバーの血液型を調べる前から組織の人数が67名であることは分かっていました。したがって、A型20人、O型15人、B型25人が分かれば、AB型は残りの7名に決まっています。
それは、他の血液型についても言える話なので、4つ血液型があっても自由に値を選べるのは3つということです。
※ 前回も書きましたが、「自由度はサンプリングしたデータの数と関係深いもの (確率分布図の形は、自由度によって異なることがある)」という理解で十分です。
実務的にはツールに任せて、念のため、ツールが出力する「DF: degree of freedom」の値をチェックする程度でOKです。
■ 「有意水準」を決める
今回は、問題文に「有意水準を0.05としたときに」と書いてありますので、それに従い有意水準は0.05とします。
有意水準0.05は、5%という意味ですので、端的に言うと「検定結果は、5%外れることを覚悟する」という意思決定です。
長く書けば、「5%以下の確率で起こる事象は、100回に5回以下しか起こらない事象だ。したがってこのようなまれな事象が起こった場合、偶然起こったものとは考えにくい。これは、極めて珍しいことが起こった、あるいは“何かしら意味があることである(=有意である)”と考えよう」ということです。
また、母分布が正規分布のときには、平均±2σの間に入る確率が、95.45%であることから、「0.05とすると、平均±2σの間に入るイメージが正規分布のグラフから湧いて分かりやすい」というメリットがあります。
有意水準は、0.05とするのが一般的ですが、厳しくしたいときには、0.01(100回に1回の外れ)にしますし、緩くしたいときには、0.1(10回に1回の外れ)にします。いずれの時にも先に決めます。
有意水準は、母分布や目的に合わせて決めるべきものですが、0.05以外にする理由を説明する方が面倒なので、私は0.05を変えることは滅多にありません。
■ カイ二乗値と自由度から「p値」を求める
カイ二乗値は、さきほど「9.6」と求めました。また、自由度は3でした。
この2つの情報から、カイ二乗分布表を用いて、p値を求めるのでした。
自由度の3からスタートして、p値にたどり着く様子は下表の通りです。

上の表のように、p値は0.05と0.01の間にあることが分かりました。
正確なp値は、Rコマンダーやエクセルで計算できます。その値は、0.02225879でした。
Excelなら『=CHISQ.DIST.RT(9.6, 3)』で求めます。
※二つ目の引き数は自由度です。
■ p値と有意水準を比較して結論を出す
今回は、「p値=0.02225879」、「有意水準=0.05」でした。
確率分布図に色をつけてみます。

自由度が3なので、前回の確率分布図とグラフのカーブのイメージが違うと思います。9.6以上の確率は赤い部分の面積で、それが、p値の0.02225879(2.2%)ということです。
p値は0.02225879と有意水準の0.5未満でしたので、帰無仮説は棄却され、(対立仮説は差が無い仮説の反対なので)「ある組織の血液型の分布は日本の平均の血液型の分布と、統計的な有意差がある」という結論になります。
ここで、カイ二乗検定で言えることは「有意差の有無」までということに注意してください。

上記の結果をみて、ズレの値の比較から、「B型のズレが飛び抜けて大きいな」とか「B型の人数は期待度数よりも10人も多いのか」と読み取るのはカイ二乗検定とは別の話です。
※ 数値やグラフから情報を読み取るスキルは大切です。練習あるのみです。
≡ RコマンダーでA/Bテスト
長々と、前回の「理解度確認テスト」の話を書いてしまいました。でも仮説検定の意味やカイ二乗検定でしていることを理解するのに良い例題と思いますので、納得するまで読み返すと良いと思います。
それに、Twitterのアンケートで回答者1名だったので、丁寧な解説が必要かなと思いました。
実は、私もそうだったのですが、「統計って、説明を読むと、『フンフンなるほど』と分かった気になるけど、実際の事象に適用すると、とたんに分からなくなる」ものなので、丁寧に説明した方がいいかなと思って。
ということで、以降は今回のnoteの本題である、「A/Bテストの統計的な分析をRコマンダーで実施する方法」です。結論を書くと、
Rコマンダーのメニューから、
[統計量]>[分割表]>[2元表の入力と分析…]
を選択して開いたダイアログにA/Bテストの結果を入力して[OK]ボタンを押すだけです。
前回のA/Bテストの結果の値を入力してみます。


すると、
Pearson's Chi-squared test
data: .Table
X-squared = 1.7159, df = 1, p-value = 0.1902という出力結果がえられます。「X-squared = 1.7159, df = 1, p-value = 0.1902」は、「カイ二乗値は1.7159、自由度は1、p値は0.1902」ということです。
前回の結論は、「カイ二乗値は2.2、自由度は1、p値は0.1552391」でしたが、それは、途中の≪補足≫で書いた通り簡易的な方法だからです。
≪補足≫の表を使えば、下表の通りRコマンダーと同じ値になります。
結果だけになりますが、《補足》を使ってカイ二乗値とp値を求めた表を載せます。

Rコマンダーのオプションのシートは下図の通りです。

私は、黄色の箇所をチェックして、クロス表なども出力することが多いです。
なお、最後にある「フィッシャーの正規検定」はA/Bテストの観測度数のどれか一つでも5以下のものがあったときにカイ二乗検定よりも信用できる値となります。ただし、正規分布を仮定しているなど、使える前提の範囲が狭いので、通常はカイ二乗検定を信用します。
≡ おわりに
今回は、前回に続いて、「クロス集計とカイ二乗検定」の仕組みを理解してもらえるように「理解度確認テスト」の解説を丁寧に書きました。
また「A/Bテスト」の結果分析をRコマンダーで行う方法についても書きました。ダイアログを開いて4つの値を入れるだけなので超簡単ですが、前回と今回で中で行っている仕組みが理解できているとオプションで表示した「クロス集計表」や「期待度数」の意味が分かるので、なおよいと思います。
ご参考に、オプションのせのせの結果を以下に貼っておきます。
> .Table # Counts
columns
rows 1 2
1 6 94
2 12 96
> rowPercents(.Table) # Row Percentages
columns
rows 1 2 Total Count
1 6.0 94.0 100 100
2 11.1 88.9 100 108
> .Test <- chisq.test(.Table, correct=FALSE)
> .Test
Pearson's Chi-squared test
data: .Table
X-squared = 1.7159, df = 1, p-value = 0.1902
> .Test$expected # Expected Counts
columns
rows 1 2
1 8.653846 91.34615
2 9.346154 98.65385
> round(.Test$residuals^2, 2) # Chi-square Components
columns
rows 1 2
1 0.81 0.08
2 0.75 0.07
> remove(.Test)
> fisher.test(.Table)
Fisher's Exact Test for Count Data
data: .Table
p-value = 0.2234
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
0.1512208 1.5481274
sample estimates:
odds ratio
0.5122446次回は、「クロス集計とカイ二乗検定」のその3としてRコマンダーを使って「A/Bテスト」を一般化した「独立性の検定」について書こうと思います。
残りは「クロス集計とカイ二乗検定」→「管理図とEVM」→「確率分布」となります。
