实战 lasso特性筛选得到5个基因 cox单因素分析得到许多故意义的基因 怎样la

[复制链接]
查看1072 | 回复0 | 2023-8-23 11:55:27 | 显示全部楼层 |阅读模式
二、为什么须要用 Lasso + Cox 生存分析模式一样平常我们在筛选影响患者预后的变量时,通常先举行单因素Cox分析筛选出关联的变量,然后构建多因素模子进一步确认变量与生存的关联是否独立。
但这种做法没有考虑到变量之间多重共线性的影响,有时间我们以致会发现单因素和多因素Cox回归得到的风险比是矛盾的,这是变量之间多重共线性导致模子 失真的结果。并且,当变量个数大于样本量时(比方筛选影响预后的基因或突变位点,候选的变量数大概远超样本个数),此时传统的Cox回归的徐徐回归、前 进法、后退法等变量筛选方法都不再实用。
因此,当变量之间存在多重共线性或者变量个数大于样本量时,须要用Lasso
(Least absolute shrinkage and selection operator)回归起首举行变量的筛选,然后构建Cox回归模子分析预后影响,这就是Lasso + Cox 生存分析模式。
三、什么是 Lasso + Cox 生存分析模式Lasso可以在模子参数估计的同时实现变量的选择,可以或许较好的办理回归分析中的多重共线性问题,并且可以或许很好的表明结果。Lasso回归算法使用L1范数举行紧缩处罚,对一些对于因变量贡献不大的变量系数举行罚分改正,将一些不太紧张的变量的系数压缩为0,保存紧张变量的系数大于0,以减少Cox回归中协变量的个数

5.7+生信文章复现(五):单因素cox+lasso筛选预后相干DEGs

  1. load("G:/r/duqiang_IPF/GSE70866_metainformation_4_platforms/3_ipf_combined_cox_univariate_Adjuste_for_age_sex.RData")
  2. head(cox_results)
  3. rownames(cox_results)
  4. cox_results2=cox_results %>% as.data.frame() %>% filter(p<0.05)
复制代码


  1. identical(colnames(exprSet),rownames(phe))
  2. x=exprSet[rownames(exprSet) %in% rownames(cox_results2),]
  3. x=t(x)
  4. dim(x)
  5. y=phe %>%select('time','event')
  6. head(y)[1:4,1:2]
  7. head(x)[1:4,1:4]
复制代码



模子构建 input  x  y

  1. #构建模型
  2. y=data.matrix(Surv(time=y$time,
  3.                    event= y$event))
  4. head(y)
  5. head(x)[1:4,1:5]
复制代码


1 模子构建

  1. fit <- glmnet(x, y, family = 'cox', type.measure = "deviance", nfolds = 10)
  2. plot(fit,xvar = 'lambda',label = T) #候选DEHGs的lasso系数
复制代码



2 十折交叉检验筛选最佳lambda: 

  1. #十折交叉检验筛选最佳lambda:
  2. set.seed(007)
  3. lasso_fit <- cv.glmnet(x, y, family = 'cox', type.measure = 'deviance', nfolds = 10)
复制代码


3 提取最佳λ值(这里选择1se对应lambda): 

  1. #提取最佳λ值(这里选择1se对应lambda):
  2. lambda.1se <- lasso_fit$lambda.1se
  3. lasso_fit$lambda.min
  4. lambda.1se  #[1] 0.2617315
复制代码
4.使用1se的lambda重新建模:

  1. model_lasso_1se <- glmnet(x, y, family = 'cox',
  2.                           type.measure = 'deviance', nfolds = 10,
  3.                           lambda = lambda.1se)
复制代码
5 拎出建模使用基因:

  1. #拎出建模使用基因:
  2. gene_1se <- rownames(model_lasso_1se$beta)[as.numeric(model_lasso_1se$beta)!=0]#as.numeric后"."会转化为0
  3. gene_1se #筛选出5个  #"HS3ST1"  "MRVI1"   "TPST1"   "SOD3"    "S100A14"
复制代码




  1. library(dplyr)#save(phe,phe_final_3,exprSet,cox_results,file = "G:/r/duqiang_IPF/GSE70866_metainformation_4_platforms/3_ipf_combined_cox_univariate_Adjuste_for_age_sex.RData")load("G:/r/duqiang_IPF/GSE70866_metainformation_4_platforms/3_ipf_combined_cox_univariate_Adjuste_for_age_sex.RData")
  2. head(cox_results)
  3. rownames(cox_results)
  4. cox_results2=cox_results %>% as.data.frame() %>% filter(p<0.05)
  5. getElement(cox_results,"p")cox_results['p']head(cox_results)dim(cox_results)head(exprSet)dim(exprSet)dim(phe)head(phe)identical(colnames(exprSet),rownames(phe))
  6. x=exprSet[rownames(exprSet) %in% rownames(cox_results2),]
  7. x=t(x)
  8. dim(x)
  9. y=phe %>%select('time','event')
  10. head(y)[1:4,1:2]
  11. head(x)[1:4,1:4]
  12. table(y$time==0)#OS单元从天转换为年: 是否转换成年不影响结果if(1==1){  y$time <- round(y$time/365,5) #单元年,保存5位小数  time不可以有0  head(y)}#构建模型
  13. y=data.matrix(Surv(time=y$time,
  14.                    event= y$event))
  15. head(y)
  16. head(x)[1:4,1:5]fit <- glmnet(x, y, family = 'cox', type.measure = "deviance", nfolds = 10)
  17. plot(fit,xvar = 'lambda',label = T) #候选DEHGs的lasso系数head(coef(fit))#十折交叉检验筛选最佳lambda:
  18. set.seed(007)
  19. lasso_fit <- cv.glmnet(x, y, family = 'cox', type.measure = 'deviance', nfolds = 10)
  20. plot(lasso_fit)lasso_fithead(coef(lasso_fit))rownames(lasso_fit$beta)[as.numeric(lasso_fit$beta)>0]#提取最佳λ值(这里选择1se对应lambda):
  21. lambda.1se <- lasso_fit$lambda.1se
  22. lasso_fit$lambda.min
  23. lambda.1se  #[1] 0.2617315#使用1se的lambda重新建模:model_lasso_1se <- glmnet(x, y, family = 'cox',
  24.                           type.measure = 'deviance', nfolds = 10,
  25.                           lambda = lambda.1se)head(model_lasso_1se)head(coef(model_lasso_1se))#拎出建模使用基因:
  26. gene_1se <- rownames(model_lasso_1se$beta)[as.numeric(model_lasso_1se$beta)!=0]#as.numeric后"."会转化为0
  27. gene_1se #筛选出5个  #"HS3ST1"  "MRVI1"   "TPST1"   "SOD3"    "S100A14"
复制代码


cox回归与logistic回归的区别









一、LASSO扼要先容
       随着科技的进步,网络数据的技能也有了很大的发展。因此怎样有效地从数据中发掘出有效的信息也越来越受到人们的关注。统计建模无疑是目前处理这一问题的最有效的本事之一。在模子建立之初,为了只管减小因缺少紧张自变量而出现的模子毛病,人们通常会选择尽大概多的自变量。但实际建模过程中通常须要探求对响应变量最具有表明性的自变量子集—即模子选择(或称变量选择、特性选择),以进步模子的表明性和猜测精度。以是模子选择在统计建模过程中是极其紧张的问题。
       Lasso(Least absolute shrinkage and selection operator, Tibshirani(1996))方法是一种压缩估计。它通过构造一个罚函数得到一个较为精粹的模子,使得它压缩一些系数,同时设定一些系数为零。因此保存了子集紧缩的优点,是一种处理具有复共线性数据的有偏估计。
      Lasso 的根本头脑是在回归系数的绝对值之和小于一个常数的约束条件下,使残差平方和最小化,从而可以或许产生某些严酷等于0 的回归系数,得到可以表明的模子。R的Lars 算法的软件包提供了Lasso编程,我们根据模子改进的须要,可以给出Lasso算法,并使用AIC准则和BIC准则给统计模子的变量做一个截断,进而达到降维的目标。因此,我们通过研究Lasso可以将其更好的应用到变量选择中去。
     说简单点:在回归分析中因素筛选重要用到徐徐回归stepwise、向前、向后等等方法,这些方法比力传统,而对于共线性问题比力严峻的数据,或者变量个数大于观测值个数比方基因测序数据,基因个数弘大于观测值个数(病人数),上述传统方法不符合,而Lasso 方法就是为相识决上述问题而生,它提供了一种新的变量筛选算法,可以很好的办理共线性问题,对于我们平常做的回归分析,如果各人觉得用平常的方法筛选到的变量不理想,自己想要的变量没有筛选到,可以用此方法试一试,详细流程是先在R软件中用此方法筛选出变量,之后对筛选出的变量再做COX回归或者其他回归分析。

来源:https://blog.csdn.net/qq_52813185/article/details/127363232
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则