我想使用 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)
问题 #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 对象中获取一个coxph
或cph
对象?
问题#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 一起进入这个主题并且需要一些帮助。;-)