拓端tecdat|Stata估算觀測資料的風險比

拓端tecdat發表於2020-03-22

原文連結:http://tecdat.cn/?p=6419

在分析二元結果時,邏輯迴歸是分析師對迴歸建模的預設方法。隨機研究中,當然很容易估計比較兩個治療組的風險比。對於觀察資料,治療不是隨機分配的,估計治療效果的風險比有點棘手。

理想情況 - 隨機治療分配
理想情況下,我們首先模擬(在Stata中)一個大型資料集,該資料集可能在隨機試驗中出現:

gen x = rnormal()
gen z =(runiform()<0.5)
gen xb = x + z
gen pr = exp(xb)/(1 + exp(xb))
gen y =(runiform()<pr)

此程式碼為10,000個人生成資料集。每個都有一個基線變數x的值,它是從標準N(0,1)分佈模擬的。接下來,根據隨機研究,我們模擬一個二進位制變數z,機率0.5為1,機率0.5為0.然後生成二元結果y,我們從邏輯迴歸模型生成它,對數機率為1等於x + z。因此,對於x,調整z = 1與z = 0的真實優勢比是exp(1)= 2.72。

由於處理是隨機分配的,我們可以忽略x並使用帶有日誌連結的GLM命令估計比較z = 1到z = 0的風險比:

Generalized linear models                          No. of obs      =     10000
Optimization     : ML                              Residual df     =      9998
                                                   Scale parameter =         1
Deviance         =  12960.39176                    (1/df) Deviance =  1.296298
Pearson          =        10000                    (1/df) Pearson  =    1.0002

Variance function: V(u) = u*(1-u)                  [Bernoulli]
Link function    : g(u) = ln(u)                    [Log]

                                                   AIC             =  1.296439
Log likelihood   = -6480.195879                    BIC             = -79124.59

------------------------------------------------------------------------------
             |                 OIM
           y | Risk Ratio   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
           z |   1.429341   .0241683    21.13   0.000     1.382748    1.477503
       _cons |    .495886   .0070829   -49.11   0.000     .4821963    .5099643
------------------------------------------------------------------------------

風險比估計為1.43,因為資料集很大,95%置信區間非常窄。

估算觀測資料的風險比

現在讓我們考慮觀測資料的情況。為此,我們模擬了一個新的資料集 :

gen x=rnormal()
gen tr_xb=x
gen tr_pr=exp(tr_xb)/(1+exp(tr_xb))
gen z=(runiform() < tr_pr)
gen xb=x+z
gen pr=exp(xb)/(1+exp(xb))
gen y=(runiform() < pr)

如果我們為y執行相同的GLM模型,忽略x,我們得到:

. glm y z, family(binomial) link(log) eform

Generalized linear models                          No. of obs      =     10000
Optimization     : ML                              Residual df     =      9998
                                                   Scale parameter =         1
Deviance         =  12014.93919                    (1/df) Deviance =  1.201734
Pearson          =        10000                    (1/df) Pearson  =    1.0002

Variance function: V(u) = u*(1-u)                  [Bernoulli]
Link function    : g(u) = ln(u)                    [Log]

                                                   AIC             =  1.201894
Log likelihood   = -6007.469594                    BIC             = -80070.04

------------------------------------------------------------------------------
             |                 OIM
           y | Risk Ratio   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
           z |   1.904111   .0353876    34.65   0.000        1.836    1.974748
       _cons |   .4101531   .0069811   -52.36   0.000      .396696    .4240667
------------------------------------------------------------------------------

使用對數廣義線性模型

最明顯的方法是在我們的GLM命令中新增x:

. glm y z x, family(binomial) link(log) eform

Iteration 0:   log likelihood = -9271.4631  
Iteration 1:   log likelihood = -5833.7585  
Iteration 2:   log likelihood = -5733.9167  (not concave)
Iteration 3:   log likelihood = -5733.9167  (not concave)
...

然而,這無法收斂  。

透過邏輯模型估計風險比率

一個相對簡單的替代方案是使用邏輯模型來估計調整x的治療風險比。

Logistic regression                               Number of obs   =      10000
                                                  LR chi2(2)      =    2797.60
                                                  Prob > chi2     =     0.0000
Log likelihood = -5343.6848                       Pseudo R2       =     0.2075

------------------------------------------------------------------------------
           y | Odds Ratio   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
           z |   2.947912   .1442639    22.09   0.000     2.678297    3.244668
           x |   2.693029   .0811728    32.87   0.000     2.538542    2.856918
       _cons |   .9910342   .0322706    -0.28   0.782      .929761    1.056345
------------------------------------------------------------------------------

然而,我們可以使用該模型來計算每個人的預測機率,首先假設所有個體都未被治療(z = 0),然後假設所有個體都被治療(z = 1):

replace z=0
predict pr_z0, pr
replace z=1
predict pr_z1, pr

此程式碼首先生成一個新變數zcopy,它保留原始治療分配變數的副本。然後我們將所有個體z設定為0,並詢問y = 1的預測機率。然後我們將所有個體設定為z = 1,並再次計算P(y = 1)。現在估計z = 1與z = 0相比的風險比,我們簡單地考慮這兩個條件下的邊際風險比,即P(y = 1 | z = 1)/ P(y = 1) | Z = 0):

summ pr_z0 pr_z1

    Variable |       Obs        Mean    Std. Dev.       Min        Max
-------------+--------------------------------------------------------
       pr_z0 |     10000    .4970649    .2060767   .0166056   .9765812
       pr_z1 |     10000    .7094445    .1765126   .0474181   .9919309

di .7094445/.4970649
1.4272673
replace z=zcopy

 給出了我們估計的風險比,比較z = 1到z = 0,為1.43,與我們第一次模擬資料時估計的風險比相同,其中治療分配是完全隨機的(特別是獨立於x)。

置信區間

我們已經找到了風險比的點估計,但我們當然也喜歡置信區間,以指示估計的精確度。

首先,當z設定為0然後設定為1時,我們使用teffects給出我們對二元結果的邊際均值的估計(相當於y = 1的機率):

 
Iteration 0:   EE criterion =  1.898e-21  
Iteration 1:   EE criterion =  5.519e-34  

Treatment-effects estimation                    Number of obs      =     10000
Estimator      : regression adjustment
Outcome model  : logit
Treatment model: none
------------------------------------------------------------------------------
             |               Robust
           y |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
POmeans      |
           z |
          0  |   .4957607   .0072813    68.09   0.000     .4814897    .5100318
          1  |   .7078432   .0071566    98.91   0.000     .6938164    .7218699
------------------------------------------------------------------------------

為了計算風險比和置信區間,我們首先使用teffects ra,coeflegend來查詢Stata儲存估算值的名稱:

Treatment-effects estimation                    Number of obs      =     10000
Estimator      : regression adjustment
Outcome model  : logit
Treatment model: none
------------------------------------------------------------------------------
           y |      Coef.  Legend
-------------+----------------------------------------------------------------
POmeans      |
           z |
          0  |   .4957607  _b[POmeans:0bn.z]
          1  |   .7078432  _b[POmeans:1.z]
------------------------------------------------------------------------------

我們現在可以使用nlcom計算風險比及其置信區間。但是,由於這將為我們提供基於Wald的對稱置信區間,因此最好找到對數風險比的這個區間,然後將得到的區間反向轉換為風險比例:

 

       _nl_1:  log(_b[POmeans:1.z] / _b[POmeans:0bn.z])

------------------------------------------------------------------------------
           y |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
       _nl_1 |   .3561291   .0172327    20.67   0.000     .3223536    .3899047
------------------------------------------------------------------------------

. di exp(.3561291)
1.4277919

. di exp(.3223536)
1.3803728

. di exp(.3899047)
1.47684

因此,我們估計風險比為1.43,95%置信區間為1.38至1.48。

非常感謝您閱讀本文,有任何問題請在下方留言!

相關文章