解释具有多个预测变量的逻辑回归模型

机器算法验证 r 回归 物流
2022-03-10 01:32:43

我进行了多元逻辑回归,因变量Y是在某个进入疗养院的死亡,并得到了以下结果(注意,如果变量开始于A它是一个连续值,而那些开始于B分类):

Call:
glm(Y ~ A1 + B2 + B3 + B4 + B5 + A6 + A7 + A8 + A9, data=mydata, family=binomial)
Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.0728  -0.2167  -0.1588  -0.1193   3.7788  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept)  20.048631  6.036637   3.321 0.000896 ***
A1           0.051167   0.016942   3.020 0.002527 ** 
B2          -0.664940   0.304299  -2.185 0.028878 *  
B3          -2.825281   0.633072  -4.463 8.09e-06 ***
B4          -2.547931   0.957784  -2.660 0.007809 ** 
B5          -2.862460   1.385118  -2.067 0.038774 *  
A6          -0.129808   0.041286  -3.144 0.001666 ** 
A7           0.020016   0.009456   2.117 0.034276 *  
A8          -0.707924   0.253396  -2.794 0.005210 ** 
A9           0.003453   0.001549   2.229 0.025837 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 485.10  on 2206  degrees of freedom
Residual deviance: 417.28  on 2197  degrees of freedom
AIC: 437.28

Number of Fisher Scoring iterations: 7

 (Intercept)           A1           B2           B3           B4           B5           A6           A7           A8           A9 
5.093426e+08 1.052499e+00 5.143045e-01 5.929197e-02 7.824340e-02 5.712806e-02 8.782641e-01 1.020218e+00 4.926657e-01 1.003459e+00 

                   2.5 %       97.5 %
(Intercept) 3.703525e+03 7.004944e+13
A1          1.018123e+00 1.088035e+00
B2          2.832698e-01 9.337710e-01
B3          1.714448e-02 2.050537e-01
B4          1.197238e-02 5.113460e-01
B5          3.782990e-03 8.627079e-01
A6          8.099945e-01 9.522876e-01
A7          1.001484e+00 1.039302e+00
A8          2.998207e-01 8.095488e-01
A9          1.000416e+00 1.006510e+00

如您所见,所有变量都是“显着”的,因为它们的 p 值低于通常的阈值 0.05。但是看看系数,我不太确定这些结果是什么。尽管这些变量对模型有贡献,但从优势比来看,它们似乎并没有太大的预测能力。值得注意的是,当我计算 AUC 时,我得到了大约 0.8。

我可以说这个模型在预测死亡率方面比预测死亡率更好吗(例如,预测老年人将活过规定的时期)?

2个回答

我建议您使用 Frank Harrell 出色的rms 软件包它包含许多有用的功能来验证和校准您的模型。据我所知,您不能仅根据系数来评估预测性能。此外,我建议您使用引导程序来验证模型。AUC 或一致性指数 (c-index) 是预测性能的有用度量。一个 c 指数0.8相当高,但与许多预测模型一样,您的模型的拟合可能过于乐观(过度拟合)。这种过度乐观可以使用 bootstrap 进行评估。但让我举个例子:

#-----------------------------------------------------------------------------
# Load packages
#-----------------------------------------------------------------------------

library(rms)

#-----------------------------------------------------------------------------
# Load data
#-----------------------------------------------------------------------------

mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")

mydata$rank <- factor(mydata$rank)

#-----------------------------------------------------------------------------
# Fit logistic regression model
#-----------------------------------------------------------------------------

mylogit <- lrm(admit ~ gre + gpa + rank, x=TRUE, y=TRUE, data = mydata)
mylogit

                      Model Likelihood     Discrimination    Rank Discrim.    
                         Ratio Test            Indexes          Indexes       
Obs           400    LR chi2      41.46    R2       0.138    C       0.693    
 0            273    d.f.             5    g        0.838    Dxy     0.386    
 1            127    Pr(> chi2) <0.0001    gr       2.311    gamma   0.387    
max |deriv| 2e-06                          gp       0.167    tau-a   0.168    
                                           Brier    0.195                     

          Coef    S.E.   Wald Z Pr(>|Z|)
Intercept -3.9900 1.1400 -3.50  0.0005  
gre        0.0023 0.0011  2.07  0.0385  
gpa        0.8040 0.3318  2.42  0.0154  
rank=2    -0.6754 0.3165 -2.13  0.0328  
rank=3    -1.3402 0.3453 -3.88  0.0001  
rank=4    -1.5515 0.4178 -3.71  0.0002 

在底部,您会看到通常的回归系数与相应的p-价值观。在右上角,您会看到几个辨别指数。表示 c-index (AUC) ,Cc-index 为0.5表示随机分裂,而 c-index 为1表示完美的预测。Dxy是萨默斯的Dxy预测概率和观察到的响应之间的等级相关性。Dxy与 c-index 有简单的关系:Dxy=2(c0.5). 一种Dxy0当模型的预测是随机的并且当Dxy=1,该模型是完美区分的。在这种情况下,c-index 是0.693这比机会略好,但 c-index 为>0.8足以预测个人的结果。

如上所述,该模型可能过于乐观。我们现在使用 bootstrap 来量化乐观度:

#-----------------------------------------------------------------------------
# Validate model using bootstrap
#-----------------------------------------------------------------------------

my.valid <- validate(mylogit, method="boot", B=1000)
my.valid

          index.orig training    test optimism index.corrected    n
Dxy           0.3857   0.4033  0.3674   0.0358          0.3498 1000
R2            0.1380   0.1554  0.1264   0.0290          0.1090 1000
Intercept     0.0000   0.0000 -0.0629   0.0629         -0.0629 1000
Slope         1.0000   1.0000  0.9034   0.0966          0.9034 1000
Emax          0.0000   0.0000  0.0334   0.0334          0.0334 1000
D             0.1011   0.1154  0.0920   0.0234          0.0778 1000
U            -0.0050  -0.0050  0.0015  -0.0065          0.0015 1000
Q             0.1061   0.1204  0.0905   0.0299          0.0762 1000
B             0.1947   0.1915  0.1977  -0.0062          0.2009 1000
g             0.8378   0.9011  0.7963   0.1048          0.7331 1000
gp            0.1673   0.1757  0.1596   0.0161          0.1511 1000

让我们专注于Dxy这是在顶部。第一列表示原始索引,即0.3857. 称为的列optimism表示模型估计的高估量。该列index.corrected是原始估计值减去乐观值。在这种情况下,偏差校正Dxy比原来的要小一些。偏差校正的 c 指数 (AUC) 为c=1+Dxy2=0.6749.

我们还可以使用重采样计算校准曲线:

#-----------------------------------------------------------------------------
# Calibration curve using bootstrap
#-----------------------------------------------------------------------------

my.calib <- calibrate(mylogit, method="boot", B=1000)

par(bg="white", las=1)
plot(my.calib, las=1)

n=400   Mean absolute error=0.016   Mean squared error=0.00034
0.9 Quantile of absolute error=0.025

LogReg 校准

该图提供了一些证据表明我们的模型过度拟合:模型低估了低概率并高估了高概率。周围也存在系统性的高估0.3.

预测模型构建是一个很大的话题,我建议阅读 Frank Harrell 的课程笔记

关于系数解释的说明:记得它们取决于预测变量是如何写成数字的。因此,对于连续变量,它们取决于测量它们的单位;对于分类预测变量,编码方案。不要因为 A9 的系数 0.003453 很小就认为 A9 是“不重要的”——在某些感兴趣的人群中,A9 的范围可能超过几个数量级,而其他预测变量仅略有不同,或者可能是易于设置为非常高或低的值,而其他值很难改变。