分割表:オッズ比とリスク比で結論が逆になる理由【第30回】

はじめに

第28章は分割表です。

前回は時間方向に並んだデータを扱いました。今回はカテゴリを2方向に並べたデータで、第14回のカイ二乗適合度検定が行と列の2方向に拡張されます。

この章に入る前の私の認識は「クロス集計表をカイ二乗検定にかける回」で、第14回の応用編くらいだと思っていました。実際その認識はおおむね合っていて、統計量の式は第14回とまったく同じです。違うのは期待度数の作り方だけでした。

ところが手を動かしてみると、想定していなかったところで足を取られました。いちばん驚いたのはこれです。

同じ2つの表を比べているのに、リスク比で測ると片方が勝ち、オッズ比で測るともう片方が勝ちます。

15.0%から22.5%へ上がった施策と、60.0%から75.0%へ上がった施策。リスク比は1.50対1.25で前者が大きい。オッズ比は1.65対2.00で後者が大きい。どちらの計算も正しくて、それでも結論が逆になる。「オッズ比とリスク比の違い」を用語の問題だと思っていたのですが、報告する指標を選ぶ時点で結論を選んでいるという話でした。

もうひとつ効いたのがシンプソンのパラドックスです。層別すると2つの層でどちらもAが勝っているのに、合計するとBが17ポイント差で圧勝する表を作りました。しかもその合計表を検定すると X2=237X^2 = 237pp 値は 105310^{-53} の水準で「極めて有意にBが優れている」と出ます。有意性は交絡をまったく直してくれないという当たり前の事実を、数値で殴られる形で確認しました。

そして今回は、自分が出した3つの疑問がそのまま記事の柱になりました。残差の説明を読んでいて出てきた質問です。

  • 寄与度はなぜ期待値で割るのか。感覚的には標準偏差で割りたい
  • ピアソン残差は分かる。調整済み残差とは何なのか
  • 補正後の zz とは何か。標準偏差をかけて範囲を広げているのか

答えを先に書くと、1つ目は「実際に標準偏差で割っている」、2つ目は「周辺合計を推定に使ったせいで縮んだ分散を割り戻したもの」、3つ目は「分布は動かさず切る位置だけをずらしている」です。3つとも「数え上げの標準偏差とは何か」という1点に収束していて、教科書だと式だけ書いてあって理由が書かれていない場所でした。

いつものように、出てくる数値はすべて自分で計算し、理論値やシミュレーションと突き合わせています。

この回で扱う用語

用語読み・意味
分割表Contingency Table。2つ以上のカテゴリ変数を縦横に取って度数を数えた表。クロス集計表とも
独立性の検定Test of Independence。行と列が独立かどうかを調べる検定
期待度数Expected Frequency。帰無仮説のもとで期待される人数 EijE_{ij}
リスク差Risk Difference。2つの確率の差 p1p0p_1 - p_0。単位はポイント
リスク比Risk Ratio(相対リスク)。2つの確率の比 p1/p0p_1 / p_0
オッズOdds。「起きた:起きなかった」の比 p/(1p)p/(1-p)
オッズ比Odds Ratio。2つのオッズの比。ad/bcad/bc のたすき掛けで計算できる
フィッシャーの正確検定Fisher's Exact Test。周辺合計を固定して全パターンを数え上げる検定
超幾何分布Hypergeometric Distribution。周辺合計を固定したときのセル度数が従う分布
イエーツの連続性補正Yates' Continuity Correction。OE\mid O-E\mid から 0.5 を引く補正
マクネマー検定McNemar Test。対応のある2×2表で、不一致ペアだけを使う検定
シンプソンのパラドックスSimpson's Paradox。層別と全体で結論が逆転する現象
交絡因子Confounder。群の割り付けと結果の両方に関係する変数
マンテル・ヘンツェル法Mantel-Haenszel Method。層を通した共通オッズ比を推定する方法
ピアソン残差Pearson Residual。(OE)/E(O-E)/\sqrt{E}。2乗すると X2X^2 への寄与になる
調整済み残差Adjusted Residual(標準化残差)。分散を正しく補正した残差。近似的に標準正規分布に従う
対数線形モデルLog-Linear Model。セル度数の対数を行効果・列効果・交互作用の和で表すモデル
ケース・コントロール研究Case-Control Study。結果で群を分けてから原因を遡って調べる研究デザイン

まず何に使うのか

数式の前に、この道具が必要になる場面から入ります。

このブログの記事末尾に置いているアフィリエイトリンクのデザインを、2種類試したとします。集計はこうなりました。

クリックしたしなかった合計
デザインA30170200
デザインB45155200
合計75325400

知りたいのは「デザインとクリックには関係があるのか」です。A は15.0%、B は22.5%。差はありますが、400人程度だと偶然でもこれくらい動きそうな気がします。

この表が分割表です。行が2つ、列が2つなので 2×2 分割表と呼びます。行や列が増えれば r×cr \times c 分割表になります。

やりたいことは第14回と同じ「観測された度数が、ある仮説から期待される度数とどれくらいズレているか」を測ることです。ただ、その期待される度数がどこから来るのかが、第14回とは違います。

第14回との違いは、期待度数の作り方だけ

第14回の適合度検定では、期待度数が外から与えられていました。サイコロなら「各面 1/61/6」、ポアソン分布なら「λ\lambda を推定して各カテゴリの確率」。帰無仮説が確率を直接指定してくれるので、あとは総数を掛ければ期待度数になります。

分割表の帰無仮説は「行と列が独立」です。これは確率を直接指定していません。だから期待度数を自分で作る必要があります。

使うのは第2回でやった独立の定義 P(AB)=P(A)P(B)P(A \cap B) = P(A)P(B) です。

  • クリックする確率は P^(クリック)=75/400=0.1875\hat{P}(\text{クリック}) = 75/400 = 0.1875
  • デザインAである確率は P^(A)=200/400=0.5\hat{P}(A) = 200/400 = 0.5
  • 独立なら両方が起きる確率は 0.5×0.1875=0.093750.5 \times 0.1875 = 0.09375
  • 400人中の期待人数は 400×0.09375=37.5400 \times 0.09375 = 37.5

約分すると有名な形になります。

Eij=(行の合計)×(列の合計)(総計)=200×75400=37.5E_{ij} = \frac{(\text{行の合計}) \times (\text{列の合計})}{(\text{総計})} = \frac{200 \times 75}{400} = 37.5

3枚組。左は観測度数の2×2表で30、170、45、155が並ぶ。中央は期待度数の表で37.5、162.5、37.5、162.5が並び、行合計と列合計が観測値と一致することの注記がある。右はズレO−Eの表で−7.5、+7.5、+7.5、−7.5が市松模様に配置され、1つ決まれば残り3つが決まるという注記がある

ここが今回の全部の土台です。期待度数を作るために、表の周辺合計(行の合計と列の合計)をデータから借りてきています。

図の中央パネルを見ると、期待度数の行合計は 200/200、列合計は 75/325 で、観測値と完全に一致します。当然です、そこから作ったので。つまり観測値と期待値がズレていいのは表の内側だけという構造になっています。

あとは第14回と同じ式です。

X2=(OE)2E=(7.5)237.5+7.52162.5+7.5237.5+(7.5)2162.5=3.6923X^2 = \sum \frac{(O-E)^2}{E} = \frac{(-7.5)^2}{37.5} + \frac{7.5^2}{162.5} + \frac{7.5^2}{37.5} + \frac{(-7.5)^2}{162.5} = 3.6923

自由度1で p=0.0547p = 0.0547。5%をわずかに超えるので「有意差なし」です。15.0%対22.5%という見た目には大きい差でも、各200人では足りませんでした。

違いを整理しておきます。

適合度検定(第14回)独立性の検定(今回)
帰無仮説「この分布に従う」(確率を直接指定)「行と列が独立」(確率は指定しない)
期待度数の出どころ仮説が与える周辺合計から自分で作る
データから借りる量0個(または推定した mm 個)(r1)+(c1)(r-1) + (c-1)
自由度k1mk - 1 - m(r1)(c1)(r-1)(c-1)
統計量(OE)2/E\sum (O-E)^2/E同じ

統計量の式は完全に同じで、違うのは期待度数の作り方と、その結果としての自由度だけです。

自由度 (r−1)(c−1) を実際に数える

第14回で「自由度=制約の本数を引く」と学んだので、その考え方で導けるはずです。実際に数えてみます。

先に、さっきの2×2表で自由度1が目に見える形で出ていたことを指摘しておきます。図の右パネルのズレを並べると 7.5,+7.5,+7.5,7.5-7.5, +7.5, +7.5, -7.5 で、4つとも絶対値が同じ、符号だけが市松模様に並んでいます。

これは偶然ではありません。周辺合計が観測値と一致しているので、ズレは行の中で足して0、列の中でも足して0でなければいけない。この制約を満たす4つの数は、1個決めたら残り3個が自動的に決まります。だから自由に動ける方向が1つしかない。これが自由度1の意味です。

もう少し大きい表で確かめます。読者の年代と流入元のクロス集計で、周辺合計だけを固定して、左上から埋めていきます。

3行4列の表。左上の2行3列(40、30、20、60、40、30)が黄色で塗られ自由に置けたセルであることを示し、右端の列と最下行の6セルが灰色で引き算により決まったことを示す。行合計100、150、50、列合計120、90、60、30、総計300

黄色の6セルを自由に置いた時点で、残りの6セルは全部引き算で決まります。右端の列は行合計から、最下行は列合計から出てくる。

(31)×(41)=2×3=6(3-1) \times (4-1) = 2 \times 3 = 6

これが自由度です。1-1」は「最後の行と最後の列は引き算で出るから数えない」という意味でした。

注目してほしいのは「40代 × メール = 0」です。これは私が選んだ値ではなく、周辺合計から強制された値です。自由度の話は「どのセルを自由に決められるか」の話なので、こういう強制されるセルは数に入りません。

第14回の「制約を引く」書き方でも同じ数が出ます。

数えるもの個数
セル確率のうち自由なものrc1=11rc - 1 = 11(全部足して1なので1本減る)
行の周辺確率を推定するのに使った本数r1=2r - 1 = 2
列の周辺確率を推定するのに使った本数c1=3c - 1 = 3
1123=611 - 2 - 3 = 6

(r1)(c1)=rcrc+1=(rc1)(r1)(c1)(r-1)(c-1) = rc - r - c + 1 = (rc-1) - (r-1) - (c-1) なので、展開すれば同じ式です。「実際に埋めてみる」やり方と「制約を引く」やり方が一致することが確認できました。

「周辺合計を固定する」には3つの意味がある

ここで先に注意しておきます。この「周辺合計は固定されている」という言い方は、実際のデータ収集では場面によって意味が変わります。

データの取り方固定されているもの確率モデル
400人集めてから、デザインと結果の両方を記録総計のみ1つの多項分布
デザインAに200人、Bに200人と決めて割り振った行合計独立な2つの二項分布
フィッシャーの正確検定の立場行と列の両方超幾何分布

確率モデルとしては別物なのに、X2X^2 の計算式は完全に同じになります。これは偶然ではなく、どのモデルでも最尤推定した期待度数が同じ形になるためです。ただし後で見るフィッシャーの正確検定は3番目の立場を取るので、そこだけ区別が必要になります。


3つの指標:どこを分母に置くかだけが違う

ここからが今回の本題のひとつです。実務でいちばん混乱するところでした。

同じ2×2表から、効果の大きさを表す指標が3つ出てきます。

3枚組。左はリスク差で2本の棒の高さの差7.5ポイントを矢印で示す。中央はリスク比で棒の高さの比1.50倍を示す。右はオッズ比で、クリックした人としなかった人の2本の棒を並べ、その比としてオッズ0.1765と0.2903を計算し、比が1.65になることを示す。オッズは1を超えうるので右パネルだけ縦軸の範囲が広い

指標定義読み方
リスク差pBpAp_B - p_A+0.075+0.075100人あたり7.5人増える
リスク比pB/pAp_B / p_A1.5001.5001.5倍になる
オッズ比pB/(1pB)pA/(1pA)\dfrac{p_B/(1-p_B)}{p_A/(1-p_A)}1.6451.645オッズが1.645倍

「リスク」という語は医学由来の慣習で、悪いことを指す必要はありません。クリック率でも計算は同じです。気になるなら「率の差」「率の比」と読み替えて構いません。

図の右パネルがオッズという量の正体です。棒が2本並んでいて、左が「クリックした」、右が「しなかった」。オッズはこの2本の高さの比です。分母が「全体」ではなく「していない人」なので、確率と違って1を超えられます。

第18回でロジスティック回帰をやったときに、係数 β\beta に対する eβe^\beta がオッズ比になることを確認しました。あの量がここに戻ってきています。

オッズ比だけが特殊な振る舞いをする

リスク比を1.5に固定したまま、基準確率 p0p_0 だけを動かしてみます。

2枚組。左はリスク比を1.2、1.5、2.0に固定したときの基準確率p0とオッズ比の関係を3本の曲線で示し、p0が小さいとリスク比に近く、p0=0.5でリスク比1.5がオッズ比3.0になることを注記する。右は低ベース15.0%→22.5%と高ベース60.0%→75.0%の2つの表について、リスク比、オッズ比、リスク差を棒グラフで並べ、大小関係が指標ごとに入れ替わることを示す。リスク差だけは他の2つと縦軸の桁を合わせるため10で割って描き、棒の上のラベルには元のポイント値を書いている

p0p_0p1=1.5p0p_1 = 1.5 p_0リスク比オッズ比オッズ比 ÷ リスク比
0.0050.00751.501.50381.0025
0.010.0151.501.50761.0051
0.050.0751.501.54051.0270
0.100.1501.501.58821.0588
0.200.3001.501.71431.1429
0.400.6001.502.25001.5000
0.500.7501.503.00002.0000
0.600.9001.506.00004.0000
0.660.9901.5051.000034.0000

リスク比はずっと1.50なのに、オッズ比は1.50から発散まで動きます。「オッズ比が3.0だった」と聞いても、元の確率が分からないとリスク比が1.5なのか3.0なのか判断できません。

理由は式を変形すると見えます。

オッズ比=リスク比×1p01p1\text{オッズ比} = \text{リスク比} \times \frac{1-p_0}{1-p_1}

1p01p1\dfrac{1-p_0}{1-p_1} という水増し係数が掛かっています。p0,p1p_0, p_1 が小さければこの係数は1に近いのでオッズ比とリスク比はほぼ一致し、大きくなると分母 1p11-p_1 が0に近づいて暴れます。第18回で「両群とも稀であることが条件」と書いた、その条件の正体がこれです。

目安を書くときに一度間違えました。上の表の p0=0.10p_0 = 0.10 の行(差 5.88%)を見て「どちらも0.10以下なら6%以内」と書こうとしたのですが、この行の p1p_1 は 0.15 で0.10を超えています。 条件と根拠が噛み合っていませんでした。

正しくは、水増し係数の上限は大きいほうの確率 p1p_1 だけで決まります。

1p01p1<11p1\frac{1-p_0}{1-p_1} < \frac{1}{1-p_1}

なので p1tp_1 \leq t なら差は 1/(1t)1/(1-t) 倍以内。t=0.10t = 0.10 で11.1%、t=0.20t = 0.20 で25.0%です(p0=0.001p_0 = 0.001p1=0.10p_1 = 0.10 ならリスク比100に対してオッズ比111で、実際に11.0%ずれます)。

リスク比を1.5程度に限ればp00.10p_0 \leq 0.10(したがって p10.15p_1 \leq 0.15)で差は5.88%以内。p0p_0 が 0.154 を超えると1割、0.20 で14.3%です。効いているのは p0p_0 ではなく p1p_1 の側だという点が要点になります。

結論が逆転する

図の右パネルが実務でいちばん危ないところです。

低ベース 15.0%→22.5%高ベース 60.0%→75.0%どちらが大きいか
リスク差+7.5+7.5 ポイント+15.0+15.0 ポイント高ベース
リスク比1.501.501.251.25低ベース
オッズ比1.6451.6452.0002.000高ベース

リスク比で見ると低ベースの勝ち、オッズ比で見ると高ベースの勝ちです。同じ2つの表なのに、指標を変えると結論がひっくり返ります。

誰かが計算を間違えているわけではありません。3つとも正しい計算です。測っている「差」の定義が違うだけで、第21回の標本調査法で「分散」が2つの別物を指していて混乱した、あれと同じ構造です。ここでは「効果」という言葉が3つの別物を指しています。

では何を報告するか

判断の基準はこうなります。

場面報告すべき指標理由
意思決定者に見せる(A/Bテスト・施策の効果)リスク差単独で意味が確定する。「月1万PVなら750クリック増」と件数に直せる
ベースが違う環境に一般化したいリスク比比のほうが環境をまたいで移りやすいという経験的な前提がある
ロジスティック回帰の係数(第18回)オッズ比eβe^\beta がそのままオッズ比になる。モデルの内部の量
ケース・コントロール研究オッズ比リスク比が原理的に計算できない(次節)

リスク差がいちばん強い理由は、単独で意味が確定することです。 「7.5ポイント上がった」は追加情報なしで件数に変換できます。「1.5倍」も「オッズ比1.645」も、元の確率を添えないと大きさが分かりません。

オッズ比だけが抽出率の影響を受けない

「では実務でオッズ比を使う理由はないのか」と思うところですが、オッズ比でなければならない場面があります。

「クリックした人100人」と「しなかった人100人」をあとから選んで集めて、その人たちがデザインAだったかBだったかを調べる。医学ではこれをケース・コントロール研究と呼びます。過去のデータから遡って調べるときの標準的なやり方です。

この場合、クリック率は計算できません。 「クリックした人を100人」と自分で決めてしまったので、表の中のクリック率50%は自分が作った数字です。

ところがオッズ比だけは、行から計算しても列から計算しても同じ値になります。

a/bc/d=adbc=a/cb/d\frac{a/b}{c/d} = \frac{ad}{bc} = \frac{a/c}{b/d}

真ん中の ad/bcad/bc(たすき掛け)が対称なので、行と列を入れ替えても不変です。

これを数値で確かめました。母集団を全部見える形にしておきます。デザインAは5万人に見せて1500クリック(3.0%)、Bは5万人に見せて3000クリック(6.0%)。真のリスク比は 2.000000、真のオッズ比は 2.0638297872 です。

ここから「クリック者1000人・非クリック者1000人」を抜きます。抽出率はクリック者が 1000/4500=0.22221000/4500 = 0.2222、非クリック者が 1000/95500=0.010471000/95500 = 0.01047 で、21.2倍も違う率で抜いています。かなり乱暴な操作です。

2枚組。左は抽出人数を4通り変えた場合と母集団(全数)の5組について、リスク比とオッズ比の推定値を棒グラフで並べ、オッズ比は5組すべてで2.0638に一致し、抽出した4組のリスク比は1.166から1.937まで暴れることを示す。右は同じ5組で、抽出した4組の見かけのクリック率が6.16%から72.42%まで動き、真の3.00%とかけ離れることを示す

抽出した人数見かけのクリック率Aリスク比オッズ比
クリック者1000/非10000.3962661.4518072.0638297872
クリック者500/非20000.1409591.7947022.0638297872
クリック者2000/非5000.7241711.1657462.0638297872
クリック者300/非30000.0615931.9369142.0638297872
母集団(全数)0.0300002.0000002.0638297872

オッズ比だけが小数第10位まで一致します。 クリック率は 6.16% から 72.42% まで動き、リスク比は 1.166 から 1.937 まで暴れているのに。

理由は約分です。抽出後の表は (af1bf0cf1df0)\begin{pmatrix} af_1 & bf_0 \\ cf_1 & df_0\end{pmatrix} という形をしています(f1f_1 がクリック者の抽出率、f0f_0 が非クリック者の抽出率)。

オッズ比=cf1/df0af1/bf0=cf1bf0df0af1=bcadの形\text{オッズ比} = \frac{cf_1/df_0}{af_1/bf_0} = \frac{cf_1 \cdot bf_0}{df_0 \cdot af_1} = \frac{bc}{ad}\text{の形}

掛け算と割り算しか使っていないので、列ごとに掛かった定数倍が約分で消えます。

リスク比はそうなりません。

リスク比=cf1/(cf1+df0)af1/(af1+bf0)\text{リスク比} = \frac{cf_1/(cf_1 + df_0)}{af_1/(af_1 + bf_0)}

分母に f1f_1f0f_0足し算が出てくるので、約分できずに残ります。

1行でまとめると「オッズは分母が同じ列の中の相手(しなかった人)なので、列に掛かった定数と一緒に消える」です。確率は分母が行の合計で、そこに f1f_1f0f_0 が混ざって入るので消えません。

なお今回の例では真のオッズ比 2.0638 と真のリスク比 2.0000 の差が3%しかありません。クリック率が3%と6%という低ベースだからで、水増し係数が 0.97/0.94=1.0320.97/0.94 = 1.032 とほぼ1になっています。逆向きにサンプリングしてもオッズ比が取れる → それを低ベースだからリスク比として解釈する、という2段構えで医学統計は回っています。


シンプソンのパラドックス:層別と全体で結論が逆転する

ここで指標の選び方ではどうにもならない問題が出てきます。

先に告白しておくと、この節の数値例を作るのに1回失敗しました。最初に作ったのは「層1ではBが勝ち、層2ではAが勝つ」という表でしたが、これはただのばらつきでパラドックスではありません。条件は厳しくて、すべての層でAが勝ち、なおかつ合計するとBが勝つでなければいけません。

設定

CTAデザインを2種類比較しますが、割り付けが偏っています。デザインAは主に解説記事に出し、Bは主にレビュー記事に出してしまった、という状況です。

3枚組。左は層別の棒グラフで解説記事3.0%対2.0%、レビュー記事30.0%対25.0%とどちらもAの勝ちであることを示す。中央は合計するとA 5.70%対B 22.70%でBが17ポイント差で勝つことを示す。右は層別の率を線で結び、円の大きさで人数を表して、Aは9割が低い層、Bは9割が高い層にいることを示す

Aの結果Bの結果Aの率Bの率勝ちオッズ比(B対A)X2X^2
解説記事54/18004/2003.00%2.00%A0.65990.6392
レビュー記事60/200450/180030.00%25.00%A0.77782.3687
【全体】114/2000454/20005.70%22.70%B4.8583237.2041

どちらの層でもAが勝っているのに、合計するとBが17ポイント差で勝ちます。 足し算しかしていないのに結論がひっくり返る。

しかも全体の表で検定すると X2=237.20X^2 = 237.20pp 値は 105310^{-53} の水準です。極めて有意に「Bが優れている」と出ます。向きは逆なのに。

正体は加重平均

図の右パネルが種明かしです。全体の率は各層の率の加重平均で、その重みがAとBで正反対になっています。

Aの全体=0.0300×0.90+0.3000×0.10=0.0570\text{Aの全体} = 0.0300 \times 0.90 + 0.3000 \times 0.10 = 0.0570 Bの全体=0.0200×0.10+0.2500×0.90=0.2270\text{Bの全体} = 0.0200 \times 0.10 + 0.2500 \times 0.90 = 0.2270

Aは9割が「クリック率2.9%の層」、Bは9割が「25.5%の層」にいます。Aは各層で勝っているのに、負けやすい土俵に9割配置されている。 平均を取ると土俵の差が勝敗の差を上塗りします。

図の右パネルで見るべきは線の傾きではなく円の大きさです。線(層別の率)はAが常に上にあります。円(人数)が逆で、Aの大きい円が左下、Bの大きい円が右上。破線(全体の率)は大きい円のほうに引き寄せられています。

オッズ比でも逃げられない

前の節でオッズ比の不変性を確認したので、「オッズ比なら大丈夫では」と思うかもしれません。だめです。

層別のオッズ比は 0.6599 と 0.7778(どちらも1未満=Aが良い)、全体は 4.8583(1超=Bが良い)。方向が逆転しています。

前節で確認した不変性は「列ごとの定数倍に対する不変性」で、層を潰す操作はまったく別のことです。ここを混同すると危ないので明示しておきます。

直し方は2つ

(1)標準化。 重みを揃えて加重平均を取り直します。両層を50:50にすると、

A=0.0300×0.5+0.3000×0.5=16.50%,B=0.0200×0.5+0.2500×0.5=13.50%\text{A} = 0.0300 \times 0.5 + 0.3000 \times 0.5 = 16.50\%, \quad \text{B} = 0.0200 \times 0.5 + 0.2500 \times 0.5 = 13.50\%

Aの勝ちに戻ります。 第21回の層別抽出で「重みを設計する」話をしましたが、同じ道具です。

(2)マンテル・ヘンツェル法。 層を通した共通オッズ比を1つの数にまとめます。

θ^MH=kbkck/nkkakdk/nk=34.992045.7920=0.7642\hat{\theta}_{MH} = \frac{\sum_k b_k c_k / n_k}{\sum_k a_k d_k / n_k} = \frac{34.9920}{45.7920} = 0.7642

層別の 0.6599 と 0.7778 の間にきちんと入ります。 全体の表から出した 4.8583 とは別物です。対応する検定がマンテル・ヘンツェル検定(コクラン・マンテル・ヘンツェル検定とも)で、「各層のズレを足し合わせてから1本のカイ二乗にする」という発想です。層ごとに検定して多重比較するのではなく、層を制御したうえで1本の検定にします。

交絡には2つの条件が同時に必要

「裏側の前提がズレていると駄目」という理解でおおむね合っていますが、条件は2つあって、両方が揃わないと逆転しません

  1. 層が群の割り付けと関係している(Aは解説記事に9割)
  2. 層が結果とも関係している(解説記事はそもそもクリック率が低い)

片方だけなら結論は逆転しません。 記事タイプの構成比が9割対1割に偏っていても、記事タイプによってクリック率が変わらなければ(両層とも3%なら)全体の率は層別の率と一致します。逆に記事タイプでクリック率が大きく違っても、AとBが50:50で均等に割り付けられていれば重みが揃うので、リスク差は層別の値の加重平均になり、勝敗の向きも保たれます(率そのものは平均なので層別の値とは別の数になりますが、AとBで同じ重みを使うのでひっくり返りません)。

ただしオッズ比だけは、均等に割り付けても層別の値と一致しません。 共通の層別オッズ比が 2.0002.000 でも、層1が p0=2%p_0 = 2\%、層2が p0=60%p_0 = 60\% というベースの違いがあると、50:50で割り付けた合計表のオッズ比は 1.4511.451 まで縮みます。これはオッズ比の非崩壊性(non-collapsibility)と呼ばれる性質です。率とリスク差は加重平均で保たれるのに、オッズ比は保たれない。

縮むだけで向きは変わりません(20万通りスキャンして log(周辺OR)/log(層別OR)\log(\text{周辺OR}) / \log(\text{層別OR}) は常に (0,1](0, 1] の範囲でした)。なので「層別と全体でオッズ比が違う」だけでは交絡があるとは言えません。

逆向きも成り立ちません。「逆転していなければ交絡なし」とも言えず、向きが同じまま値が大きくずれる交絡も作れます(共通オッズ比 2.000 で、層のベースを 5%5\%40%40\%、割り付けを 600:400 と 400:600 にすると合計表は 2.62 になります)。結局、割り付けと結果の両方に矢印が刺さっているかどうかは、データの外側で確認するしかありません。

両方の矢印が刺さっている変数を交絡因子と呼びます。この「両方」という条件があるので、ランダム化すれば1本目の矢印が切れて安全になるという処方が効きます。

これは統計の問題なのか

大事な点なので書いておきます。シンプソンのパラドックスは計算の誤りではありません。 上の表の数字はすべて正しい。

問題はどちらを見るべきかがデータだけでは決まらないことです。「解説記事かレビュー記事か」は、CTAデザインを決める前から存在する読者側の性質です。だからこれで層別するのが正しい。

しかし仮に層別変数が「CTAを見てから起きたこと」(たとえば「ページを最後までスクロールしたか」)だったら、層別するほうが間違いになります。デザインの効果がスクロール率を経由して伝わっているなら、スクロール率で層別するとその経路を潰してしまいます。

「層別すべきか」は因果の順序の問題で、分割表を眺めているだけでは判断できません。 第27回のコラムで「変数を入れれば安全ではない」という話をしましたが、それと同じ問題がここにも出ています。

実務的な処方は単純です。A/Bテストではランダムに割り付ける。 ランダム化すれば期待値として層の構成比が揃うので、この問題が起きません。記事タイプごとに手で振り分けるのではなく、同じ記事内でランダムに出し分けるのが正解です。


マクネマー検定:同じ人を2回測ったとき

ここまでは「1人が表のどこか1箇所に入る」表を扱ってきました。同じ人を2回測る場合は、表の意味が変わります。

同じ100人に旧デザインと新デザインの両方を見せて、それぞれクリックしたかを記録します。

3枚組。左は2×2表でa=20とd=50を灰色(意見が一致した人)、b=5とc=25を色つき(意見が割れた人)に塗り分ける。中央は旧25%と新45%の棒を積み上げで表し、a=20が両方に共通なので差はc−b=20人になることを示す。右は率の差を+20ポイントに固定したまま中身を変えたときのカイ二乗値の比較で、aを20から40に変えても13.33のまま不変であることを示す

新:した新:しない
旧:したa=20a = 20b=5b = 525
旧:しないc=25c = 25d=50d = 5075
4555100

この表は見た目が同じですが、意味がまったく違います。 今までは行が「A群の人/B群の人」で、1人は1つのセルに入りました。今回は行と列が同じ人の2回の回答です。だから合計は200ではなく100になります。

見分け方のルール:1人が表に何回登場するかを数える。1回ならふつうの分割表、2回(同じ人の2つの回答が1つのセルを決める)ならマクネマー。 言い換えると、測定回数が表の合計の2倍ならマクネマー、一致するならふつうの分割表です。上の表は100人×2回=200測定に対して合計100、最初のCTA表は400人×1回=400測定に対して合計400でした。

差はどこから来るのか

旧のクリック率は (a+b)/n=25%(a+b)/n = 25\%、新は (a+c)/n=45%(a+c)/n = 45\%。引き算してみます。

a+cna+bn=cbn=255100=0.20\frac{a+c}{n} - \frac{a+b}{n} = \frac{c-b}{n} = \frac{25-5}{100} = 0.20

aa が消えました。 図の中央パネルがこれです。旧の棒は 20+520+5、新の棒は 20+2520+25 で、灰色の a=20a=20 が共通部分。引き算すると共通部分が消えて、色のついた部分の差だけが残ります。dd(どちらもクリックしなかった50人)は最初から入っていません。

率の差に効いているのは bbcc だけ。意見が一致した人(両方クリックした20人、両方しなかった50人)は、差について何の情報も持っていません。

だから検定も b と c だけで行う

X2=(bc)2b+c=(525)25+25=40030=13.3333X^2 = \frac{(b-c)^2}{b+c} = \frac{(5-25)^2}{5+25} = \frac{400}{30} = 13.3333

自由度1で p=0.000261p = 0.000261

この式の意味はもっと単純です。 意見が割れた人が30人いて、そのうち25人が「新のほうでクリックした」向き。もし2つのデザインに差がないなら、割れた人がどちらに割れるかはコイン投げのはずです。30回投げて25回表が出たら偏っていると言える。

実際に厳密な二項検定(n=30n=30, p=0.5p=0.5, k=25k=25, 両側)をやると p=0.000325p = 0.000325 でした。カイ二乗近似の 0.0002610.000261 とよく合っています。

マクネマー検定は「不一致ペアに対する符号検定」で、第15回でやった符号検定と同じ道具です。

対応のあるt検定との比較

対応のあるt検定(第13回)マクネマー検定(今回)
データ各人の di=yixid_i = y_i - x_i各人の(0/0, 0/1, 1/0, 1/1)
捨てるもの個人の水準(平均が高い人・低い人)一致ペア a,da, d
効く量1ρ\sqrt{1-\rho} で標準誤差が縮む不一致ペアの数 b+cb+c
元になる検定1標本t検定符号検定(二項検定)

共通しているのは「個人差を引き算で消す」という発想です。 第13回で「対応のあるt検定の正体は 1ρ\sqrt{1-\rho}」という話をしました。相関が高いほど個人差が大きく消えて得をする、という構造です。

違うのは、消え方が離散的なことです。 t検定では差 did_i が連続値なので全員が情報を持ちます。マクネマーでは差が 1,0,+1-1, 0, +1 の3値しかなく、00 の人(一致ペア)は完全に無情報になって捨てられる。連続の場合の「相関が高いと得」が、離散では「一致ペアが増える」という形で現れます。

数値で確認します。率の差を +20ポイントに固定したまま中身を変えます。

aabbccddX2X^2pp
205255025%45%+20pt13.33330.00026
405253045%65%+20pt13.33330.00026
0020800%20%+20pt20.00000.00001
3010303040%60%+20pt10.00000.00157

1行目と2行目は aa を20から40に変えただけで、X2X^2 が小数第4位まで同一です。一致ペアは検定に一切寄与しません。3行目は不一致が20件しかないのに全部同じ向きb=0b=0)なので X2=20X^2 = 20 と最も強い証拠になります。「20人中20人が新を選んだ」ですから、確かに強い。

誤用するとどうなるか

同じデータを4通りに検定しました。

方法X2X^2pp何に答えているか
マクネマー検定13.33330.000261率が上がったか(正しい問い)
厳密二項検定0.000325同じ問いを厳密に
マクネマー+連続性補正12.03330.000523同じ問い(やや保守的)
独立性の検定(誤用)16.49830.000049別の問い
比率の差の検定(対応を無視)8.79120.003027正しい問いだが検出力を捨てる

独立性の検定をこの表にかけると pp 値がもっと小さくなります。 でもこれは良い結果ではありません。答えている問いが違うからです。独立性の検定が聞いているのは「旧でクリックした人は新でもクリックしやすいか」で、これは対角の a,da, d が大きいかどうかの話。個人の一貫性を測っているだけで、率が上がったかは何も言っていません。

逆に対応を無視して第13回の比率の差の検定をすると X2X^2 が 13.33 から 8.79 に落ちます。結論は変わりませんが、個人差を消す利得を捨てています。

実務での使いどころ

A/Bテストは、ほぼ確実にマクネマーではありません。 訪問者を2群にランダムに分けるので、1人は片方のデザインしか見ません。これは対応のないデータです。

マクネマーが必要になるのは同じ人を2回測るときで、医学では標準的な使いどころが3つあります。

場面内容
診断法の比較同じ患者100人に検査Aと検査Bの両方を実施して、どちらが陽性を拾えるか
クロスオーバー試験同じ患者に薬Aを投与し、期間を置いてから薬Bを投与する
マッチドペアのケース・コントロール患者1人ごとに年齢・性別が同じ健常者を1人選んでペアにする

3つ目が示しているのは、マクネマーの本質が「同一人物」ではなく「ペアになっていること」だという点です。 ペアを作った理由は問いません。第13回の対応のあるt検定が双子のデータや左右の目のデータに使えるのと同じ構造です。

Web の文脈で言えば、同じ読者にメールの件名AとBを別々の週に送って開封率を比べる、サイト改修の前後で同じ登録ユーザーの行動を比べる、といった場面が該当します。


残差分析:どのセルが原因か

r×cr \times c 表で有意になったあと、必ず出てくる問題があります。

読者の年代(4段階)× 流入元(4種類)のクロス集計、n=2740n = 2740 で検定すると X2=464.20X^2 = 464.20、自由度9、p2.6×1094p \approx 2.6 \times 10^{-94}

検索SNS直接メール
20代3202106010600
30代54015018030900
40代43060210100800
50代以上21020100110440
15004405502502740

「年代と流入元は独立ではない」。これで終わりでは何の役にも立ちません。 16個の数字のどこが変なのかを知りたい。第20回で分散分析のあとに多重比較をした、あの流れと同じ構造です。

3枚組。左はセルの寄与のヒートマップですべて正の値になり符号が消えていることを示す。中央は調整済み残差のヒートマップで赤が期待より多い、青が少ないを表し、ボンフェローニ補正後も有意なセルに星印が付く。右はピアソン残差の絶対値と調整済み残差の絶対値の散布図で、全16セルが対角線より上にあることを示す

素朴な方法:セルの寄与を見る

X2X^2 は16個の項の和なので、各項を見れば大きいところが分かります。

検索SNS直接メール
20代0.2134.130.336.6
30代4.50.20.033.1
40代0.136.515.210.0
50代以上4.036.31.5121.5

丸めずに足すと 464.2004 で X2X^2 に一致します(表示は小数第1位に丸めているので、見えている数字を足すと 464.1 になります)。20代×SNS と 50代以上×メールが突出しています。

しかしこれには欠陥があります。2乗しているので全部正の値になり、「期待より多い」のか「少ない」のかが消えています。

ピアソン残差:符号を残す

2乗する前の形を見ます。

eij=OijEijEije_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}}}

これをピアソン残差と呼びます。2乗すると寄与になるので eij2=X2\sum e_{ij}^2 = X^2 が成り立ちます(実測 464.2004 で一致)。符号が残るので、20代×SNS は +11.578+11.578 で「期待より多い」と読めます。

調整済み残差:これが正しい道具

正しい標準化はこうなります。

dij=OijEijEij(1p^i)(1p^j)d_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}(1 - \hat{p}_{i\cdot})(1 - \hat{p}_{\cdot j})}}

p^i\hat{p}_{i\cdot} が行の周辺確率、p^j\hat{p}_{\cdot j} が列の周辺確率。これを調整済み残差(または標準化残差)と呼び、帰無仮説のもとで近似的に標準正規分布に従います。なぜこの形なのかは次の節でシミュレーションで確かめます。

分母に (1p^i)(1p^j)(1-\hat{p}_{i\cdot})(1-\hat{p}_{\cdot j}) という1未満の数が入っているので、この平方根で割ると必ず絶対値が大きくなります。図の右パネルで全16点が対角線より上にあるのがこれです。

倍率は 1/(1p^i)(1p^j)1/\sqrt{(1-\hat{p}_{i\cdot})(1-\hat{p}_{\cdot j})} で、実測では 1.145〜1.814 の範囲でした。

セル(1p^i)(1p^j)(1-\hat{p}_{i\cdot})(1-\hat{p}_{\cdot j})ピアソン残差調整済み残差倍率
30代 × 検索0.3039+2.131+2.131+3.865+3.8651.814
40代 × 検索0.32040.380-0.3800.672-0.6721.767
50代以上 × 検索0.37991.989-1.9893.228-3.2281.622
20代 × SNS0.6556+11.578+11.578+14.300+14.3001.235
50代以上 × メール0.7628+11.025+11.025+12.623+12.6231.145

検索の列で倍率が最大です。 検索は周辺確率が 1500/2740=0.54741500/2740 = 0.5474 と大きいので (10.5474)=0.4526(1-0.5474) = 0.4526 が小さく、補正が強く効きます。メールの列は p^j=0.0912\hat{p}_{\cdot j} = 0.0912 なので (10.0912)=0.9088(1-0.0912) = 0.9088 でほぼ補正なし。

「よく使われる行・列に属するセルほど強く割り戻す」ということです。第17回のてこ比と同じ発想で、周辺で大きな影響力を持っている場所はそのぶん割り引いて評価します。

判定が変わるセルが実際にありました。50代以上×検索はピアソン残差 1.989-1.9891.961.96 をぎりぎり超えるかどうかという値ですが、調整済み残差では 3.228-3.228 で明確に有意です。ピアソン残差で判断すると「微妙」で済ませてしまう場所が、正しくは明確に有意でした。

全16セルの結果

セルOE寄与ピアソン残差調整済み残差
20代 × SNS21096.35134.06+11.578+11.578+14.300\mathbf{+14.300}
50代以上 × メール11040.15121.55+11.025+11.025+12.623\mathbf{+12.623}
40代 × SNS60128.4736.496.041-6.0417.836\mathbf{-7.836}
30代 × メール3082.1233.085.751-5.7517.362\mathbf{-7.362}
50代以上 × SNS2070.6636.326.026-6.0267.179\mathbf{-7.179}
20代 × メール1054.7436.576.047-6.0477.178\mathbf{-7.178}
20代 × 直接60120.4430.335.507-5.5076.970\mathbf{-6.970}
40代 × 直接210160.5815.21+3.900+3.900+5.184\mathbf{+5.184}
40代 × メール10072.999.99+3.161+3.161+3.941\mathbf{+3.941}
30代 × 検索540492.704.54+2.131+2.131+3.865\mathbf{+3.865}
50代以上 × 検索210240.883.961.989-1.9893.228\mathbf{-3.228}
50代以上 × 直接10088.321.54+1.243+1.243+1.517+1.517
20代 × 検索320328.470.220.467-0.4670.786-0.786
40代 × 検索430437.960.140.380-0.3800.672-0.672
30代 × SNS150144.530.21+0.455+0.455+0.607+0.607
30代 × 直接180180.660.000.049-0.0490.067-0.067

太字が z>2.96|z| > 2.96(後述のボンフェローニ補正後)で有意なセルです。読み取れることを並べます。

発見根拠
20代はSNSから来る調整済み残差 +14.30+14.30(期待96人に対し210人)。表全体で最も強い
50代以上はメールから来る+12.62+12.62(期待40人に対し110人)
SNSは年代とともに単調に減る行内シェアが 35.0%16.7%7.5%4.5%35.0\% \to 16.7\% \to 7.5\% \to 4.5\%
メールは年代とともに単調に増える行内シェアが 1.7%3.3%12.5%25.0%1.7\% \to 3.3\% \to 12.5\% \to 25.0\%
検索は表全体への貢献は小さいが、無関係ではない寄与の合計は8.9(全体464のうち1.9%)。ただし調整済み残差では 30代 +3.87+3.87・50代以上 3.23-3.23 が有意

X2=464X^2 = 464 で独立でない、というだけの情報から、ここまで具体的な話に落ちました。 実務ではこの表を見て「20代向けの記事はSNSでの拡散を意識する、50代以上向けはメルマガに載せる」という判断になります。

この表を作るときに1つ間違えました。最初は単調性の根拠として調整済み残差を並べていました(SNSなら +14.30+0.617.847.18+14.30 \to +0.61 \to -7.84 \to -7.18)。ところがこれは単調ではありません。最後の段で 7.847.18-7.84 \to -7.18 と増えています。メールも最初の段が 7.187.36-7.18 \to -7.36 で減っている。

残差は行の nn にも依存するので、単調性を見る量ではありませんでした。 50代以上は n=440n = 440 と小さいので残差が伸びません。単調性を見たいなら行内シェア(その年代の中で何%がその流入元か)を使うのが正しく、そちらは実際に単調です。

もうひとつ注意しておくと、「単調に減る/増える」というパターンはカイ二乗検定自体はまったく見ていません。 カイ二乗検定は行と列の順序を無視するので、行を入れ替えても同じ値になります。順序に意味があるカテゴリなら、傾向を直接検定する方法のほうが検出力が高くなります(r×2r \times 2 表ならコクラン・アーミテージ傾向検定、この例のような r×cr \times c 表なら後で触れる線形連関モデルによる自由度1の検定)。ただし得をするのは割り当てたスコアの方向に実際の傾向があるときだけで、傾向がU字型なら自由度1に絞ったぶん損をします。


つまずいた3つの疑問

ここまでの説明を読んでいて、自分の中から3つの疑問が出てきました。3つとも「数え上げの標準偏差とは何か」という同じ場所に収束していて、教科書だと式だけ書いてあって理由が書かれていない箇所です。順に潰していきます。

3枚組。左は分散を期待値で割った値が1−pになる直線のグラフで、pが小さければ1に近いことを示す。中央は帰無仮説が真のときのピアソン残差と調整済み残差のヒストグラムを標準正規分布に重ね、ピアソン残差の分散が0.354で幅が足りず、調整済み残差の分散が1.000で標準正規に重なることを示す。右は標準正規分布の両裾を5%と0.3125%で塗り分け、閾値1.96と2.96の位置を示す

疑問1:なぜ期待値で割るのか。標準偏差で割りたくなる

(OE)2E\dfrac{(O-E)^2}{E} という式を見ると、分母が標準偏差ではないので落ち着きません。zz スコアなら標準偏差で割るはずです。

答え:実際に標準偏差で割っています。E\sqrt{E} が標準偏差です。

セルに入る人数を考えます。nn 人それぞれが確率 pp でそのセルに入るので、人数は二項分布に従います。

E[X]=np,V[X]=np(1p)E[X] = np, \qquad V[X] = np(1-p)

pp が小さければ (1p)1(1-p) \approx 1 なので、V[X]np=E[X]V[X] \approx np = E[X]。分散と期待値が一致します。

だから標準偏差は VE\sqrt{V} \approx \sqrt{E} で、OEE\dfrac{O-E}{\sqrt{E}}ズレを標準偏差で割った形そのものです。

「数え上げでは分散が期待値と等しい」は第5回でポアソン分布の性質として出てきました。二項分布で pp が小さいときポアソン分布に近づくので、同じ話です。

実測で確かめます。

nnppE=npE = npV=np(1p)V = np(1-p)VV 実測(40万回)V÷EV \div E
27400.014640.0039.4239.420.9855
27400.035296.4593.0592.960.9638
27400.10274.00246.60246.610.9000
27400.20548.00438.40438.580.8003
27400.501370.00685.00684.670.4998

図の左パネルがこの表を絵にしたもので、比はちょうど 1p1-p の直線になります。

ただし p=0.5p = 0.5 では V/E=0.5V/E = 0.5 で、まったく一致していません。 E\sqrt{E} で割るのは過大な標準偏差で割っていることになり、残差が小さめに出ます。この「1p1-p のずれ」が、次の疑問の答えの一部になります。

疑問2:調整済み残差とは何なのか

ピアソン残差は「寄与のルートを取って符号を付けたもの」で理解できます。では調整済み残差の (1p^i)(1p^j)(1-\hat{p}_{i\cdot})(1-\hat{p}_{\cdot j}) はどこから来たのか。

答え:周辺合計を推定に使ったせいで縮んだ分散を、正しく割り戻したものです。

問題はピアソン残差の分散が1になっていないことです。「標準正規に従うから ±1.96\pm 1.96 で切る」と言いたいのに、実際の分散が1未満なんです。

理由が2段階あります。帰無仮説(独立)が真の4×4表を12万個生成して、(OE)(O-E) の分散を実測しました。

(1段目)pp が0でないぶん縮む。 疑問1で見た (1p)(1-p) です。期待度数を真の値で固定した場合、分散は E(1pij)E(1-p_{ij}) になります。

セル(OE)(O-E) の実測分散EE実測 ÷ EE
20代 × 検索289.34328.470.8809
20代 × SNS93.4696.350.9700
50代以上 × メール39.4140.150.9816

20代×検索なら E(1pij)=289.09E(1-p_{ij}) = 289.09 に対して実測 289.34 で一致します。

(2段目)周辺合計を推定に使ったぶん、さらに縮む。 ここが本題です。

実際にやっているのは「期待度数をその表の周辺合計から作る」ことでした。すでに見たように、期待度数の行合計・列合計は観測値と完全に一致します。ということは (OE)(O-E) は「行ごとに足して0、列ごとに足して0」という制約に縛られている。自由に動けないので散らばりが小さくなります。

セル(OE)(O-E) の実測分散EE実測 ÷ EEE(1pi)(1pj)E(1-p_{i\cdot})(1-p_{\cdot j})実測 ÷ その値
20代 × 検索116.13328.470.3536116.101.0003
20代 × SNS63.5496.350.659463.171.0059
20代 × メール38.9554.740.711538.861.0024
30代 × 検索149.19492.700.3028149.730.9963
40代 × 直接90.75160.580.565290.880.9987
50代以上 × メール30.5440.150.760730.620.9973

E(1pi)(1pj)E(1-p_{i\cdot})(1-p_{\cdot j}) でぴったり一致します。 だからこれで割るのが正しい標準化です。

厳密さについて補足しておくと、この式は行合計を固定した場合には厳密で、総計だけを固定した場合は n1n\frac{n-1}{n}になります(2×22\times2 から 3×33\times3 まで小さい表を完全列挙して確認しました。n=5,10,20,40n=5,10,20,40 で比がちょうど 0.800000,0.900000,0.950000,0.9750000.800000, 0.900000, 0.950000, 0.975000)。今回は n=2740n = 2740 なので (n1)/n=0.999635(n-1)/n = 0.999635 で、シミュレーションでは見えない差です。「漸近的に正しい」が正確な言い方になります。

もう1つ面白い点があります。この分母は期待度数と周辺確率の両方を「その表から推定した値」にして初めて標準正規になります。

分子と分母の作り方残差の分散z>1.96\mid z\mid > 1.96 の割合
真の期待度数と真の周辺確率を使う1.78400.1407
その表から推定した値を使う(正しい方法)1.00190.0502

真の値を使うと分散が1.78まで膨らみ、5%のはずの判定が14%になります。「周辺合計を推定に使ったから縮む」という説明が、この対比でそのまま実証できます。 推定した期待度数を使うと (OE)(O-E) 自体が小さくなり、それに合わせて分母も小さくしているので、両方が釣り合って1になる、という構造です。

標準化した結果を確認します。

ピアソン残差の分散調整済み残差の分散
20代 × 検索0.35361.0003
30代 × 検索0.30401.0004
50代以上 × メール0.76280.9999
16セルの平均0.56251.0000
16セルの最小/最大0.304 / 0.7630.997 / 1.002

図の中央パネルがこれを絵にしたものです。オレンジ(ピアソン残差)は幅が足りず、青(調整済み残差)が黒い標準正規曲線に重なっています。

なぜ自由度の話と似ているのか。 第14回で「パラメータを推定すると自由度が減る」と学びました。あれと同じ現象を、表全体ではなくセル1個ずつで見ているのが調整済み残差です。 推定に使ったぶん動ける範囲が減る、という同じ理屈が、片方では自由度の減少、もう片方では分散の縮小として現れます。

疑問3:補正後の z とは何か

z>2.96|z| > 2.96 という閾値が出てきたとき、「標準正規分布に標準偏差をかけて範囲を広げているのか」と考えました。

答え:違います。分布はまったく動かしていません。標準正規分布のまま、切る位置だけを外側にずらしています。

図の右パネルがそれです。黒い曲線は1本だけ。オレンジの塗りが「両裾に5%」、赤の塗りが「両裾に0.3125%」。同じ分布の、どこで切るかを変えただけで、標準偏差は1のままです。

両側の水準閾値 z\mid z\mid 意味
0.0500001.96001個だけ見るとき
0.0250002.24142個見るとき
0.0062502.73448個見るとき
0.0031252.955216個見るとき(今回)
0.0005003.4808100個見るとき

なぜずらすか。16回検定すると、どれか1つが偶然5%を切る確率が上がります。

やること誤検出する割合(実測200万回)狙い
1個だけ見て z>1.96\mid z\mid > 1.960.05005%(正しい)
16個見てどれかが z>1.96\mid z\mid > 1.960.47415%のつもりが47%
16個見てどれかが z>2.96\mid z\mid > 2.960.04495%以下(補正が効いている)

ここで一度間違えました。 最初に「独立な16個なら 10.9516=0.55991 - 0.95^{16} = 0.5599 だから実測もそうなるはず」と考え、実際に独立な標準正規16個でシミュレーションして 0.5610 という数字を出しました。しかし調整済み残差はセル間で独立ではありません。 周辺合計を共有しているので、あるセルが期待より多ければ同じ行の別のセルは少なくなります。実測した16セルの相関は平均 0.067-0.067、最小 0.55-0.55r>0.3|r| > 0.3 の組が120組中28組ありました。

負の相関があるぶん「どれか1つでも超える」確率は独立の場合より小さくなります(0.4741 < 0.5599)。ボンフェローニ補正は独立性を仮定しない不等式なので、この相関があっても水準を超えない側に働きます(実測 0.0449 で5%以下)。5%を使い切れていないのは、補正が保守的であることの実演です。

やっていることは単純で、0.050.051616 で割って各セルに配分する。全部足して 0.050.05 に収まるので、「どこか1つでも誤検出する確率」が5%以下に抑えられます(ボンフェローニの不等式)。第12回・第20回で多重比較としてやったのと同じ道具です。

今回のデータでは補正しても結論が変わりませんでした(1.961.96 で有意な11セルが 2.962.96 でも全部有意)。効果が大きいデータなので余裕があったためです。

3つの疑問の関係

疑問答え効いている量
なぜ EE で割る標準偏差で割っている(VEV \approx E だから)E\sqrt{E}
調整済み残差とは周辺推定で縮んだ分散を割り戻す(1pi)(1pj)\sqrt{(1-p_{i\cdot})(1-p_{\cdot j})}
補正後の zz とは分布は同じ、切る位置をずらす水準を mm で割る

疑問1と疑問2は「正しい標準偏差は何か」という同じ問いで、答えが2段階になっているだけでした。疑問3だけが別問題(何回見るか)です。


フィッシャーの正確検定

小さい表では、カイ二乗近似が使えません。ここで登場するのがフィッシャーの正確検定です。

CTAデザインを各12人に見せて、A は2人、B は7人がクリックしたとします。期待度数の最小は 4.5 で、よく言われる「5未満」の目安に引っかかります。

3枚組。左は周辺合計を固定したときの左上セルaの値の確率分布を棒グラフで示し、観測値以下の確率を持つ表を赤く塗って両側p値0.0894を作ることを示す。中央はカイ二乗近似0.0350、フィッシャー0.0894、イエーツ0.0917のp値を比較し、カイ二乗近似だけが5%を切ることを示す。右は8つの設定での実際の第一種の誤り率を比較する

周辺合計を両方固定すると、表は数えられる

行合計が (12, 12)、列合計が (9, 15) で固定されているので、左上のセル aa を決めれば残り3つが引き算で決まります(自由度1がここでも効いています)。aa は 0〜9 の10通りしかありません。

aa表の中身確率観測以下か
0[0, 12 / 9, 3]0.000168
1[1, 11 / 8, 4]0.004543
2(観測)[2, 10 / 7, 5]0.039978
3[3, 9 / 6, 6]0.155472
4[4, 8 / 5, 7]0.299838
5[5, 7 / 4, 8]0.299838
6[6, 6 / 3, 9]0.155472
7[7, 5 / 2, 10]0.039978
8[8, 4 / 1, 11]0.004543
9[9, 3 / 0, 12]0.000168
合計1.000000両側 pp = 0.089379

確率がぴったり1になります。全パターンを尽くしたので近似がどこにもありません。これが「正確」の意味です。

この確率分布は超幾何分布です。第5回でやった「壺から玉を取り出す」構造で、「24人のうちクリックした9人を選ぶとき、A群の12人から何人選ばれるか」に対応します。

両側 pp 値は「観測と同じか、より起こりにくい表」の確率を全部足して 0.0893790.089379。片側(aa が2以下)なら 0.0446900.044690 です。

なお両側 pp 値の作り方には流儀があります。上のやり方は点確率法(観測の確率以下の確率を持つ表を全部足す)で、R の fisher.test の既定です。ほかに「片側を2倍する」「中央法」があり、この例は分布が対称なので3つとも一致しますが、非対称な表では値が変わります。

ここで前に保留した「周辺合計を固定する3つの意味」が効いてきます。 フィッシャーの正確検定は両方固定の立場を取ります。総計しか固定していないデータに対しても両方固定して計算するので、条件付きにすると情報を捨てているという批判があります。試験対策としては「両方固定して超幾何分布で数える」で十分です。

3つの方法を比べる

方法X2X^2pp5%で判定
χ²近似(補正なし)4.44440.035015有意
フィッシャーの正確検定0.089379有意でない
イエーツ補正2.84440.091690有意でない

χ²近似だけが5%を切ります。 本当は有意でないものを有意と判定している。n=24n=24 では近似が甘い方向に外れました。

「期待度数5以上」は近似の質を保証していない

第14回で「期待度数5以上という目安は思うより緩い」と学んだので、「5未満ならフィッシャー」という目安と矛盾しないか気になりました。実際の第一種の誤り率を8つの設定で測りました。

各群の nnpp期待度数の最小χ²近似の実サイズイエーツの実サイズ
120.506.00.06410.0228
120.202.40.03910.0120
250.5012.50.06430.0323
250.205.00.05470.0165
250.102.50.04880.0059
500.105.00.05060.0176
1000.055.00.04340.0181
2000.024.00.04470.0172

この表でいちばん面白いのは、期待度数が12.5もあるのにχ²近似の実サイズが 0.0643 になっている行(n=25n=25, p=0.50p=0.50)です。 逆に期待度数が2.4しかない行(n=12n=12, p=0.20p=0.20)は 0.0391 で5%を下回っています。

順番がむしろ逆になっています。「期待度数5以上」は近似の質をまったく保証していません。

効いているのは期待度数ではなく離散性です。第14回で「X2X^2 が26個の値しか取れないので階段が5%をまたげない」という話をしました。p=0.5p = 0.5 付近では X2X^2 の取れる値が粗くなり、階段が5%を上側にまたぎます。pp が小さいと下側にまたぐ。

つまり第14回の結論と今回の目安は矛盾していません。どちらも「5」という粗い代理指標を使っているだけで、本当の問題は X2X^2 が取れる値の粗さです。 「5未満ならフィッシャー」は実務のルールとしては安全側に倒れるので機能しますが、「5以上なら安全」は成り立ちません。

イエーツの連続性補正とは何か

上の表でイエーツ補正が一貫して保守的なことが見えたので、この補正が何をしているのかを確かめました。先に既習の話から入ります。

3枚組。左は二項分布の棒グラフに正規分布曲線を重ね、14で切ると0.0368、13.5で切ると0.0588になり厳密の0.0577に近づくことを示す。中央は観測値2を幅1の区間とみなして期待値4.5からの距離が2.5から2.0に縮むことを数直線で図解する。右は起こりうる4つの表についてカイ二乗近似とフィッシャーとイエーツのp値を対数目盛で比べる

二項分布を正規分布で近似するとき

XX \sim 二項分布(20,0.5)(20, 0.5)P(X14)P(X \geq 14) を求めたいとします。平均 1010、標準偏差 20×0.5×0.5=2.236\sqrt{20 \times 0.5 \times 0.5} = 2.236 で正規近似します。

方法厳密との誤差
厳密(二項分布で直接計算)0.057659
正規近似(1414 で切る)0.0368190.020840
正規近似(13.513.5 で切る)0.0587620.001103

13.513.5 で切ると誤差が約19分の1になります。

図の左パネルがその理由です。二項分布は(整数の値だけ)、正規分布は曲線(連続)。棒には幅があって、X=14X = 14 の棒は「13.513.5 から 14.514.5」の範囲を占めています。だから X14X \geq 14 の面積を曲線で測るなら13.513.5 から積分するべきです。

これが連続性補正です。「離散を連続で近似するとき半個ぶんずらす」という一般的な技法で、第8回の中心極限定理でも出てくる話です。

イエーツ補正は同じことを2×2表でやっている

X2X^2 統計量も同じ問題を抱えています。セルの人数は整数しか取れない(さっきの例では aa が10通り)のに、カイ二乗分布は連続です。

図の中央パネルがイエーツ補正の中身です。観測値 a=2a = 2 を「1.51.5 から 2.52.5 の区間」とみなします。期待値は E=4.5E = 4.5

  • 補正なし:24.5=2.5|2 - 4.5| = 2.5
  • イエーツ:区間のEE に近い側の端 2.52.5 から測って 2.54.5=2.0|2.5 - 4.5| = 2.0

距離がちょうど 0.50.5 短くなります。 これが「OE|O-E| から 0.50.5 を引く」の意味です。

XYates2=(OE0.5)2EX^2_{\text{Yates}} = \sum \frac{(|O-E| - 0.5)^2}{E}

実際の計算を見ます。

クリックしない
観測 O(A行)210
観測 O(B行)75
期待 E(A行)4.57.5
期待 E(B行)4.57.5
OEO - E2.5\mp 2.5±2.5\pm 2.5
OE0.5\mid O-E\mid - 0.52.02.0

4セルすべて OE=2.5|O-E| = 2.5 で同じです(自由度1の市松模様。最初の図で見たものと同じ構造)。全部から 0.50.5 を引くので、統計量は (2.0/2.5)2=0.64(2.0/2.5)^2 = 0.64 倍になります。実測 2.8444÷4.4444=0.64002.8444 \div 4.4444 = 0.6400 で一致します。

OE0.5\mid O-E\mid \geq 0.5 のとき、方向は必ず「小さくする」です。 ズレを小さく見せるので X2X^2 が下がり、pp 値が上がるので保守的になります。

OE\mid O-E\mid 0.50.5 未満だと引き算の中身が負になり、さらに 0.250.25 未満だと補正後の X2X^2 が補正前より大きくなります(差はちょうど 0.25OE0.25 - \mid O-E\mid )。n24n \leq 24 の2×2表(周辺合計が0でないもの)を総当たりすると、前者は4090通り、後者は1878通りありました。実装では 0 で打ち切るのが普通です。)

なぜ2×2表だとうまくいかないのか

二項分布では 0.50.5 が見事に効いたのに、2×2表では行き過ぎます。理由が2つあります。

(1)相手が正規分布ではない。 2×2表で周辺合計を固定したときの厳密な分布は超幾何分布で、正規分布より裾が短い。0.50.5 という値は正規近似に合わせて導かれたもので、超幾何分布には最適化されていません。

(2)階段の幅が一定でない。 X2X^2 の値は a=4,3,2,1,0a = 4, 3, 2, 1, 00.181.604.448.7114.400.18 \to 1.60 \to 4.44 \to 8.71 \to 14.40 となります。つまり階段1段ぶんの増分が 1.422.844.275.691.42 \to 2.84 \to 4.27 \to 5.69 とどんどん広がる。一律に 0.50.5 引くのは、狭いところでは足りず、広いところでは行き過ぎます。

起こりうる表ごとに比べるとこうなります。

aaχ²近似フィッシャー(厳密)イエーツイエーツは厳密より
00.0001480.0003370.000743大きい(保守的)
10.0031630.0094230.011412大きい(保守的)
20.0350150.0893790.091690大きい(保守的)
30.2059030.4003230.399075わずかに小さい

χ²近似はすべての行で厳密より小さい(甘い)。イエーツはそれを直そうとして、a=0,1,2a = 0, 1, 2 では厳密を追い越してしまっています。

結論:使わない

項目内容
何をする操作かOE\mid O-E\mid から 0.50.5 を引く
どこに使うか2×2表(自由度1)のみ
元になった発想離散を連続で近似するときの連続性補正
0.50.5 の由来整数の観測値を「幅1の区間」とみなし、その半分
効果の方向OE0.5\mid O-E\mid \geq 0.5 なら必ず X2X^2 が下がる=保守的になる(0.5未満は0で打ち切る)
現代の評価推奨されない。 小標本ならフィッシャーの正確検定を使う
試験対策定義と「保守的になる」「2×2のみ」を覚える

実サイズの表を見れば分かります。イエーツの実サイズは 0.006〜0.032 で、常に5%を大きく下回っています。 5%使えるところを1〜3%しか使っておらず、そのぶん検出力を捨てています。

イエーツ補正が教科書に載っているのは歴史的な理由(計算機がない時代の工夫)です。 離散性による損失を減らしたいなら mid-p値(境界の確率を半分だけ数える方法)という処方があり、第14回で触れています。


対数線形モデル:分割表を回帰として書き直す

この章の最後の話題です。深追いはしませんが、位置づけを押さえておきます。

セル度数の対数を、足し算に分解するモデルです。

logmij=μ+αi+βj+γij\log m_{ij} = \mu + \alpha_i + \beta_j + \gamma_{ij}

最初のCTA表(A 30/200 vs B 45/200)で実際に分解しました。参照セル方式(行1・列1を基準)で計算します。

計算
切片 μ\mulog30\log 303.401197
行効果 α\alphalog45log30\log 45 - \log 300.405465
列効果 β\betalog170log30\log 170 - \log 301.734601
交互作用 γ\gammalog155log45log170+log30\log 155 - \log 45 - \log 170 + \log 300.497838-0.497838

復元すると元の表に完全に一致します(飽和モデルなので当然)。そして exp(γ)=0.607843\exp(\gamma) = 0.607843、オッズ比の逆数が 1/1.645161=0.6078431/1.645161 = 0.607843

交互作用項はオッズ比の対数そのものでした(符号は基準の取り方によります)。

さらに、γ=0\gamma = 0 と置いたモデルの最尤推定が (行合計×列合計)÷総計(\text{行合計} \times \text{列合計}) \div \text{総計} になります。 つまり、

「行と列が独立」    「交互作用項がゼロ」\text{「行と列が独立」} \iff \text{「交互作用項がゼロ」}

独立性の検定が「交互作用の有無の検定」に読み替わりました。第20回で分散分析の交互作用を扱いましたが、あれと同じ言葉で分割表を扱えるようになるのがこのモデルの値打ちです。

なぜ対数を取るかというと、度数は掛け算の構造(n×pi×pjn \times p_i \times p_j)を持っているので、対数を取ると足し算になるからです。第18回の一般化線形モデルの枠組みで言えば、ポアソン回帰でリンク関数が対数という位置づけになり、実際そうやって推定します。

検定統計量は G²

対数線形モデルでは X2X^2 ではなく G2G^2(尤度比統計量)を使うのが標準です。

G2=2OlogOEG^2 = 2\sum O \log \frac{O}{E}
X2X^2G2G^2最小の期待度数
CTA 2×23.69233.7129+0.0206+0.020637.50
年代×流入元 4×4464.2004448.333415.8670-15.867040.15
小さい表 2×24.44444.6409+0.1965+0.19654.50

期待度数が十分あればほぼ一致します。どちらも同じ自由度のカイ二乗分布に漸近する(第14回のウィルクスの定理)。G2G^2 を使う理由はモデル同士の比較ができることで、入れ子になったモデルの G2G^2 の差がそのまま尤度比検定になります。

3元以上ではモデル選択になる

ここが対数線形モデルの本領です。3元表では「独立」の言い方が何通りもあります。

変数の番号は 1 = 層(記事タイプ)、2 = デザイン、3 = クリック です。

記法意味解釈
(1, 2, 3)3つとも独立すべて無関係
(12, 3)クリックが他の2つと独立デザインを変えても動かない
(12, 13)デザインとクリックが層のもとで独立シンプソンの節で検定したかった仮説
(12, 13, 23)2元交互作用のみ・3元交互作用なし層によらず共通のオッズ比
(123)飽和モデル層ごとにオッズ比が違ってよい

シンプソンの例で確認しました。層ごとのオッズ比は 0.6599(log\log0.4157-0.4157、標準誤差 0.5236)と 0.7778(log\log0.2513-0.2513、標準誤差 0.1636)。差の検定は z=0.2997z = -0.2997p=0.7644p = 0.7644均一性を棄却しません。だから (12, 13, 23) で足ります。

このモデルの共通オッズ比を実際に推定してみると、マンテル・ヘンツェルとは別の推定量ですが、ほぼ同じ値になります。

推定量
マンテル・ヘンツェル0.7642
(12, 13, 23) モデルの最尤推定0.7659
ウルフ(log\log オッズ比の逆分散加重)0.7665

3つとも層別の 0.6599 と 0.7778 の間に入り、全体の表から出した 4.8583 とはまったく別の水準です。

いつ使うのか

独立性の検定で足りる場面では使いません。 使うのは次の3つです。

場面理由
3元以上で「どういう独立か」を選び分けたいカイ二乗検定には5通りを言い分ける言葉がない。変数が4つ5つになると手に負えない
順序や構造を係数に埋め込みたいカイ二乗検定は行と列の順序を無視する。γij=ϕuivj\gamma_{ij} = \phi u_i v_j とすれば自由度9の検定が自由度1になり検出力が上がる(線形連関モデル)
度数そのものを予測したいカイ二乗検定は「独立か否か」のyes/noしか返さない

ただし実務では同じことをロジスティック回帰でやるほうが普通です。 これは偶然ではなく、分割表に対する対数線形モデルと、それをロジスティック回帰で書いたものは数学的に等価です。クリックを0/1の目的変数、年代と流入元を説明変数にしてロジスティック回帰を回せば、対数線形モデルの交互作用項と同じ情報が係数として出てきます。

ただし条件があります。等価になるのは、説明変数どうしの交互作用項をすべて含めたときだけです。説明変数どうしの項(残差分析の例なら 年代×流入元、上の3元表なら 層×デザイン に当たる項)を含む階層モデルが、ロジスティック回帰に対応します。これを入れないモデルは「年代と流入元が独立」という余分な仮定を置いた別のモデルになります。

対数線形モデルロジスティック回帰
見ているものセルの度数特定の変数が起きる確率
変数の役割全部対等目的変数と説明変数を区別
向く場面「どの変数同士に関係があるか」を探索「これを予測したい」が決まっている

「結果変数が1つに決まっているならロジスティック回帰、変数間の関係構造そのものを調べたいなら対数線形モデル」が判断基準です。

準1級では用語と位置づけだけで十分です。計算問題として出るのはまれで、出ても「exp\exp(交互作用) がオッズ比」程度でしょう。


実務:A/Bテストで何を使うか

道具が増えたので、選ぶ順序を整理します。

分割表の道具を選ぶフローチャート。1人が表に何回登場するかでマクネマー検定と独立性の検定に分かれ、期待度数が小さいならフィッシャーの正確検定、そうでなければカイ二乗検定、有意なら残差分析へ進む。左下に交絡因子の確認を促す注意書きがある

最初の分岐が「1人が表に何回登場するか」であることが大事です。ここを間違えると、そもそも別の問いに答えてしまいます。

左下の注意は経路に関係なく常に確認すべきことで、これを外すとシンプソンのパラドックスを踏みます。

3つの指標の使い分けを3枚のカードで示した図。リスク差は意思決定者への報告、リスク比はベースが違う環境への一般化、オッズ比はケースコントロールと回帰係数の解釈に向くことと、それぞれの根拠が並ぶ

このブログのCTA比較なら、手順はこうなります。

(1)訪問者をランダムに2群へ割り付ける。 これが最重要です。手で「この記事はA、あの記事はB」と振ると交絡が入ります。

(2)検定はカイ二乗検定。 第13回の母比率の差の検定と数学的に同じものです。2×2表のカイ二乗検定は、プールした比率を使う zz 検定の z2z^2 と厳密に一致します。「どちらを使うべきか」という問いには「同じなのでどちらでもよい」が答えになります。

(3)報告はリスク差。 「クリック率が7.5ポイント上がった。月1万PVなら750クリック増」と言えるのはリスク差だけです。

(4)有意でも即断しない。 第11回で「月31PVではA/Bテストに5.8年かかる」と計算しました。このブログの規模だとそもそも検出力が足りないことが多い。今回のCTA例(各200人)でも 15.0% 対 22.5% という大きい差が p=0.0547p = 0.0547 で有意になりませんでした。

やってはいけないこと

やりがちなことなぜ問題か
有意になるまで毎日確認する第12回の多重比較。停止規則を決めずに覗くと偽陽性が激増する
記事タイプごとに手でデザインを割り振る交絡。シンプソンのパラドックスを踏む
期待度数が小さいのにカイ二乗検定近似が甘い方向に外れる。フィッシャーを使う
イエーツ補正をかける保守的すぎて検出力を捨てる
オッズ比を「◯倍になった」と報告ベースが高いと確率の変化を過大に見せる
3群以上を2群ずつ比較多重比較。まず r×2r \times 2 表で全体を検定し、残差分析で特定する

最後の項目が今回学んだことの実務での使いどころです。 CTAデザインを3種類試したら、3×23 \times 2 表でカイ二乗検定 → 有意なら調整済み残差でどのデザインが効いているかを特定、という流れになります。


自分が間違えていたこと

今回、書きながら間違いに気づいた点を残しておきます。

1. シンプソンのパラドックスの数値例を作り損ねた。 最初に作ったのは「層1ではBが勝ち、層2ではAが勝つ」という表で、これを「逆転が起きた」と書こうとしました。しかしこれはただのばらつきで、パラドックスではありません。条件は「すべての層でAが勝ち、なおかつ合計するとBが勝つ」で、層ごとに勝敗が割れている表を作っても意味がない。「逆転」という言葉に引きずられて、何と何が逆転するのかを確定しないまま数値を作っていました。

2. 大きな X2X^2pp 値を数値積分で出して桁を間違えた。 X2=464.20X^2 = 464.20、自由度9の上側確率を数値積分で求めたら 1.1×10161.1 \times 10^{-16} と出ました。これは浮動小数点の精度限界にぶつかった嘘の値で、正しくは 2.64×10942.64 \times 10^{-94} です。「1から累積確率を引く」形で計算すると、累積確率が1に近すぎて差が取れません。連分数(Lentz法)で対数スケールのまま計算し直して修正しました。極端に小さい確率を扱うときは、引き算を経由しない計算式を選ぶ必要があります。

3. オッズ比の不変性を、層を潰す操作にも成り立つと錯覚しかけた。 ケース・コントロールでオッズ比が不変だと確認した直後にシンプソンのパラドックスを扱ったので、「オッズ比なら層別と全体で一致するのでは」と考えました。まったく別の操作です。 不変なのは「列ごとに定数を掛ける」操作に対してで、層を足し合わせる操作では方向すら逆転します(0.6599 と 0.7778 に対して全体は 4.8583)。

4. 「期待度数5以上」の意味を取り違えていた。 「5以上なら近似は安全、5未満なら危険」という理解でしたが、実測すると期待度数12.5でカイ二乗近似の実サイズが 0.0643、期待度数2.4で 0.0391 でした。順序が逆です。効いているのは期待度数の大きさではなく X2X^2 が取れる値の粗さ(離散性)で、pp が 0.5 付近だと期待度数が大きくても近似が甘くなります。

5. イエーツ補正を式だけ覚えていて、0.50.5 の由来を説明できなかった。OE\mid O-E\mid から 0.50.5 を引く」は書けるのに、なぜ 0.50.5 なのかを聞かれて答えられませんでした。二項分布の連続性補正と同じ発想(整数の観測値を幅1の区間とみなす)だと分かれば、あとは覚える必要がありません。式を覚えていることと理解していることの差が、いちばんはっきり出た箇所でした。

6. 多重比較のシミュレーションで、分割表ではなく独立な正規乱数を回していた。 「16セルのどれかが z>1.96\mid z\mid > 1.96 になる確率」を測るつもりで、実際には独立な標準正規16個を生成していました。出た値 0.5610 が理論値 10.9516=0.55991-0.95^{16} = 0.5599 とよく一致したので、「理論値との照合も合います」と書いて満足してしまった。独立を仮定した理論値と一致したことが、独立を仮定した乱数を回した証拠だったのに、それを検証の成功と読み違えていました。 実際の分割表で回すと 0.4741 で、調整済み残差はセル間で負に相関しています(平均 0.067-0.067、最小 0.55-0.55)。理論値と一致したときこそ、何を仮定した理論値なのかを確認する必要があります。

7. 単調性の根拠に、単調でない数列を並べていた。 「SNSは年代とともに単調に減る」の根拠として調整済み残差 +14.30+0.617.847.18+14.30 \to +0.61 \to -7.84 \to -7.18 を挙げていましたが、最後で増えています。残差は行の nn にも依存するので、単調性を測る量ではありませんでした。 主張自体は正しく(行内シェアは単調)、引いてきた数字が違っていた。自分が載せた数列を読み直せば気づけた誤りです。

8. オッズ比が「均等割り付けなら層別値と一致する」と思っていた。 交絡の2条件を整理したとき、「片方だけならズレない」と書きました。率とリスク差については正しいのですが、オッズ比は50:50で完全に均等割り付けしても層別値と一致しません(非崩壊性)。共通オッズ比 2.000 でも、層のベースが 2%2\%60%60\% なら合計表は 1.451 まで縮みます。向きは変わらないので交絡とは別問題ですが、「層別と全体でオッズ比が違う=交絡」とは言えません。

9. X2X^2 の「増分」として X2X^2 の値そのものを並べていた。aa が1増えるごとの増分は 0.181.604.448.7114.400.18 \to 1.60 \to 4.44 \to 8.71 \to 14.40」と書きましたが、これは a=4,3,2,1,0a = 4, 3, 2, 1, 0 における X2X^2です。増分は 1.422.844.275.691.42 \to 2.84 \to 4.27 \to 5.69。結論(幅が広がる)は正しいのに、量を取り違えていました。

10. 目安の条件と根拠が噛み合っていなかった。p0p_0p1p_1 がどちらも0.10以下なら差は6%以内」と書こうとして、根拠にした表の行は p1=0.15p_1 = 0.15 でした。条件を満たしていない行から目安を作っていたことになります。正しくは上限は p1p_1 だけで決まり、p10.10p_1 \leq 0.10 なら11.1%以内です。

要点まとめ

項目要点
適合度検定との違い統計量の式は同じ。 違いは期待度数を「仮説が与える」か「周辺合計から作る」かだけ
期待度数(行合計×列合計)÷総計(\text{行合計} \times \text{列合計}) \div \text{総計}。行合計・列合計は観測値と完全に一致するので、ズレていいのは表の内側だけ
自由度(r1)(c1)(r-1)(c-1)1-1 は「最後の行と列は引き算で出るから数えない」の意味。3×4表なら6セルだけ自由
2×2表のズレ4セルすべて OE\mid O-E\mid が同じ値になる(市松模様)。自由度1が目に見える形
リスク差p1p0p_1 - p_0単独で意味が確定する唯一の指標。 件数に直せるので報告に向く
リスク比p1/p0p_1 / p_0。ベースを添えないと大きさが分からない
オッズ比オッズの比。ad/bcad/bc で行と列の入れ替えに対して対称
オッズ比とリスク比の関係OR=RR×1p01p1\text{OR} = \text{RR} \times \dfrac{1-p_0}{1-p_1}ずれの上限は大きいほうの確率 p1p_1 だけで決まり 1/(1p1)1/(1-p_1)p10.10p_1 \leq 0.10 で11.1%以内)。リスク比1.5なら p00.10p_0 \leq 0.10 で5.88%以内、p0=0.20p_0 = 0.20 で14.3%
指標で結論が逆転する15.0%→22.5% と 60.0%→75.0% で、リスク比は前者が大(1.50>1.25)、オッズ比は後者が大(2.00>1.65)
ケース・コントロール結果で群を分けるので確率が計算できない。 オッズ比だけが抽出率 f1,f0f_1, f_0 の約分で不変(4通りの抽出すべてで 2.0638297872)
なぜオッズ比だけ不変か掛け算と割り算だけなので定数倍が消える。リスク比は分母が cf1+df0cf_1 + df_0 という足し算なので消えない
シンプソンのパラドックス層別で全部Aが勝ち、合計でBが+17ポイント勝つ。正体は加重平均で、重みがAとBで正反対
有意性は交絡を直さない逆向きの結論が X2=237X^2 = 237p1053p \approx 10^{-53} で出る。nn を増やすと間違いに自信がつくだけ
交絡の2条件①群の割り付けと関係する ②結果とも関係する。両方揃わないと結論は逆転しない。ランダム化で①を切る
オッズ比の非崩壊性均等割り付けでもオッズ比は層別値と一致しない(共通2.000 → 合計1.451)。率とリスク差は加重平均で保たれるのに、オッズ比は保たれない。向きは変わらないので交絡とは別問題
層別すべきかは因果の問題割り付け前から存在する性質なら層別する。割り付け後に起きたことで層別すると経路を潰す
直し方標準化(重みを揃える)→ 16.50% vs 13.50% でAの勝ちに戻る/マンテル・ヘンツェル法 bc/n÷ad/n=0.7642\sum bc/n \div \sum ad/n = 0.7642
マクネマー検定対応のある2×2表。X2=(bc)2/(b+c)X^2 = (b-c)^2/(b+c)一致ペア a,da, d は完全に無情報
見分け方1人が表に何回登場するかを数える。 2回登場(測定回数が表の合計の2倍)→マクネマー、1回(測定回数=合計)→ふつうの分割表
マクネマーの中身不一致ペアに対する符号検定。「30人が割れて25人が新に有利」をコイン投げと比べる
一致ペアは効かない実測aa を20→40に変えても X2X^2 は 13.3333 のまま
独立性の検定を誤用するとpp 値は小さくなるが(0.000049)別の問いに答えている(個人の一貫性を測っている)
対応のあるt検定との関係発想は同じ(個人差を消す)。違いは差が3値しかなく、0の人が捨てられること
セルの寄与(OE)2/E(O-E)^2/E。合計が X2X^2 になるが、2乗なので多い/少ないが消える
ピアソン残差(OE)/E(O-E)/\sqrt{E}。符号は残るが分散が1に届かない(16セル平均 0.5625・範囲 0.304〜0.763)
調整済み残差(OE)/E(1pi)(1pj)(O-E)/\sqrt{E(1-p_i)(1-p_j)}分散が 1.0000 で標準正規に一致。これを ±\pm で判定に使う
なぜ E で割るのか数え上げでは V=np(1p)V=np(1-p)E=npE=np なので V/E=1pV/E = 1-p pp が小さければ E\sqrt{E} が標準偏差
なぜさらに補正が必要か周辺合計を推定に使うと分散が E(1pi)(1pj)E(1-p_i)(1-p_j) まで縮む(実測で1.00に一致)。行合計固定なら厳密・総計だけ固定なら (n1)/n(n-1)/n。第14回の「推定すると自由度が減る」をセル単位で見たもの
補正の倍率1/(1pi)(1pj)1/\sqrt{(1-p_i)(1-p_j)}周辺確率が大きい行・列ほど強く効く(検索列1.814、メール列1.145)。第17回のてこ比と同じ発想
ボンフェローニ補正分布は動かさず切る位置をずらす。 16セルなら 0.05/160.05/16z>2.9552\mid z\mid >2.9552。補正なしだと誤検出率が0.4741(独立な16個なら0.5599。調整済み残差は負に相関するので独立より低い)。補正後は0.0449
フィッシャーの正確検定周辺合計を両方固定して超幾何分布で全列挙。24人の例では10通りしかなく確率の合計が1.000000
「正確」の意味「よく見つける」ではなく「5%を超えないことが保証される」。検出力は近似より低い(第14回で約10ポイント)
期待度数5以上の目安近似の質を保証しない。 期待度数12.5で実サイズ0.0643、期待度数2.4で0.0391。効いているのは離散性
イエーツ補正OE\mid O-E\mid から 0.50.5 を引く。0.50.5 は「整数を幅1の区間とみなした半分」。二項分布の連続性補正と同じ発想
イエーツの評価推奨されない。 実サイズ 0.006〜0.032 で5%を使い切れず、厳密値を追い越すこともある(a=2a=2 で 0.0917 > 0.0894)
なぜ2×2で 0.50.5 が効かないか①相手が超幾何分布(裾が短い)②X2X^2 の階段の幅が一定でない(1段ぶんの増分が 1.425.691.42 \to 5.69 と広がる)
対数線形モデルセル度数の対数を行効果・列効果・交互作用の和に分解。交互作用ゼロ=独立
交互作用項の正体exp(γ)\exp(\gamma) がオッズ比(0.607843 = 1/1.645161)。γ=0\gamma=0 の最尤推定が (行合計×列合計)÷総計(\text{行合計} \times \text{列合計}) \div \text{総計}
G2G^2X2X^2G2=2Olog(O/E)G^2 = 2\sum O\log(O/E)。期待度数が十分ならほぼ一致。モデル比較ができるので対数線形では G2G^2
いつ対数線形モデルを使うか3元以上でモデル選択したいとき/順序を係数に埋めたいとき(線形連関モデル)/度数を予測したいとき
ロジスティック回帰との関係数学的に等価(ただし説明変数どうしの交互作用項をすべて含めたときに限る)。結果変数が1つに決まっているならロジスティック回帰を使う
A/Bテストでの手順ランダム割り付け → カイ二乗検定(=比率の差の検定と同一)→ リスク差で報告 → 検出力を疑う
3群以上の比較2群ずつ比較しない。r×2r \times 2 表で全体を検定 → 調整済み残差で特定

次回

次回は第29章の欠測データの処理です。今回は「表に入っている人数」を数えてきましたが、次回扱うのはそもそも記録が欠けている場合の話になります。

今回の交絡の議論と似た構造が形を変えて出てきます。欠測のメカニズムは MCAR・MAR・MNAR の3つに分類されますが、これは要するに「何が欠測の有無を決めているか」の分類です。今回「群の割り付けと結果の両方に矢印が刺さっている変数が交絡因子」と整理しましたが、欠測でも「欠けたかどうか」と「知りたい値」の関係で話が決まります。

そして重みがずれると平均が動くという今回の構造も効いてきます。シンプソンのパラドックスでは層の構成比がAとBで正反対だったせいで結論が逆転しました。欠測では「答えてくれた人」の構成比が母集団と違うことが同じ問題を起こします。第21回の無回答バイアスがここに合流します。

推定にはEMアルゴリズムが出てきます。第27回の因子分析で「渡すべき行列そのものが未知だから反復する」という構造がありましたが、あれと同じ形の反復です。

この連載の全体像とこれまでの回は統計検定準1級・独学連載のまとめにあります。