如何从多元 glmnet (coxnet) 模型创建二进制预测器?

How to create a binary preditor from a multivariate glmnet (coxnet) model?

让我们使用以下示例:

生成生存数据(1000 个样本,30 个变量)

library(glmnet)
library(survival)
set.seed(10101)
N=1000;p=30
nzc=p/3
x=matrix(rnorm(N*p),N,p)
beta=rnorm(nzc)
fx=x[,seq(nzc)]%*%beta/3
hx=exp(fx)
ty=rexp(N,hx)
tcens=rbinom(n=N,prob=.3,size=1) 
y=cbind(time=ty,status=1-tcens)  

使用 glmnet 识别与生存相关的变量

fit=glmnet(x,y,family="cox")
cvfit <- cv.glmnet(x, y, family="cox")
plot(cvfit)
coefficients <- coef(fit, s = cvfit$lambda.min)
active_coefficients <- coefficients[,1] != 0

子集矩阵,只保留那些被 glmnet

识别为相关的参数 (n=17)
x_selected <- x[,active_coefficients]

生成具有相关参数的 cox 模型 (n=17)

summary(coxph(Surv(y[,1],y[,2])~x_selected))

现在我遇到的问题是,我是否以及如何将来自 n=17 个参数的信息纳入其中,以获得单个(理想情况下是二元的)预测变量来创建一个 Kaplan-Meier 图,该图说明了预测性能这个基于 17 参数的签名。我可以使用 PCA 并对主要成分进行二值化(然后将其用于 Kaplan-Meier 图)但我确信必须有更优雅的方法,因为基本上我想执行的相同分析最近已经完成由其他人(参见 http://ascopubs.org/doi/pdf/10.1200/JCO.2012.45.5626 & http://ascopubs.org/doi/suppl/10.1200/jco.2012.45.5626/suppl_file/DS2_JCO.2012.45.5626.pdf -> 作者使用 glmnet 并确定了 20 个与预测生存相关的基因(到目前为止我的代码是相同的)。但是他们还显示了 Kaplan-Meier 图,他们汇集了这个“20 gene signature”到具有 3 个级别的单个变量 ["low"、"medium"、"high"] - 看图 1 C 和 D。我不确定如何用我的例如。有什么想法吗?

谢谢!

已经找到解决方案-继续分析如下:

cox_model <- coxph(Surv(y)~x_selected)

#generate a linear predictor from my cox_model
linear_predictor <- predict(cox_model, type="lp")

#check the linear predictor
coxph(Surv(y) ~ linear_predictor)

#stone-beran estimate of survival curve
df <- cbind.data.frame(y,linear_predictor)
s <- prodlim(Surv(time,status) ~ linear_predictor, data=df)

#plot survival curve
xl <- c(0,60)
plot(s, xlab="Time (months)", ylab="Survival rate",
     col=c("green","blue","red"), automar=TRUE, axes=FALSE, atrisk=FALSE,
     confint=FALSE, legend=TRUE,
     legend.title="Coxnet signature", legend.legend=c("low levels", "medium
levels","high levels"), legend.x="bottomright", legend.cex=0.8, xlim=xl)
axis(side=1, at=seq(0,240,12))
axis(side=2, at=seq(0,1,.2))