井出草平の研究ノート

オッズ比のバリエーション

オッズ比にいくつかの計算方法があるということには少し前から気になっていた。といっても僕の勉強する範囲の研究では古典的なオッズ比以外みたことがなく、何のことかよくわからなかった。

Rのepitoolsパッケージでは4種類のオッズ比が出力できる。何が出力されているのか調べてみた。結果から言えば、僕の知らないオッズ比はBiostatistics / Biometricsなどでの発展によって加わったバリエーションのようだ。

研究分野が遠いので、個人的には古典的なオッズ比しか使わないと思う。しかし、Rのepitoolsパッケージの出力するオッズ比は古典的なオッズ比ではないので、統計パッケージを使用する際には注意が必要である。

シミュレーション

先の結論の述べるためにシミュレーションから始めよう。データCPS1985を使用する。

library(AER)
data(CPS1985)
ct1<-table(CPS1985$gender,CPS1985$married)
library(epitools)

epitoolsパッケージのオッズ比を出力する。

oddsratio(ct1)

結果は以下。

$data

          no yes Total
  male   101 188   289
  female  83 162   245
  Total  184 350   534

$measure
        odds ratio with 95% C.I.
         estimate     lower    upper
  male    1.00000        NA       NA
  female  1.04829 0.7324027 1.502553

$p.value
        two-sided
         midp.exact fisher.exact chi.square
  male           NA           NA         NA
  female  0.7967612    0.8550534  0.7953289

いわゆる古典的なオッズ比は手計算では次のように算出する。

(101*162)/(83*188)
[1] 1.048577

epitoolsパッケージのオッズ比のデフォルトでは1.04829だが、手計算では1.048577。値が違うのである。

epitoolsパッケージのoddsratio関数では4つの関数が用意されている。それぞれの値を計算してみた。

MUE: 中央値不偏推定

oddsratio.midp(ct1)$measure

OR = 1.04829

CMLE: 条件付き最尤推定

oddsratio.fisher(ct1)$measure

OR = 1.048508

UMLE: 無条件最尤推定

oddsratio.wald(ct1)$measure

OR = 1.048577

SSAE: 少サンプル調整推定

oddsratio.small(ct1)$measure

OR = 1.030612

古典的なオッズ比は3つ目の無条件最尤推定と同じの値である。oddsratioのデフォルトは中央値不偏推定のようだ。古典的なオッズ比を使用する際にはoddsratio.wald関数を使わないといけない。ここは割と重要なところだと思う。

glm関数でのオッズ比

glm関数でのオッズ比も計算しておこう。

res <- glm(formula=married ~ gender, data=CPS1985, family=binomial)
exp(coef(res))

結果は以下。

(Intercept) genderfemale
   1.861386     1.048577

glmで計算すると無条件最尤推定と同じ値となっている。実用性だけ考えると、オッズ比をRで出すときにはoddsratio.wald関数を使うという点に注意すれば大丈夫そうである。

ちなみに、基礎分析で2変数間のオッズ比と、一般化線形モデルで主力されるオッズ比を比較するのは両方とも最尤推定法を用いて計算していればOKということになる。つまり、基礎分析でオッズ比を出して、その後に多変量解析をしてオッズ比を見る場合、直接比べてよいということだ。

理論的な説明

後回しにしていた理論的説明を少し書いておこう。下記の本に簡単だが説明があった。

Biostatistics for Epidemiology and Public Health Using R

Biostatistics for Epidemiology and Public Health Using R

Chanの本の54頁からのところだが、表2.4はオッズ比に限らず、リスク比などでも推定法が異なることが示されている。

f:id:iDES:20191015164543p:plain

  • CMLE: 条件付き最尤推定 conditional maximum likelihood estimation
  • MUE: 中央値不偏推定 median-unbiased estimation
  • UMLE: 無条件最尤推定 unconditional maximum likelihood estimation
  • SSAE: 少サンプル調整推定 small sample adjustment estimation

One-sampleとかは何かというと、以下の分類らしい。

  • One-sample measurements: 率、リスク、有病率
  • Two-sample measurements: レート比、リスク比、オッズ比

要するに一次のデータか二次のデータかということのようだ。

オッズ比は大きいサンプルでは無条件最尤推定、小さいサンプルでは残り3つの方法が妥当だとされている。

少数サンプルでは分母が0になるときがある。つまりゼロセルがあるということだが、0による除算は不可能であるためJewell's small-sample adjustmentまたは同様の数学的処理を使用するとよい(Rothman, 1976)。

academic.oup.com

f:id:iDES:20191015164625p:plain f:id:iDES:20191015164635p:plain

UMLE 無条件最尤推定

いわゆるオッズ比。 (129) / (72) = 7.714286

CMLE: 条件付き最尤推定

フィッシャーの正確確率検定を元に条件がつけられている。

f:id:iDES:20191015164646p:plain

SSAE: 少サンプル調整推定

観察数または期待数のいずれかが5未満の場合は、少数標本による推定法(Rothman 1976)を用いる。また、Jewell's small-sample adjustmentを使用するようだ。

Nicholas P. Jewell, 1986, On the Bias of Commonly Used Measures of Association for 2 x 2 Tables - JSTOR

f:id:iDES:20191015164714p:plain

それほど複雑な式ではなく、このアプローチであれば確かに分母にゼロが来てもよさそうだ。ただ、オッズ比の値が小さくはならないかとも思う。

Nicholas P. Jewellが2003年に書いた本では別の方法も提案もされている。

Statistics for Epidemiology (Chapman & Hall/CRC Texts in Statistical Science Book 58) (English Edition)

Statistics for Epidemiology (Chapman & Hall/CRC Texts in Statistical Science Book 58) (English Edition)

f:id:iDES:20191015164658p:plain

分子にゼロが来ても対応できそうだし、こちらだと値も多少マシになりそうな気がする。