生信基础信息学习癌症研究思路

TCGA Cox模型-训练集、内部验证集、外部验证集综合构建Co

2021-11-14  本文已影响0人  误入BioInfor的大黄鸭

在进行构建多因素Cox回归模型时,我们常常通过对基因进行单因素Cox回归对基因进行筛选,以筛选一部分与生存相关的基因,避免纳入太多基因而造成计算机算法的浪费和计算时间的浪费。而进行LASSO(Least absolute shrinkage and selection operator)回归可压缩一些回归系数,即强制系数绝对值之和小于某个固定值;同时设定一些回归系数为零,简单来说就是去掉多元回归的自变量存在的一些共线性强的自变量,以防止模型的过拟合的现象。简单来说,构建模型之前,我们要对部分基因进行初步筛选,以便于模型的模拟进行。


4.单因素Cox分析

这块我们的主要思路是,提取单因素Cox后对生存有意义的因素,然后再从矩阵中抽取这些因素成为新的矩阵,进行后续的分析。当然有些人说,如果你纳入分析过少,可以不进行单因素Cox分析进行筛选,单因素没意义的基因也可以纳入多因素Cox模型的构建。是因为有些因素单独对预后没显著影响,但是合并其他因素构建模型,可以和其他因素协同对预后进行影响。我觉得这个看法也挺合理的,但是还是仅供参考,本人也不知道对不对,从丁香园看到的。这里还是用普遍认可的方法,先进行单因素Cox筛选,再进行多因素

循环如果是结果的叠加,我们一般用rbind函数,或者c函数,比如SingleGenes=c(SingleGenes , i),使用x=c(x,i)的结构,在x向量中往后叠加有意义的结果。这个东西今后我会出相关教程。


#这里定义筛选标准,这里我讲一下,如果您基因过少,您这里甚至可以定为p=0.1,如果基因过多,您这可以定为0.01,具体为啥,我今后也会更新具体内容
pSingleCox=0.05
#循环对train每个基因进行cox分析

SingleGenes=c()
SingleCoxOut=data.frame()
#这里记住,要先生成一个空的矩阵、向量,才能在矩阵、向量里叠加,否则第一次叠加会找不到矩阵、向量,而且要记住,要在循环前生成空矩阵、向量,否则每次循环一边都会把矩阵、向量清空

for(n in colnames(train[,3:ncol(train)])){      #从第三列开始每列循环(因为第一第二列是生存时间和生存状态)
SingleCcox <- coxph(Surv(time, status) ~ train[,n] , data = train)    #用coxph函数进行单因素cox分析
singleCoxSsummary = summary(SingleCcox)  #用summary函数提取出cox结果里的P、HR95L、HR95H、HR参数等数据

Pvalue1=singleCoxSsummary$coefficients[,"Pr(>|z|)"]    #提取p值

#判断p值是不是小于0.05,如果符合标准的基因就纳入
if(Pvalue1<pSingleCox){
SingleGenes=c(SingleGenes , i)
}

#输出单因素Cox的结果,最后便于输出为文件
SingleCoxOut=rbind(SingleCoxOut,
c(i, singleCoxSsummary$conf.int[,"exp(coef)"], singleCoxSsummary$conf.int[,"lower .95"], singleCoxSsummary$conf.int[,"upper .95"], Pvalue1))

}

#修改SingleCoxOut的列名
colnames(SingleCoxOut)<-c(ID,HR,HR95L,HR95H,Pvalue)

#输出列的列名,把time和state加上有意义的基因都筛出来生成新的矩阵,用于后续分析
SingleColname=c("time","status",SingleGenes)
train=[,SingleColname]
test1=[,SingleColname]

上一篇下一篇

猜你喜欢

热点阅读