R语言中Lasso Cox 筛选生存相关特征

构建预后模型时,通常先进行单因素Cox分析筛选出关联的变量,再通过Lasso Cox 筛选生存相关特征(排除多重共线性的特征),最后构建Cox多因素回归模型分析预后影响。

###### Lasso + Cox 生存分析模式####

# if (!require("BiocManager", quietly = TRUE))
#   install.packages("BiocManager")
# 
# BiocManager::install("glmnet")

### 1. 载入数据
# R包glmnet是通过惩罚最大似然法拟合广义线性和类似模型的软件包。
library(glmnet)
library(survival)

data(CoxExample)
class(CoxExample) # [1] "list"

dim(CoxExample$x)
dim(CoxExample$y)

## 加上假基因名,样本名
rownames(CoxExample$x) <- paste0('sample',1:dim(CoxExample$x)[1])
colnames(CoxExample$x) <- paste0('gene',1:dim(CoxExample$x)[2])

rownames(CoxExample$y) <- paste0('sample',1:dim(CoxExample$x)[1])

head(CoxExample$x) # 行:患者/样本,列:特征,可以是特征基因的表达谱
head(CoxExample$y) # 生存数据,行:患者/样本,列:time, status
# CoxExample$y 中 0=alive,1=dead

### 2. Lasso Cox模型
fit = glmnet(CoxExample$x,CoxExample$y,
             alpha = 1,family = "cox") 
## alpha = 1,用于变量选择,去除系数为零的变量
## lambda =0, 没有正则项,等于coxph_fit
plot(fit,xvar= 'lambda',label = TRUE)

## 交叉验证
# 默认 nfolds = 10
cvfit <- cv.glmnet(CoxExample$x,CoxExample$y,
                   alpha = 1,family = "cox")
# type.measure :deviance

# cvfit <- cv.glmnet(CoxExample$x,CoxExample$y,
#                    alpha = 1,family = "cox",
#                    type.measure= "C")

plot(cvfit)

### 3. 筛选特征
coefficient <- coef(cvfit, s= cvfit$lambda.min)
selected_index <- which(as.numeric(coefficient) != 0)
selected_features <- names(coefficient[selected_index,])

### 4. 预测生存时间
predict(cvfit, newx = CoxExample$x[1:10, ], 
        type = "response")
# type:“link”, “response”, “coefficients”, “nonzero”其中的一个

### 5. 计算risk score 
# 一般选择risk score计算公式

risk_score <- apply(CoxExample$x[1:10,selected_features],1,
                    function(x) sum(x*coefficient[selected_index,]))

# sum(CoxExample$x[10,selected_features]*coefficient[selected_index,])

参考:

https://www.cnblogs.com/xiaogaobugao/p/17149331.html

https://blog.csdn.net/qq_27390023/article/details/122656396?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168224078416800215069079%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168224078416800215069079&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-122656396-null-null.blog_rank_default&utm_term=glmnet&spm=1018.2226.3001.4450

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值