#导入包
library(magrittr)
library(survival)
library(dplyr)
library(survminer)
# 导入数据,合并数据
rm(list = ls())
options(stringsAsFactors = F)
## 导入数据:取完基因交集
load("KM_expr_sur.Rdata") # 这里是前面存下的
final_expr里的37行是经过基因差异分析&WGCNA分析取交集后的37个基因。
final_expr.lasso <- merge(t(final_expr), survival, by = "row.names")
head(final_expr.lasso)
rownames(final_expr.lasso) <- final_expr.lasso[, 1]
final_expr.lasso <- final_expr.lasso[, -1]
final_expr.lasso <- final_expr.lasso[, !names(final_expr.lasso) %in% c("sample", "_PATIENT")]
x_lasso<-as.matrix(final_expr.lasso[,1:37])
y_lasso<-Surv(final_expr.lasso$OS.time,final_expr.lasso$OS==1)
# lasso 模型以及交叉验证
# 使用glmnet函数就可以一行代码运行lasso模型,cv.glmnet函数进行交叉验证,注意生存数据时,family处为 “cox” 。
#默认的统计图,设定label = TRUE可以给曲线加上注释,
lasso <- glmnet(x_lasso, y_lasso, family = "cox", alpha = 1 , nlambda = 1000)
plot(lasso)
#交叉验证Lasso回归
#使用glmnet包中K折交叉验证法进行变量筛选,设置随机种子数并定义10折交叉
set.seed(1234)
#注 生存分析的时间不能是0
fitCV_lasso <- cv.glmnet(x, y_lasso,
family = "cox",
type.measure = "deviance",
nfolds = 10)
plot(fitCV_lasso)
#λ值重新建模,选择lambda.min
fitCV_lasso$lambda.1se
fitCV_lasso$lambda.min
coefficient_lasso
#系数不等于0的为纳入的变量(基因)
Active.index_lasso <- which(as.numeric(coefficient_lasso) != 0)
Active.coefficient_lasso <- as.numeric(coefficient_lasso)[Active.index_lasso ]
sig_gene_mult_cox_lasso <- rownames(coefficient_lasso)[Active.index_lasso ]
#查看具体哪些基因
sig_gene_mult_cox_lasso
sig_gene_mult_cox
[1] "AC246787.4" "ART3" "CD79A" "FAM92B" "GPR15" "IGHA2" [7] "IGHG1" "IGHG2" "IGHV1-18" "IGJ" "PNOC"