生存分析指根据试验或调查得到的数据对生物或人的生存时间进行分析和推断,研究生存时间和结局与众多影响因素间关系及其程度大小的方法,也称生存率分析或存活率分析。常用于肿瘤等疾病的标志物筛选、疗效及预后的考核。

简单地说,比较两组或多组人群随着时间的延续,存活个体的比例变化趋势。活着的个体越少的组危险性越大,对应的基因对疾病影响越大,对应的药物治疗效果越差。

生存分析适合于处理时间-事件数据,如下

生存时间数据有两种类型:

  • 完全数据 (complete data)指被观测对象从观察起点到出现终点事件所经历的时间; 一般用状态值1或TRUE表示。
  • 截尾数据 (consored data)或删失数据,指在出现终点事件前,被观测对象的观测过程终止了。由于被观测对象所提供的信息是不完全的,只知道他们的生存事件超过了截尾时间。截尾主要由于失访、退出和终止产生。一般用状态值0或FALSE表示。
  • TCGA中的临床数据标记也符合这个规律,在下面软件运行时也可修改状态值的含义, 但一般遵循这个规律。

生存概率 (survival probability)指某段时间开始时存活的个体至该时间结束时仍然存活的可能性大小。

生存概率=某人群活过某段时间例数/该人群同时间段期初观察例数。

生存率 (Survival rate),用S(t)表示,指经历t个单位时间后仍存活的概率,若无删失数据,则为活过了t时刻仍然存活的例数/观察开始的总例数。如果有删失数据,分母则需要按时段进行校正。

生存分析一个常用的方法是寿命表法。

寿命表是描述一段时间内生存状况、终点事件和生存概率的表格,需计算累积生存概率即每一步生存概率的乘积 (也可能是原始生存概率),可完成对病例随访资料在任意指定时点的生存状况评价。

R做生存分析

R中做生存分析需要用到包survivalsurvminer。输入数据至少两列,存活时间生存状态,也就是测试数据中的Days.survialvital_status列。如果需要比较不同组之间的差异,也需要提供个体的分组信息,如测试数据中的PAM50列。对应TCGA的数据,一般根据某个基因的表达量或突变有无对个体进行分组。

读入数据

  1. library(survival)
  2. BRCA <- read.table('BRCA.tsv', sep="\t", header=T)
  3. head(BRCA)
  • 1
  • 2
  • 3
  1. ID SampleType PAM50Call_RNAseq Days.survival pathologic_stage
  2. 1 TCGA-E9-A2JT-01 Tumor_type LumA 288 stage iia
  3. 2 TCGA-BH-A0W4-01 Tumor_type LumA 759 stage iia
  4. 3 TCGA-BH-A0B5-01 Tumor_type LumA 2136 stage iiia
  5. 4 TCGA-AC-A3TM-01 Tumor_type Unknown 762 stage iiia
  6. 5 TCGA-E9-A5FL-01 Tumor_type Unknown 24 stage iib
  7. 6 TCGA-AC-A3TN-01 Tumor_type Unknown 456 stage iib
  8. vital_status
  9. 1 0
  10. 2 0
  11. 3 0
  12. 4 0
  13. 5 0
  14. 6 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

简单地看下每一列都有什么内容,方便对数据整体有个了解,比如有无特殊值。

  1. summary(BRCA)
  • 1
  1. ID SampleType PAM50Call_RNAseq Days.survival
  2. TCGA-3C-AAAU-01: 1 Tumor_type:1090 Basal :138 Min. : 0.0
  3. TCGA-3C-AALI-01: 1 Her2 : 65 1st Qu.: 450.2
  4. TCGA-3C-AALJ-01: 1 LumA :415 Median : 848.0
  5. TCGA-3C-AALK-01: 1 LumB :194 Mean :1247.0
  6. TCGA-4H-AAAK-01: 1 Normal : 24 3rd Qu.:1682.8
  7. TCGA-5L-AAT0-01: 1 Unknown:254 Max. :8605.0
  8. (Other) :1084
  9. pathologic_stage vital_status
  10. stage iia :359 Min. :0.0000
  11. stage iib :259 1st Qu.:0.0000
  12. stage iiia:156 Median :0.0000
  13. stage i : 90 Mean :0.1394
  14. stage ia : 85 3rd Qu.:0.0000
  15. stage iiic: 67 Max. :1.0000
  16. (Other) : 74
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

计算寿命表

  1. # Days.survival:跟踪到的存活时间
  2. # vital_status: 跟踪到的存活状态
  3. # ~1表示不进行分组
  4. fit <- survfit(Surv(Days.survival, vital_status)~1, data=BRCA)
  5. # 获得的survial列就是生存率
  6. summary(fit)
  7. Call: survfit(formula = Surv(Days.survival, vital_status) ~ 1, data = BRCA)
  8. time n.risk n.event survival std.err lower 95% CI upper 95% CI
  9. 116 1021 1 0.999 0.000979 0.997 1.000
  10. 158 1017 1 0.998 0.001386 0.995 1.000
  11. 160 1016 1 0.997 0.001697 0.994 1.000
  12. 172 1010 1 0.996 0.001962 0.992 1.000
  13. 174 1008 1 0.995 0.002195 0.991 0.999
  14. 197 1003 1 0.994 0.002406 0.989 0.999
  15. 224 993 1 0.993 0.002604 0.988 0.998
  16. 227 990 1 0.992 0.002788 0.987 0.998
  17. 239 987 1 0.991 0.002961 0.985 0.997
  18. 255 981 1 0.990 0.003125 0.984 0.996
  19. 266 978 1 0.989 0.003282 0.983 0.996
  20. 295 965 1 0.988 0.003435 0.981 0.995
  21. 302 962 1 0.987 0.003581 0.980 0.994
  22. 304 958 1 0.986 0.003723 0.979 0.993
  23. 320 948 1 0.985 0.003862 0.977 0.993
  24. 322 946 1 0.984 0.003995 0.976 0.992
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

绘制生存曲线,横轴表示生存时间,纵轴表示生存概率,为一条梯形下降的曲线。下降幅度越大,表示生存率越低或生存时间越短。

  1. library(survminer)
  2. # conf.int:是否显示置信区间
  3. # risk.table: 对应时间存活个体总结表格
  4. ggsurvplot(fit, conf.int=T,risk.table=T)
  • 1
  • 2
  • 3
  • 4

PAM50是通过50个基因的表达量把乳腺癌分为四种类型 (Luminal A, Luminal B, HER2-enriched, and Basal-like)作为预后的标志。根据PAM50属性对病人进行分组,评估比较两组之间生存率的差别。

  1. # 这三步不是必须的,只是为了方便,选择其中的4个确定了的分组进行分析
  2. # 同时为了简化图例,给列重命名一下,使得列名不那么长
  3. BRCA_PAM50 <- BRCA[grepl("Basal|Her2|LumA|LumB",BRCA$PAM50Call_RNAseq),]
  4. BRCA_PAM50 <- droplevels(BRCA_PAM50)
  5. colnames(BRCA_PAM50)[colnames(BRCA_PAM50)=="PAM50Call_RNAseq"] <- 'PAM50'
  6. # 按PAM50分组
  7. fit <- survfit(Surv(Days.survival, vital_status)~PAM50, data=BRCA_PAM50)
  8. # 绘制曲线
  9. ggsurvplot(fit, conf.int=F,risk.table=T, risk.table.col="strata", pval=T)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

简化Stage信息,先只查看大的阶段

  1. BRCA_PAM50$pathologic_stage <- gsub('(i+v*).*', "\\1", BRCA_PAM50$pathologic_stage)
  2. BRCA_PAM50$pathologic_stage <- as.factor(BRCA_PAM50$pathologic_stage)
  3. colnames(BRCA_PAM50)[colnames(BRCA_PAM50)=="pathologic_stage"] <- 'PS'
  4. fit <- survfit(Surv(Days.survival, vital_status)~PS, data=BRCA_PAM50)
  5. # 绘制曲线
  6. ggsurvplot(fit, conf.int=F,risk.table=T, risk.table.col="strata", pval=T)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

参考资料

R语言学习 - 非参数法生存分析--转载的更多相关文章

  1. R语言学习笔记:分析学生的考试成绩

    孩子上初中时拿到过全年级一次考试所有科目的考试成绩表,正好可以用于R语言的统计分析学习.为了不泄漏孩子的姓名,就用学号代替了,感兴趣可以下载测试数据进行练习. num class chn math e ...

  2. R语言︱词典型情感分析文本操作技巧汇总(打标签、词典与数据匹配等)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:情感分析中对文本处理的数据的小技巧要 ...

  3. R语言学习 第四篇:函数和流程控制

    变量用于临时存储数据,而函数用于操作数据,实现代码的重复使用.在R中,函数只是另一种数据类型的变量,可以被分配,操作,甚至把函数作为参数传递给其他函数.分支控制和循环控制,和通用编程语言的风格很相似, ...

  4. R语言学习-(金融数据获取和简单的分析)

    利用R语言中的quantmod包和fBasics对股票数据的获取和简要的分析, 通过获取的数据进行典型图像绘制,使用JB正态性检验来检验是否服从于正态分布. 前提概要:quantmod 包默认是访问 ...

  5. R语言学习路线和常用数据挖掘包(转)

    对于初学R语言的人,最常见的方式是:遇到不会的地方,就跑到论坛上吼一嗓子,然后欣然or悲伤的离去,一直到遇到下一个问题再回来.当然,这不是最好的学习方式,最好的方式是——看书.目前,市面上介绍R语言的 ...

  6. R语言学习路线图-转帖

    本文分为6个部分,分别介绍初级入门,高级入门,绘图与可视化,计量经济学,时间序列分析,金融等. 1.初级入门 <An Introduction to R>,这是官方的入门小册子.其有中文版 ...

  7. R语言学习 第一篇:变量和向量

    R是向量化的语言,最突出的特点是对向量的运算不需要显式编写循环语句,它会自动地应用于向量的每一个元素.对象是R中存储数据的数据结构,存储在内存中,通过名称或符号访问.对象的名称由大小写字母.数字0-9 ...

  8. R语言学习笔记:基础知识

    1.数据分析金字塔 2.[文件]-[改变工作目录] 3.[程序包]-[设定CRAN镜像] [程序包]-[安装程序包] 4.向量 c() 例:x=c(2,5,8,3,5,9) 例:x=c(1:100) ...

  9. R语言学习(一)前言

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/49768161 R是一个有着统计分析功能 ...

随机推荐

  1. java-web的mybatis的学习

    idea开发必须是把Mapper文件与配置文件放到Resources标记的classpath目录下,eclips好像放到哪都行指定好路径就可以了, maven里面做好配置resources的路径,不然 ...

  2. linux--- sort,uniq,cut,wc命令

    1.sort [-fbMnrtuk] [file or stdin] -f :忽略大小写的差异,例如 A 与 a 视为编码相同: -b :忽略最前面的空格符部分: -M :以月份的名字来排序,例如 J ...

  3. Django框架----Object Relational Mapping(ORM)

    Django中的ORM Django项目使用MySQL数据库 1. 在Django项目的settings.py文件中,配置数据库连接信息: DATABASES = { "default&qu ...

  4. 在centos上搭建JavaWeb环境(jdk+mysql+tomcat)

    1.安装OpenJDK yum list java* -openjdk* -y java -version 2.安装Tomcat cd /usr/local wget https://mc.qclou ...

  5. Qt发布可执行程序

    在Qt Creator下用release跑一遍程序,生成相应的EXE文件.   在Qt Creator下编译好的release下的 youProgramName.exe 拷贝到一个文件夹下面:   在 ...

  6. 基于SecureCRT的测试环境的克隆的linux/vi相关命令

    #chmod -R 777*; 参数-R:对当前目录下的所有档案与子目录进行相同的权限 变更(即以递归的方式逐个变更). *:通配符,指的是当前目录下的所有文件及目录. 所有文件及其子目录的文件拥有者 ...

  7. Mybatis的Mapper接口方法不能重载

    今天给项目的数据字典查询添加通用方法,发现里边已经有了一个查询所有数据字典的方法 List<Dict> selectDictList(); 但我想设置的方法是根据数据字典的code查询出所 ...

  8. oracle exadata一体机虚拟机

    14年参加partner培训的时候,拿了份oracle exadata一体机虚拟机,有兴趣的可以试试,不过比较大,压缩后10GB,解压后50GB,启动后直接可用,2RAC节点+1存储节点,环境最好内存 ...

  9. 【题解】Luogu P2787 语文1(chin1)- 理理思维

    原题传送门:P2787 语文1(chin1)- 理理思维 前置芝士:珂朵莉树 窝博客里对珂朵莉树的介绍 没什么好说的自己看看吧 珂朵莉树跑的飞快,但还是没有memset0小姐姐跑得快 操作1:暴力统计 ...

  10. eclipse在注释时候字体变成繁体字

    输入法和java中的快捷键冲突了,按下ctrl+shift+F就切换回去了