只需三分钟,掌握生存相关机器学习算法-superpc和Ridge

机器学习,在生信文章中出现的频率越来越高,成为不可或缺的一部分分析内容,今天小果想带着大家学习一下生存相关机器学习的两种算法-superpc和Ridge,接下来小果为大家对这两种算法做一下简单介绍,superpc这个算法的中文名称叫做监督主成分分析,Ridge回归也是对参数进行约束的一种求解方程,Ridge回归是在均方损失函数后面添加L2正则化项,能够参数无限接近零;通过训练集数据进行模型构建,然后利用测试数据进行模型预测,并计算模型的预测效能的C指数,通过该指数来判断模型的好坏,选择最适合的模型,如果觉得推文不错,点赞加关注奥,话不多说,小果开始今天的分享啦,代码如下:

  1. 安装需要的R包

install.packages(“tidyverse”)

BiocManager::install(“survcomp”)

install.packages(“superpc”)

install.packages(“survival”)

install.packages(“glmnet”)

  1. 载入需要的R包

library(superpc)

library(survival)

library(survcomp)

library(tidyverse)

library(glmnet)

  1. 读取数据

#TCGA.txt-训练集数据,第一列为样本信息,第二列表示生存状态,第三列表示生存时间,其他列为基因名

tcga <- read.table(“TCGA.txt”, header = T,sep = “\t”, quote = “”, check.names = F)

Dingtalk_20230626145325

#GSE57303-测试集数据,第一列为样本信息,第二列表示生存状态,第三列表示生存时间,其他列为基因名.

GSE57303 <- read.table(“GSE57303.txt”, header = T, sep = “\t”, quote = “”, check.names = F)

Dingtalk_20230626150339

  1. 所需数据格式整理

# 生成包含2个数据集的列表

mm <- list(TCGA = tcga,

GSE57303 = GSE57303)

# 数据标准化

mm <- lapply(mm,function(x){

x[,-c(1:3)] <- scale(x[,-c(1:3)])

return(x)})

result <- data.frame()

# TCGA作为训练集

est_data <- mm$TCGA

#GSE57303作为测试集

w<-mm$GSE57303

#获得基因名

pre_var <- colnames(est_data)[-c(1:3)]

#提取训练集需要的列数据

est_dd <- est_data[, c(‘OS.time’, ‘OS’, pre_var)]

#提取测试集需要的列数据

w <- w[, c(‘OS.time’, ‘OS’, pre_var)]

5.superpc算法进行模型构建

#训练集数据列表

data <- list(x = t(est_dd[, -c(1,2)]), y = est_dd$OS.time, censoring.status = est_dd$OS, featurenames = colnames(est_dd)[-c(1, 2)])

set.seed(123)

#利用训练集进行模型构建

fit <- superpc.train(data = data,type = ‘survival’, s0.perc = 0.5) #default

cv.fit <- superpc.cv(fit, data, n.threshold = 20, #default

n.fold = 10,

n.components = 3,

min.features = 5,

max.features = nrow(data$x),

compute.fullcv = TRUE,

compute.preval = TRUE)

#测试集数据列表

test <- list(x = t(w[,-c(1,2)]), y = w$OS.time, censoring.status = w$OS, featurenames = colnames(w)[-c(1,2)])

#利用训练集进行模型预测

ff <- superpc.predict(fit, data, test, threshold = cv.fit$thresholds[which.max(cv.fit[[“scor”]][1,])], n.components = 1)

#将数据类型改为数字

rr <- as.numeric(ff$v.pred)

rr2 <- cbind(w[,1:2], RS = rr)

#计算模型的预测效能的C指数

cc<-data.frame(Cindex=as.numeric(summary(coxph(Surv(OS.time,OS)~ RS,rr2))$concordance[1])) %>%

rownames_to_column(‘ID’)

cc$Model <- paste0(‘SuperPC’)

result <- rbind(result, cc)

6.Ridge算法进行模型构建

#模型构建

x1 <- as.matrix(est_dd[, pre_var])

x2 <- as.matrix(Surv(est_dd$OS.time, est_dd$OS))

set.seed(seed)

fit = glmnet(x1, x2, family = “binomial”, alpha = 0, lambda = NULL)

cvfit = cv.glmnet(x1, x2,

nfold = 10, #例文描述:10-fold cross-validation

family = “binomial”,

type.measure = “class”

)

#模型预测

rs = as.numeric(predict(fit, type = ‘response’, newx = as.matrix(w[, -c(1,2)]), s = cvfit$lambda.min))

rr2 <- cbind(w[,1:2], RS = rs)

##计算模型的预测效能的C指数

cc <- data.frame(Cindex = as.numeric(summary(coxph(Surv(OS.time,OS) ~ RS, rr2))$concordance[1])) %>%

rownames_to_column(‘ID’)

cc$Model <- paste0(‘Ridge’)

Result <- rbind(result, cc)

write.table(Result,file=”superpc_ridge.txt”,row.names=F,col.names=T,sep=”\t”,quote=F)

Dingtalk_20230626163309

小果最终顺利的利用supersc和Ridge两种算法进行了模型构建和预测,并计算了预测效能C指数,来判断模型的好坏,机器学习相关的其他分析内容欢迎尝试本公司新开发的云平台生物信息分析小工具,零代码完成分析,云平台网址:http://www.biocloudservice.com/home.html,主要包括lasso回归模型筛选特征基因(http://www.biocloudservice.com/116/116.php),随机森林的十折交叉验证(http://www.biocloudservice.com/646/646.php),svm-ref支持向量机的机器学习(http://www.biocloudservice.com/372/372.php)等机器学习相关的小工具,今天小果的分享就到这里,欢迎大家和小果一起讨论学习,下期再见奥。