見出し画像

オッズ比と信頼区間からp値を出す。

論文投稿準備していたら、投稿規定に「p値を書け絶対だ」(意訳)というp値縛りがありました。

書けと言われたのだから、p値を計算して書けば良いのですが、投稿準備中の論文は「データ提供元の規約によって生データを削除済み」ということで、今からp値を計算できないという状況です。

ただし、既に作っている表には、オッズ比とその95%信頼区間のみがかかれています。

そこで、オッズ比と95%信頼区間からp値を算出することにしました。

使用する例

下記がStataコードと出力です。lbwデータセットを用いて、「妊娠中の喫煙」を曝露として、「出産児の低体重」をアウトカムとしたロジスティック回帰分析を行いました。


> webuse lbw
(Hosmer & Lemeshow data)

> logistic low i.smoke

Logistic regression                                     Number of obs =    189
                                                        LR chi2(1)    =   4.87
                                                        Prob > chi2   = 0.0274
Log likelihood = -114.9023                              Pseudo R2     = 0.0207

------------------------------------------------------------------------------
         low | Odds ratio   Std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
       smoke |
     Smoker  |   2.021944   .6462989     2.20   0.028      1.08066    3.783112
       _cons |   .3372093   .0724103    -5.06   0.000     .2213694    .5136667
------------------------------------------------------------------------------
Note: _cons estimates baseline odds.

Odds Ratio=2.021944(95%CI: 1.08066, 3.783112)となっています。

表示されているp値は0.028ですが、より正確な値はp=0.0276197です。この値は、matlist r(table) を実行すれば確認できます。

計算方法

手順1.オッズ比を回帰係数にする

オッズ比と信頼区間の値を回帰係数の値に戻します。これは、logを取るだけです。

> di ln(2.021944)
.70405942

> di ln(1.08066)
.07757197

> di ln(3.783112)
1.330547

回帰係数=0.70405942 (95%CI: 0.7757197, 1.330547)と計算されました。

手順2.標準偏差を計算する

信頼区間の上限値(または下限値)と点推定値の差は、標準誤差のおよそ1.96倍(下記では、invnormal(0.975)で算出)になっているはずです。これを元に標準誤差を算出可能です。

> di invnormal(0.975)
1.959964

> di abs(1.330547-0.70405942)/invnormal(0.975)
.31964239

これで、標準誤差=0.31964239と算出が出来ました。

手順3.Z値を計算する

Z値は、回帰係数/標準誤差で計算できます。

> di 0.704059/0.31964239
2.2026459

シンプルに計算ですが、z=2.2026459となりました。
このz値は、logitコマンドで算出された値と一致しています(当たり前ですが)。

手順4.z値からp値を計算する

あとは、z値をp値に変換します。

> di (1-normal(2.2026459))*2
0.02761972

p=0.02761972と算出されました。これは、元々のp=0.0276197と一致しています。無事に推定できたようです。

adoファイルにまとめました。

この手順を踏めば、関数電卓を用いて算出することが可能ですが、手間がかかるので、Stata用のadoファイルを作りました。

エラー処理とかユーザビリティとか無視しているので、やや使い辛いですが、そのうち(今世紀中)には修正したいと思います。

odds_to_pvalというコマンドです。
引数を3つ必要で、点推定値・95%信頼区間下限・95%信頼区間上限です。

> odds_to_pval 2.021944 1.08066 3.783112
p-value = .0276196026000386

adoファイルをダウンロードして、sysdirコマンドで表示されるフォルダのどこか(仮置きならPERSONALがお勧め)に入れるとStata実行時に使える様になります。

. sysdir
   STATA:  C:\Program Files\Stata17\
    BASE:  C:\Program Files\Stata17\ado\base\
    SITE:  C:\Program Files\Stata17\ado\site\
    PLUS:  C:\Users\username\ado\plus\
PERSONAL:  C:\Users\username\ado\personal\
OLDPLACE:  c:\ado\


いいなと思ったら応援しよう!