Lasso交叉验证
library(glmnet)
library(survival)
library(survminer)
x = exp[,gene] #gene为纳入的基因集
y = Surv(time = cl$pfs_time, event = cl$pfs_status)
lasso.cv = cv.glmnet(x, y, nfolds = 10, family = "cox", type.measure = 'C') #10折
plot(lasso.cv)#有两条垂直的虚线,左侧表示取得MSE最小值的logλ,右侧表示距离最小值1个标准误差的logλ,如果存在过拟合问题,那么logλ是一个很好的解决问题的起点
lasso.coef.cv = coef(lasso.cv, s = "lambda.1se") # 或者选择"lambda.min"
result.lasso = data.frame(i = lasso.coef.cv@i, Coef = lasso.coef.cv@x) #i为基因排序,x为回归系数
result.lasso$EnsemblID = gene[result.lasso$i]
- k折交叉检验的结果如下:指定 λ 后做 k 次交叉验证并对得到对应的 C-index 值的可信区间,根据此图选取 λ 值

- 输出结果 result.lasso 如下,包括了基因名和对应的回归系数
计算各样本模型评分Score
meta = merge(exp[, colnames(exp) %in% result.lasso$EnsemblID], cl, by=0) #by=0为按行名组合
rownames(meta)=meta$Row.names;meta=meta[,-1]
for(i in 1:6){ #可选
meta[,i] <- meta[,i]*result.lasso$Coef[i]
}
meta$Score = rowSums(meta[,1:6]) #可选,计算每个样本的Score
meta$group = ifelse(meta$Score > median(meta$Score),'high','low')
- 输入数据 meta 的结构为:基因表达(z-score)+ 生存资料
