欢迎关注”生信修炼手册”!

回归我们并不陌生,线性回归和最小二乘法,逻辑回归和最大似然法,这些都是我们耳熟能详的事物,在生物信息学中的应用也比较广泛, 回归中经常出现两类问题,欠拟合和过拟合。

对于欠拟合,简单而言就是我们考虑的少了,一般通过在回归模型中增加自变量或者扩大样本数量来解决;对于过拟合,简单而言就是考虑的太多了,模型过于复杂了,这时候可以对已有的自变量进行筛选,在代价函数中增加惩罚项来限制模型的复杂度,增加的惩罚项我们称之为正则化,正则化常用的有L1正则化和L2正则化,

所谓正则化Regularization, 指的是在回归模型代价函数后面添加一个约束项, 在线性回归模型中,有两种不同的正则化项

1. 所有参数绝对值之和,即L1范数,对应的回归方法叫做Lasso回归

2. 所有参数的平方和,即L2范数,对应的回归方法叫做Ridge回归,岭回归

lasso回归对应的代价函数如下

岭回归对应的代价函数如下

红框标记的就是正则项,需要注意的是,正则项中的回归系数为每个自变量对应的回归系数,不包含回归常数项。

在预后建模的文章中,我们需要针对多个marker基因的表达量汇总形成一个指标,使用该指标来作为最终的maker, 而这个指标在文章中被称之为各种risk score, 比如NAD+基因的预后模型,构建的maker就叫做NPRS, 全称的解释如下

The NAD+ metabolism-related prognostic risk score (NPRS) of each sample was calculated using the formula: NPRS = ΣExp (mRNAί) × Coefficient (mRNAί)

所以各种的预后建模,其实都是lasso回归技术在生物信息学领域的应用。注意观察上述的Lasso回归代价函数,,可以看到有一个未知数λ, 这个参数是一个惩罚项的系数,数值越大,惩罚项对应的影响就越大,我们求解的目标是代价函数值最小,λ = 0时,惩罚项失去意义,代价函数变成了普通的线性回归,而λ过大,惩罚项的影响被放的过大,过小时,惩罚项又失去了原本的意义,所以使用lasso回归,第一个问题是设置合理的λ 值。

这个λ 值 如何设置呢?最简单的办法是找到两个队列,训练集和验证集,适应一系列的λ值对训练集进行建模,观察模型在验证集上的表现,然后选择在验证集上表现最佳模型的λ值,当没有额外的验证集时,就只能通过交叉验证的方式将数据集人工划分为训练集和验证集,然后进行分析。在NAD+的文献中,也是采用了10折交叉验证的方式

In the training cohort, using the Least Absolute Shrinkage And Selection Operator (LASSO) regression with 10-fold cross-validated to screen out NMRGs associated with survival in ALS patients.

具体到实际操作,使用的是glmnet这个R包

Here, the glmnet package was applied to determine the optimal lambda value corresponding to the minimum of the error mean via cross-validation.

官方链接如下

https://glmnet.stanford.edu/

正则项本身只是一个代价函数中的添加项,所以其应用范围不仅局限于线性回归,逻辑回归,cox回归都支持,所以glmnet这个R包也支持多种回归模型的正则化处理。对于cox回归而言,其用法可以参考如下链接

https://glmnet.stanford.edu/articles/Coxnet.html

基本的操作步骤如下

1. 准备输入文件

包括自变量和因变量,自变量是一个矩阵,每一行表示一个患者,每一列表示一个自变量;因变量也是一个矩阵,共两列,分别为代表生存信息的time加status, 代码如下

> library(glmnet)
载入需要的程辑包:Matrix
Loaded glmnet 4.1-2
> library(survival)
> data(CoxExample)
> x <- CoxExample$x
> y <- CoxExample$y
# 自变量数据,每一行表示一个患者,每一列表示一个自变量
> head(x[, 1:5])[,1]       [,2]        [,3]       [,4]        [,5]
[1,] -0.8767670 -0.6135224 -0.56757380  0.6621599  1.82218019
[2,] -0.7463894 -1.7519457  0.28545898  1.1392105  0.80178007
[3,]  1.3759148 -0.2641132  0.88727408  0.3841870  0.05751801
[4,]  0.2375820  0.7859162 -0.89670281 -0.8339338 -0.58237643
[5,]  0.1086275  0.4665686 -0.57637261  1.7041314  0.32750715
[6,]  1.2027213 -0.4187073 -0.05735193  0.5948491  0.44328682
# 因变量数据,生存数据的因变量为time加status
> head(y)time status
[1,] 1.76877757      1
[2,] 0.54528404      1
[3,] 0.04485918      0
[4,] 0.85032298      0
[5,] 0.61488426      1
[6,] 0.29860939      0

2. 交叉验证

通过交叉验证,选择最佳的λ值。在选择λ值时,我们需要指定评价指标,就是根据评价指标的值来选择最佳模型和最佳λ值,对应的是typpe.measure参数,对于cox模型而言,只支持以下两种指标

1. deviance

2. C-index

评价指标c-index的代码如下

> cvfit <- cv.glmnet(x, y, family = "cox", type.measure = "C", nfolds = 10)
> plot(cvfit)

输出如下

评价指标deviance的代码如下

> cv.glmnet(x, y, family = "cox", type.measure = "deviance", nfolds = 10)
> plot(cvfit)

输出如下

在上述图片中,横坐标为log λ值,纵坐标为每个λ值对应的评价指标,用error bar的形式展现了多个模型评价指标的均值+标准误,可以看到在图中有两条垂直的虚线,左边的虚线对应评价指标最佳的λ值,即lambda.min, c-index值越大越好,deviance值越小越好;右边的虚线表示评价指标在最佳值1个标准误范围的模型的λ值,即lambda.1se, 通过以下方式可以提取对应的值

> cvfit$lambda.min
[1] 0.01749823
> cvfit$lambda.1se
[1] 0.04868986

通过print函数可以看到交叉验证的关键信息

> print(cvfit)Call:  cv.glmnet(x = x, y = y, type.measure = "deviance", nfolds = 10, family = "cox")Measure: Partial Likelihood DevianceLambda Index Measure      SE Nonzero
min 0.01750    29   13.08 0.06221      15
1se 0.04869    18   13.14 0.05369      10

通过coef函数可以显示自变量的回归系数,可以看到很多自变量的回归系数都是0,就意味着这些自变量被过滤掉了

> coef(cvfit, s = cvfit$lambda.1se)
30 x 1 sparse Matrix of class "dgCMatrix"1
V1   0.38108115
V2  -0.09838545
V3  -0.13898708
V4   0.10107014
V5  -0.11703684
V6  -0.39278773
V7   0.24631270
V8   0.03861551
V9   0.35114295
V10  0.04167588
V11  .
V12  .
V13  .
V14  .
V15  .
V16  .
V17  .
V18  .
V19  .
V20  .
V21  .
V22  .
V23  .
V24  .
V25  .
V26  .
V27  .
V28  .

通过交叉验证,在选择最佳λ值的同事,也确定了最佳的回归模型,通过coef提取回归系数,我们就得到了最终的回归模型。

·end·

—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。

更多精彩

  • KEGG数据库,除了pathway你还知道哪些

  • 全网最完整的circos中文教程

  • DNA甲基化数据分析专题

  • 突变检测数据分析专题

  • mRNA数据分析专题

  • lncRNA数据分析专题

  • circRNA数据分析专题

  • miRNA数据分析专题

  • 单细胞转录组数据分析专题

  • chip_seq数据分析专题

  • Hi-C数据分析专题

  • HLA数据分析专题

  • TCGA肿瘤数据分析专题

  • 基因组组装数据分析专题

  • CNV数据分析专题

  • GWAS数据分析专题

  • 机器学习专题

  • 2018年推文合集

  • 2019年推文合集

  • 2020推文合集

写在最后

转发本文至朋友圈,后台私信截图即可加入生信交流群,和小伙伴一起学习交流。

扫描下方二维码,关注我们,解锁更多精彩内容!

一个只分享干货的

生信公众号

预后建模绕不开的lasso cox回归相关推荐

  1. R 回归 虚拟变量na_R语言 | 生存分析之R包survival的单变量和多变量Cox回归

    生存分析之R包survival的单变量和多变量Cox回归续前文生存分析(Survival Analysis). 在前文初步简介了生存分析的概念,以及展示了一种生存分析模型Kaplan-Meier的使用 ...

  2. bilibili源码_Java开源商城源码推荐,从菜鸡到大神,永远绕不开的商城系统

    每个Java程序员,从懵逼菜鸡,再到懵懂菜鸟,再到小鸟,大鸟,最后到技术大神,始终绕不开商城系统,里面蕴含了大量的业务,涉及到了大量的知识点和解决方案. 今天介绍一款Java开源商城源码 xmall- ...

  3. java停车收费系统 源码开源_Java开源商城源码推荐,从菜鸡到大神,永远绕不开的商城系统

    每个Java程序员,从懵逼菜鸡,再到懵懂菜鸟,再到小鸟,大鸟,最后到技术大神,始终绕不开商城系统,里面蕴含了大量的业务,涉及到了大量的知识点和解决方案. 今天介绍一款Java开源商城源码 xmall- ...

  4. 谈到云原生, 绕不开容器化

    传送门 什么是云原生? 云原生设计理念 .NET微服务 Containers 现在谈到云原生, 绕不开"容器". 在<Cloud Native Patterns>一书中 ...

  5. 商城html源码_Java开源商城源码推荐,从菜鸡到大神,永远绕不开的商城系统

    每个Java程序员,从懵逼菜鸡,再到懵懂菜鸟,再到小鸟,大鸟,最后到技术大神,始终绕不开商城系统,里面蕴含了大量的业务,涉及到了大量的知识点和解决方案. 今天锋哥介绍一款Java开源商城源码 xmal ...

  6. Unity应用架构设计(10)——绕不开的协程和多线程(Part 1)

    阅读目录 是否需要多线程? 协程的内部原理 小结 在进入本章主题之前,我们必须要了解客户端应用程序都是单线程模型,即只有一个主线程(Main Thread),或者叫做UI线程,即所有的UI控件的创建和 ...

  7. 面试绕不开的 CAP 理论,这篇文章帮你搞定!

    点击关注公众号,实用技术文章及时了解 文章转载于:JAVA日知录   案例背景 CAP 理论是分布式系统中最核心的基础理论,虽然在面试中,面试官不会直白地问你 CAP 理论的原理,但是在面试中遇到的分 ...

  8. 成从武:其他人绕不开高德

    高德对自己在移动互联网所处的位置很自信.其创始人兼CEO成从武说,"地图数据不仅仅是高德的基础,而且是整个移动互联网的基础,其他人绕不开高德." 以IOS系统案例推算,成从武相信上 ...

  9. 绕不开的TCP之三次握手

    在面试过程中,无论是开发还是测试岗位,TCP都是一个绕不开的话题,而谈到TCP,大概率三次握手也会被提及,那应该如何回答这个问题呢?在回答这个问题之前,让我们先预热一波吧. TCP的定义 TCP协议全 ...

最新文章

  1. HTML怎么把文字分栏_PPT文字巨多!领导还不让删,怎么排版才高大上?
  2. Delphi中TVarRec做为参数的用法
  3. 【Java代码】Java版本的NGender根据中文姓名猜测其性别及男性化/女性化程度(Python版本地址+Java版本源码+基础数据)
  4. 《高性能JavaScript》第四章 算法和流程控制
  5. 使用uni-app报错this.setData is not a function
  6. HALCON示例程序measure_ball_bond.hdev电路板焊点位置测量
  7. google i/o_Google I / O 2017最有希望的突破
  8. php文本框自动补全,PHP自动补全表单的两种方法
  9. LeetCode 103. 二叉树的锯齿形层次遍历(Binary Tree Zigzag Level Order Traversal)
  10. 嵌入式Linux的QT版本,嵌入式Linux版本Qt5.4快速部署
  11. 卸载程序_App Cleaner Pro for Mac v6.10.1 程序卸载 直装版
  12. 【图像压缩】基于matlab DCT变换图像压缩【含Matlab源码 804期】
  13. Android studio配置Google play服务
  14. redis安装与配置
  15. 电气工程学计算机有用吗,我是学计算机的,因为一直喜欢电气,所以想考个注..._电气工程师_帮考网...
  16. 【知识兔课程】跨境电商骗局揭秘及应对策略整理(2021版)
  17. iptables防火墙规则
  18. ZYNQ开发之BootROM加载
  19. 需账号密码登陆的网页爬虫
  20. 「杀不掉的」僵尸(zombie)进程

热门文章

  1. 《清单革命》:让大脑处理更重要的事情
  2. 【必会】SQL 命令大全
  3. CentOS7 DM-Multipath+HUAWEI OceanStor存储多路径配置
  4. 给定一个正整数n,输出如下n*n之字形方阵
  5. AI为什么救不了“想上天”的猪?
  6. 什么是轻量应用服务器
  7. .csv是什么文件格式,什么软件可以打开?xls与csv文件是什么区别?功能和作用上有什么不同?
  8. (Animator详解一)mixamo动画导入Unity的一些配置
  9. 【点云系列】综述: Deep Learning for 3D Point Clouds: A Survey
  10. win10单机修复计算机在哪,win10如何进入高级修复选项