Lasso 使用 glmnet 对 cox 模型进行协变量选择

机器算法验证 r 套索 cox模型 网络 逐步回归
2022-03-31 18:35:17

我想使用 glmnet 通过收缩(套索)使用模型选择。到目前为止,我做了以下事情:

> library(glmnet)
> library(survival)
> d <- myTestData
> x <- model.matrix( ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8, d)
> y <- Surv(d$time, d$status)
> fit <- glmnet(x, y, family="cox", alpha=1)
> plot(fit, label=T)
> cv.fit <- cv.glmnet(x, y, family="cox", alpha=1)
> plot(cv.fit)

glmnet 图

cv.glmnet-plot

问题 #1:在这种情况下,您如何解释 Lasso 的模型选择?

然后我检索了具有非零系数的变量,lambda.min并将它们与coxph使用相同变量的模型的系数进行了比较。

> coef(cv.fit, s = "lambda.min")
9 x 1 sparse Matrix of class "dgCMatrix"
                       1
(Intercept)  .          
x1           0.575711489
x2           0.292638801
x3           .          
x4           0.004826889
x5           .          
x6           .          
x7          -0.045450370
x8          -0.032665220
> m1 <- coxph(Surv(time, status) ~ x1 + x2 + x4 + x7 + x8, data=d) # selected by LASSO
> coef(m1)
         x1          x2          x4          x7          x8 
 0.72538227  0.30256729  0.01394998 -0.09512841 -0.03507133

Lasso 系数小于coxph系数,这是为了我的理解,以避免过度拟合。

问题 #2:Lasso 的变量选择方式是否正确?

问题 #3:是否有可能从 Lasso 对象中获取一个coxphcph对象?

问题#4:我怎样才能从中得到 HR、它的 CI 和 P 值来展示?

然后我也做了一个向后选择:

> fastbw(fit, type="individual", rule="aic")

 Deleted Chi-Sq d.f. P      Residual d.f. P      AIC  
 x3      0.02   1    0.8897 0.02     1    0.8897 -1.98
 x5      0.03   1    0.8701 0.05     2    0.9773 -3.95
 x6      0.18   1    0.6701 0.23     3    0.9730 -5.77
 x4      0.72   1    0.3974 0.94     4    0.9182 -7.06
 x7      1.49   1    0.2221 2.43     5    0.7863 -7.57

Approximate Estimates after Deleting Factors

       Coef    S.E. Wald Z         P
x1  0.70903 0.32241  2.199 2.787e-02
x2  0.32185 0.06857  4.694 2.680e-06
x8 -0.03761 0.01446 -2.601 9.308e-03

Factors in Final Model

[1] x1 x2 x8

得到的系数类似于从 获得的系数coxph

问题#5:细微差异是由于舍入误差还是更多?

我真的很期待您的回复......我发现很难与 R 一起进入这个主题并且需要一些帮助。;-)

0个回答
没有发现任何回复~