信頼区間のオーバーラップで比率の差の検定をするのは、どれくらい悪いのか
ダメな統計学
https://id.fnshr.info/2014/12/28/stats-done-wrong-ja-pdf/
という本の第6章に、二群間の平均値や比率の差の検定をする代わりに信頼区間が重なってるかどうかで、差があるかどうかを判断している論文が存在すると書いてある。
平均値や比率の差の検定は、ほぼ全ての統計学の教科書に書いてあるし、"有意差"という言葉があるくらいに統計学で一番使われるパターンでもあるだろうから、普通に検定すればいいという気はする。けど、信頼区間の重なりを見る方法でも、十分多くのサンプル数を確保して、信頼度を1に近づけていけば、正しい判定ができる確率は高くなるはずだから、本当に無条件で悪いと言えるかは疑問がある。
信頼区間の重なりによる"差の検定"は、有意水準が自明には分からないという問題があるけど、これは計算可能なので、致命的な問題とは言えない。教科書的な仮説検定に優位性があるとすれば、より少ないサンプル数で、より良い判定が下せるということであるべきだろう。
というわけで、比率の差の検定について、信頼区間の重なりを見る方法が、どれくらい悪いか計算したい。仮説検定の失敗としては、本当は差がないのに差があると判定してしまう場合と、本当は差があるのに差がないと判定してしまう場合がある。それぞれの確率を評価すればいいだろう。
差の検定では、帰無仮説として「母比率が等しい」、対立仮説として「母比率が異なる」という仮説を採用することが一番多いと思うので、このケースを考えることにすると、本当は差がないのに差があると判定するのは、帰無仮説が正しいのに棄却してしまう第一種のエラーとかいうやつで、本当は差があるのに差がないと判定してしまうのは、対立仮説が正しいのに帰無仮説を採用してしまう第二種のエラーとかいうやつ。
この計算は純粋に数学上の問題に過ぎないけど、無味乾燥なので、具体的な問題として、ゲームで、クリティカル率がアップするというスキルがあって、スキル使用時と未使用時のクリティカル率に本当に差があるか(プレイヤーが)検証したいという状況があることにする。そんなスキルのあるゲームを思い出せないので、ゲーム例が念頭にあるわけではない。製品の不良率とかと違って、仮にバグでスキルが反映されてなかったりしたら、クリティカル率は完全に等しいだろう。
ドラクエでは、武闘家は、他に比べて、会心の一撃が出やすいらしいので、職業間比較でもいい。ただ、検索したところ、レベルがあがると会心の一撃の確率もあがると書いてたりする。データ収集中にレベルがあがると困る(セーブデータを何度もロードし直せばいいけど)。ドラクエ3では、レベル99武闘家は、確率99/256=38.6%で会心の一撃が出て、武闘家以外は、1/64=1.6%なんだそうだ。これくらい差があると、統計学に頼らなくても体感で分かるだろう。
スキル未使用時のクリティカル率がで、使用時のクリティカル率がだとする。大抵のゲームでは、クリティカル率が実際に何%かという情報は、プレイヤーには公開されないので、これらは未知の量である(公表されてても、開発者がバグを仕込んでる可能性もある)。スキル未使用時に、回の攻撃をして回クリティカルが出て、同様に、スキル使用時に回の攻撃をして、回クリティカルが出たとする。
とは、二項分布,に従う。二項分布の正規近似によれば、信頼度の信頼区間は、
になる()。
但し、は、を満たす定数。
実際に信頼区間を計算する時には、未知量が入ってるので、この形では使えないけど、今は、信頼区間を計算すること自体が目的ではないので、このままにしておく。
本当は差がないのに差があると判断してしまうということは、なのに、上記の信頼区間が重ならない場合である。その条件は
と書ける。簡単のためにの場合を考えると
という条件になる。
二項分布の正規近似に基づくと、は、平均、分散の正規分布に従うと近似でき、その差であるは、平均0、分散の正規分布に従う。上の不等式は
と書ける。と置くと、本当は差がないのに差があると判断してしまう確率は
で計算できる。
ちょっと計算すると、この確率はとなる。一般的な信頼度95%の時(従って)は、これは、大体0.56%くらいになるから、第一種のエラーは起きにくくなっている。ということは、第二種のエラーが起きやすくなっているということでもあるが、オーバーラップ法で検定する場合、個々の信頼区間の信頼度は、もっと低くていいとも言える。オーバーラップ法で第一種のエラーが起きる可能性を5%に調整するには
を満たせばよくて、は、0.166くらいになる。つまり、(という条件で計算していることは忘れるべきでないが)信頼度83〜84%の信頼区間を使えば、オーバーラップ法で第一種のエラーが起きる可能性は、5%程度になる。
あるいは、信頼区間の重なりで判断する場合に、第一種のエラーを起こす確率をにしたければ、次の信頼区間を使えと言ってもいいかもしれない。
次に、本当は差があるのに差がないと判定してしまう確率は、どれくらいあるか考える。ちょっと想像すれば分かることだけど、(他の条件が同一なら)検出しようとする差が小さいほど、差がないと判断する確率は高くなるだろう。クリティカル率が、2%から2.01%になったところで、体感で差はないだろう(スキルの説明文には、具体的な数値は書いてないのが普通なので、仕様通りだと主張はできるかもしれないけど)し、多くのデータを集めなければ、差があると確信できないだろう。というわけで、どれくらいの差を検出したいか、最初に決めておく必要がある。
今、であるとして、信頼区間(信頼度は先ほどと同様としておく)にオーバーラップが生じる確率を計算する。クリティカル率の問題については、であるべきだが、先入観に囚われず、スキル使用時のクリティカル率の方が低い可能性も検討することとする(そういうバグもないとは言えないし)。は、これより小さい差は、検出しそこなっても許容できる大きさに取る(あるいは、有意差がないことを示したい場合は、どれくらい小さい差なら無視できる差なのかを指定することにする)。勿論、これは一種の目安であって、これより大きい差は、より高い確率で検出できるし、これより小さい差も検出できる確率は低くなるが、0になるわけではない。
さっきと同様、二項分布の正規近似に基づくとは平均、分散の正規分布に近似的に従い、は平均、分散の正規分布に近似的に従い、は、平均、分散の正規分布に従うと近似できる。
信頼区間にオーバーラップがある条件は
と書ける。これが起きる確率は
となる。
計算すると、これは
になる。この式を変形して、から、を計算する式を得ることにする。
二通りに場合分けして、第一に
の時は、ほぼ100%、差がないと判断してしまう。
それ以外の場合の
という条件成立時の評価は、面倒くさいが、統計学の力が必要なのは、との差が小さい場合なので、と近似できるとしよう。すると、第二種エラーを起こす確率は
と近似できる。厳密さが気になるなら、なので、第二種エラーを起こす確率は、この近似値を超えることはないと言ってもいい。
更に、によって、定数を導入すると
という形になる。上に出てきた
という条件は、大体、に相当する。
信頼度が十分大きいとして、の場合、
で、の場合、
なので、以下のように近似できる。
この式は
と同値なので、として、これを変形すると、
を得る。この式によって、から試行回数を決定できる。
オーバーラップ法で、第一種のエラーを起こす確率をにするためには、信頼区間の信頼度は、と選べばよかった。すると、上の関係式は
と書ける。
実際には、は未知量なので、事前に試行回数を決めるためには、の値は、何らかの当て推量を行う必要がある。何の予測もなく、データを集めるのに(時間や予算の)制限がないなら、とりあえず、想像される範囲で、最大値を取っておけばいいだろう。例えば、クリティカル率なら、は共に10%は超えないと思って、2*0.1*0.9=0.18にするとか、そのような仮定をおかず、最大値の2*0.5*0.5=0.5を仮定しておくなど
こういう見積もりは、必要なサンプルサイズを過大に評価する可能性があり、検出したい差を、より高い確率で検出できるようになる(これは朗報だろうけど)。一方で、試行回数を増やせば、どんな小さな差も検出できるので、あんまり意味のない小さな差でも、有意差があると結論付ける場合がある。
クリティカル率を上昇するスキルが有用かどうかは、実際の上昇量や効果時間、使用コストなどの兼ね合いで決まるはずなので、有意差があるというだけでは不十分だろう。
時には、サンプルサイズの設計を行わずに、事前に集められたデータのみから結論を出したいこともあるかもしれない。その時には、試行回数は変更することができないので、を指定した上で、どのくらいの差なら検出できるのかという計算をすることになるのだと思う。
以上は、信頼区間の重なりを見るという方法で"検定"した時の性能評価なので、他の方法でどうなるかを調べて比較する必要がある。比率の差を検定する方法の一つに、z-unpooled testと呼ばれるものがある。これは、1985年に提案されたもの。
Exact Unconditional Sample Sizes for the 2 × 2 Binomial Trial
https://doi.org/10.2307/2981892
z-unpooled testで使用する検定統計量は、Wald信頼区間の計算に使われるものと同じ。似た方法にz-pooled testもあり、1986年の以下の論文に書かれている
An exact unconditional test for the 2 × 2 comparative trial
https://doi.org/10.1037/0033-2909.99.1.129
z-pooled testとz-unpooled testは、統合z検定、非統合z検定とでも訳すのが適当なんだろうけど、一般的な訳語を知らないので、英語のまま使う。実際の所、二群の比率の差の検定に関して、z-pooled testはカイ二乗検定と同値である(z-pooled testの検定統計量は、正規分布に従うが、その二乗は、自由度1のカイ二乗分布に従う)。
カイ二乗検定は、統計学のどの教科書にも載ってるけど、初出は1900年のKarl Pearsonの論文とされている
On the criterion that a given system of deviations from the probable in the case of a correlated system of variables is such that it can be reasonably supposed to have arisen from random sampling
https://doi.org/10.1080/14786440009463897
Pearsonの論文を読むと、カイ二乗検定は、標本空間が離散集合である時の適合度検定として提案されているが、標本空間が離散集合である時には、有限回の独立試行は、多項分布で記述されるので、多項分布に対するパラメトリック検定と思っても同じことになる。
z-pooled testとz-unpooled testでは、比率の差の分散で、微妙に異なる計算をする。"pooled"という名前は、分散の計算時に、二群間の比率を個別に計算する代わりに、両群の統合比率(pooled proportion)を使うことに由来する。二群の母比率が等しい場合には、z-pooled testの方が良い推定値を与える。z-unpooled testでは、比率の差の分散を小さめに評価するが、サンプル数が多ければ、両者の性能に、あんまり違いは出ない(サンプル数が増えれば、分散は小さくなり、真の分散に収束するはずなので)。サンプル数が少ないと、二群の母比率が等しい時に、「二群の母比率に差がない」という帰無仮説を棄却する確率が、設定した有意水準よりも大きくなる。
z-pooled testもz-unpooled testも、二項分布の正規近似に基づいてるので、サンプル数が物凄く少ない時には、設定した有意水準と、帰無仮説を棄却する確率が食い違うということは起こるが、z-unpooled testの方が、食い違いが大きく、サンプル数を増やした時の改善が少し遅い。そんなわけで、「二群の母比率に差がない」という帰無仮説を検定する場合には、z-pooled testを使った方がいいと言われている。
信頼区間の重なりを見る方法は、二群間で個別に比率を出してるので、z-unpooled testに近いと予想できるが、実際に、検定の有意水準、検出力、検出したい差、試行回数の関係は、オーバーラップ法のそれと似た形で書ける。オーバーラップ法の第二種エラーの計算の時と同様に、真の比率にはという関係があるとしておく。
まず、は、平均、分散の正規分布に従うが、z-unpooled testでは検定統計量として、
を使う。これは、平均がで、分散が1の正規分布に従う。検出力と有意水準は、
という関係を満たす。と変数変換をすると、この関係は
オーバーラップ法の時と積分区間が微妙に異なっている以外は、同じ形をしている。
従って、同様に計算していくと、
という近似式が得られる。
つまり、適切に信頼区間の信頼度を設定すれば、信頼区間の重なりを見るのと、z-unpooled testの性能は、ほぼ同等になる。オーバーラップ法の時は、という近似を使ったが、この近似がない場合、第二種エラーの確率を与える積分の区間が微妙に違っている。帰無仮説が正しい時、つまり、2つの比率に差がない時には、なので、両者の積分区間は厳密に等しいが、2つの比率が異なっている時には、z-unpooled testの方が、積分区間が大きいので、第二種エラーを起こす確率は高く、検出力は少しだけ小さくなるはず。との差が小さいほど、検出力の違いも小さくなる。
というわけで、信頼区間の重なりで差の有無を判定するのは、信頼区間の信頼度を適切に設定すれば、z-unpooled testより、僅かに良いということになる。但し、多分、実際に、信頼区間の重なりを見てる人たちは、信頼区間の信頼度を適切に設定してはいないと思われる。それに、信頼区間自体の幅自体が比率に依存してて、実際には、これも正しく推定できないという問題もあるので、そこまで考えると、性能がどうなるかは分からない。
z-unpooled testで必要なサンプル数の具体的な数字を見ておく(としているので、二群のそれぞれについて、以下の試行回数を要することに注意)
が、それぞれ、20%と40%で、有意水準5%、検出力80%とした場合、は、78.5
が、それぞれ、20%と40%で、有意水準0.5%、検出力95%とした場合、は、198.2
が、それぞれ、10%と20%で、有意水準5%、検出力80%とした場合、は、196.2
が、それぞれ、2%と10%で、有意水準5%、検出力80%とした場合、は、134.4
が、それぞれ、2%と10%で、有意水準0.5%、検出力95%とした場合、は、339.4
が、それぞれ、5%と10%で、有意水準5%、検出力80%とした場合、は、431.7
が、それぞれ、35%と40%で、有意水準5%、検出力80%とした場合、は、1467.7
が、それぞれ、2%と4%で、有意水準5%、検出力80%とした場合、は、1138.1
が、それぞれ、2%と4%で、有意水準0.5%、検出力95%とした場合、は、2873.8
が、それぞれ、12%と14%で、有意水準5%、検出力80%とした場合、は、4434.6
が、それぞれ、12%と14%で、有意水準0.5%、検出力95%とした場合、は、11197.9
が、それぞれ、0.1%と0.2%で、有意水準5%、検出力80%とした場合、は、23507.4
計算式から明らかかもしれないけど、有意水準と検出力を、かなり厳しくしても、必要な試行回数は意外と増えないが、小さな差を検出しようとすると、必要な試行回数は急激に増える。また、検出しようとする差が小さい時には、比率の差だけでなく、絶対的な大きさも強い影響がある。1%と2%の差を検出するより、50%と51%の差を検出するのは、ずっと多くの試行を必要とする。
疫学、心理学、教育学などの(人間の個体を対象とする)諸分野では、サンプル数nが、100〜1000の規模であることが多いように思う。比率の差10%くらいを検出しようとしてるなら、n=1000くらいあれば概ね問題なさそう(有意水準、検出力、母比率の差を固定した時、nが最大になるのはが45%と55%の場合で、有意水準0.5%、検出力95%でも、nは981.1)。数%の差を検出しようとしてるなら、n=1000でも不十分な場合があるという感じだと思う。
サンプル数100~1000くらいの実験が多い(ように思われる)のは、サンプルサイズを慎重に検討した結果というよりは、データ収集コストの兼ね合いで決まってることも多そうだけど、検出できる差には(確率的なブレがあるとはいえ)、サンプルサイズ(と有意水準、検出力)から決まる限界がある。簡単な計算で、z-unpooled testでは、とする時、
を示すことができる。Aの値は、有意水準5%かつ検出力80%なら、7.85で、有意水準5%かつ検出力90%なら、10.5になり、有意水準0.5%かつ検出力5%なら、19.82になる。
この式が言ってるのは、例えば、比率0%と1%の違いを調べたいなら、それぞれの群で、n=1000回くらい試す必要があるというだけのこと。nの値は、有意水準と検出力次第で変わるけど、標準的な設定なら、このオーダーになる。少なくとも、n=100では、比率1%の群で、観測したい事象が起きる回数の期待値は1回に過ぎず、一度も観測できない確率も30%以上ある(一度も観測できない確率が1%を下回るのは、nが459以上の時)のだから、結論を出すのに少なすぎることは直感的にも納得できる。勿論、偶然の偏りによって、小さいnでも有意差があると判定される可能性がないわけではない。けれど、基本的には、物理実験などと同じく、小さな差を検出したいなら、相応のコストを払う必要がある。
ゲームのクリティカル率の例題に即した話では、n=100で(有意水準5%とか1%とかで)有意差なしと結論が出たなら、クリティカル率が2%と20%みたいな大きな差があるということは、余りなさそう。けど、2%と10%くらいの差ということは、まだありそうなので、バグだと結論付けて、メーカーに苦情をいうには、試行回数が足りなすぎるだろう。
n=1000で有意差なしという結論が出ても、2%と4%の差を検出しそこなってる可能性は、そこそこある。2%と4%の差は、大きくはないかもしれないけど、2倍違うということもできるので、(ゲームデザインを勘案して)使えるスキルかどうか判断するには十分だとしても、バグを主張するには、ちょっと心もとない。
n=10000で有意差なしと結論が出たなら、2%と3%くらいの差は検出できてる可能性が高いので、控えめな姿勢で、メーカーにバグの可能性を報告をしてもいいかもしれない。しかし、一秒に一回攻撃できるとしても、2n=20000のデータを集めるのに、6時間くらいかかる。そんな検証より楽しいことは、多分沢山あるだろう。
信頼区間のオーバーラップの話に戻ると、以下の文献には、信頼区間の重なりで、差の有無を判定している文献が挙げられてる。
On Judging the Significance of Differences by Examining the Overlap Between Confidence Intervals
https://doi.org/10.1198/000313001317097960
ここで例として挙げられているのは、医療系の論文っぽいけど、標準的な検定を行った場合と、結果がどう変わるのかは書かれていない。信頼区間の信頼度を変更したら、どうなるかということも議論されてないっぽい
A brief note on overlapping confidence intervals
https://doi.org/10.1067/mva.2002.125015
も、内容的には同じ感じ。