TCGA_生存分析

article/2025/10/26 20:51:03
library("survival")
library("survminer")

生存分析需要三个 vector,在一个dataframe中

  1. 生存时间,以mouths或者days作单位;
  2. 结局,"Dead"或者"Alive","Alive"是截尾数据,"Dead"是完全数据;
  3. 分组信息。

Age_old vs young

一、读入数据

data_cl <- read.csv(file = "Results/测序or临床数据下载/data_cl.csv", header=T, row.names=2,check.names=FALSE)
t_needed=c("vital_status","days_to_last_follow_up","days_to_death","age_at_index","tumor_grade")
meta=data_cl[,t_needed] #筛选需要的临床信息
meta=meta[meta$vital_status %in% c('Alive','Dead'),] #排除结局为"Not Reported"的Sample

View(data_cl)

data_cl$vital_status 中有两个为 Not Reported,需要排除

二、整理数据

1 计算生存时间

meta$days_to_last_follow_up[is.na(meta$days_to_last_follow_up)] = 0 #is.na()用于返回是否为缺失值
meta$days_to_death[is.na(meta$days_to_death)] = 0   
meta$days<-ifelse(meta$vital_status=='Alive',meta$days_to_last_follow_up,meta$days_to_death)meta$mouth=round(meta$days/30,2) #以month为单位,保留两位小数

2 添加age_group列(分组数据)

meta$age_group = ifelse(meta$age_at_index>median(meta$age_at_index),'old','young')

 三、分析

Surv() 函数输出带有截尾信息的生存时间数据

survfit() 函数根据生存时间数据分组信息,并基于”K-M法“输出拟合数据

survData = Surv(time = meta$mouth,                 #生存时间数据event = meta$vital_status=='Dead') #判断结局,完全数据/截尾数据KMfit <- survfit(survData ~ meta$age_group)  # ~ 后是指定的分组

head(survData)        有"+"为截尾数据

[1]  13.20+ 116.73   73.27+  50.57+  15.43+  23.67

survData[1:10,1:2]        survData有2个列维度,"status==0"为截尾数据

         time status
 [1,]  13.20      0
 [2,] 116.73      1
 [3,]  73.27      0
 [4,]  50.57      0
 [5,]  15.43      0
 [6,]  23.67      0
 [7,]  64.90      0
 [8,]  77.47      0
 [9,]  87.60      0
[10,]   3.23      0

四、拟合生存曲线

ggsurvplot()参数详细介绍

ggsurvplot(KMfit,                     #拟合对象data = meta,               #变量数据来源pval = TRUE,               #P值surv.median.line = "hv",   #中位生存时间线risk.table = TRUE,         #风险表xlab = "Follow up time(m)",  #x轴标签break.x.by = 10,          #x轴刻度间距#legend = c(0.8,0.75),     #图例位置#legend.title = "",        #图例标题#legend.labs = c("old", "young"),  #图例分组标签) 

 Gene Expression_high vs low

一、读入数据(临床数据+表达数据)

meta 中留下有结局的Sample;

exp 中合并重复的列名(一个Sample可能有多个组织样本,这里采用取平均的方式去重)

data_cl <- read.csv(file = "Results/测序or临床数据下载/data_cl.csv", header=T, row.names=2,check.names=FALSE)
t_needed=c("vital_status","days_to_last_follow_up","days_to_death","age_at_index","tumor_grade")
meta=data_cl[,t_needed] #筛选需要的临床信息
meta=meta[meta$vital_status %in% c('Alive','Dead'),] #排除结局为"Not Reported"的Sampleexp <- read.csv(file = "Results/测序or临床数据下载/dataFilt.csv", header=T, row.names=1,check.names=FALSE)
colnames(exp)=str_sub(colnames(exp),1,12)
colmeans=function(x){exp_m=as.matrix(x)exp_t=t(exp_m)exp_t=limma::avereps(exp_t)t(exp_t)
}
exp=colmeans(exp) #取平均去除重复列名的Sample

View(data_cl)

data_cl$vital_status 中有两个为 Not Reported,需要排除

二、整理数据

1 计算生存时间

meta$days_to_last_follow_up[is.na(meta$days_to_last_follow_up)] = 0 #is.na()用于返回是否为缺失值
meta$days_to_death[is.na(meta$days_to_death)] = 0   
meta$days<-ifelse(meta$vital_status=='Alive',meta$days_to_last_follow_up,meta$days_to_death)meta$mouth=round(meta$days/30,2) #以month为单位,保留两位小数

2 筛选meta中有表达信息的Sample

t_index = rownames(meta)[rownames(meta) %in% colnames(exp)]
meta=meta[t_index,]

三、分析,拟合生存曲线

1 确定基因和高低表达

Gene = "CHAC1"
meta$Expression_level = ifelse(exp[Gene,rownames(meta)]>median(exp[Gene,]),'high','low')

2 作图 

survData = Surv(time=meta$mouth, #月份数据event=meta$vital_status=='Dead') #判断哪些是截尾数据
KMfit <- survfit(survData ~ meta$Expression_level)  #~后指定分组ggsurvplot(KMfit, # 创建的拟合对象data = meta,  # 指定变量数据来源pval = TRUE, # 添加P值surv.median.line = "hv",  # 添加中位生存时间线risk.table = TRUE, # 添加风险表ncensor.plot = FALSE, #??图xlab = "Follow up time(m)", # 指定x轴标签break.x.by = 10, # 设置x轴刻度间距palette = c("#E7B800", "#2E9FDF"),#legend = c(0.8,0.75), # 指定图例位置legend.title = Gene, # 设置图例标题#legend.labs = c("old", "young"), # 指定图例分组标签
)  


http://chatgpt.dhexx.cn/article/qU6PptP4.shtml

相关文章

浅谈生存分析

为什么要用生存分析&#xff1f; 相信大家对于生存分析这一概念已有相当多的了解&#xff0c;但在进行相关操作前&#xff0c;是否思考过为何要使用生存分析&#xff1f; 小编将通过一个事例进行说明&#xff1a;考虑研究对象为某一患病群体&#xff0c;将该群体分为两组&…

R数据分析:生存分析与有竞争事件的生存分析的做法和解释

今天被粉丝发的文章给难住了&#xff0c;又偷偷去学习了一下竞争风险模型&#xff0c;想起之前写的关于竞争风险模型的做法&#xff0c;真的都是皮毛哟&#xff0c;大家见笑了。想着就顺便把所有的生存分析的知识和R语言的做法和论文报告方法都给大家梳理一遍。 什么时候用生存…

php 生存分析,HPA数据库08.做生存分析

生信论文的套路 ONCOMINE从全景、亚型两个维度做表达差异分析&#xff1b; 临床标本从蛋白水平确认(或HPA数据库)&#xff0c;很重要&#xff1b; Kaplan-Meier Plotter从临床意义的角度阐明其重要性&#xff1b; cBio-portal数据库做基因组学的分析(机制一)&#xff1b; STRIN…

生存分析(2)

接上篇文章生存分析&#xff08;1&#xff09;&#xff0c;本文将进一步介绍生存分析中有关生存率的具体算法及其应用 Kaplan-Meier法&#xff08;K-M法、乘积极限法&#xff09; Kaplan-Meier法由Kaplan和Meier于1958年提出&#xff0c;直接用概率乘法定理估计生存率&#x…

生物统计分析之生存分析

简介 生存分析(Survival analysis)是指根据试验或调查得到的数据对生物或人的生存时间进行分析和推断&#xff0c;研究生存时间和结局与众多影响因素间关系及其程度大小的方法&#xff0c;也称生存率分析或存活率分析。临床医学数据生存分析是将临床医学中事件的现象与结果&am…

生存分析研究

生存分析 生存分析基础知识生存分析生存数据生存函数1.描述性 生存分析方法生存分析统计方法非参数方法半参数方法参数方法 生存分析机器学习模型 生存分析研究的内容1.描述生存过程2.比较生存过程3.分析危险因素4.建立数学模型 研究思路1.数据2.模型设计3.实验部分&#xff08…

生存分析

1 KM法计算生存率——非参数模型2 log-rank秩检验比较不同组的生存率2.1 输入数据2.2 建立假设2.3 log-rank秩精确性检验2.4 可视化 1 KM法计算生存率——非参数模型 乘积极限法适用于离散数据&#xff0c;它用于建立时刻 t t t 上的生存函数&#xff0c;根据 t t t 时刻之前…

8.常用统计分析方法——生存分析

目录 生存分析基本概念 生存率估计 1. 乘积极限法 2. 寿命表法 3. 生存曲线 生存曲线比较 COX比例风险回归模型 1. 建立COX回归模型 2. 比例风险假定的检验 3. 生存预测 生存分析基本概念 logistic回归中因变量是终点事件发生与否&#xff0c;而生存分析则关注的是终…

生存分析(1)

一、基本概念和名词解释 1.生存分析&#xff08;survival analysis&#xff09; 是研究生存现象和响应时间数据及其统计规律的一门学科。 是将事件的结果&#xff08;终点事件&#xff09;和出现这一结果所经历的时间结合起来分析的一种统计分析方法。 生存分析与其他多因素…

什么是生存分析(survival analysis)?

什么是生存分析(survival analysis)? 用来研究生存时间的分布规律以及生存时间和相关因索之间关系的一种统计分析方法 基本概念 失效事件(Failure Event):常被简称为事件,研究者规定的终点结局,医学研究中可以是患者死亡,也可以是疾病的发生、某种治疗的反应、疾病的…

生存分析原理简明教程 单因素生存分析 Kaplan-Meier、LogRank 只能针对单一的变量进行 多因素cox回归分析

一、生存分析 狭义上来说&#xff0c;生存分析用来分析病人的生存和死亡情况。广义上讲的是事件是否发生。在这里就用是否死亡来代替。一般来说&#xff0c;生存的数据一般有两个变量&#xff0c;一个事件是否发生&#xff0c;病人是否死亡&#xff0c;死亡为1&#xff0c;未死…

IRIS 2021 技术文档 First Look 25 -- 数据库加密

本文档向您介绍 InterSystems IRIS数据平台如何处理数据库加密&#xff0c;这是所有企业安全战略的重要组成部分。 本文档介绍了数据库加密的情况&#xff0c;并引导您完成一些与创建加密数据库有关的初始任务。一旦您完成了本指南&#xff0c;您将创建一个密钥文件&#xff0c…

开始使用了

开始了 今天开始用,请大家指教 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown…

Oracle LiveLabs实验:DB Security - Key Vault

概述 此实验关于Oracle Key Vault。 此实验申请地址在这里&#xff0c;时间为55分钟。 实验帮助在这里。 实验生成需要15分钟左右&#xff0c;最终会生成2个虚机&#xff0c;以下为我的专属配置&#xff1a; 129.146.74.138 DBSEC-LAB &#xff08;数据库主机&#xff09;…

idea 启动项目找不到程序包,提示程序包不存在

我是一个父子工程项目,项目在编译,build,rebuild的时候都没用报错,但用idea启动的时候就报错 error:找不到该程序包.或者类… 在网上找了很多方法都没有解决:reimport maven ,rebuild 都不行 .maven实际是完整的,本地也有这个jar包. 现在我在网上找了几种解决方法: 1.是因为id…

docker-compose vmwkmip

vSphere 6.5 中引入了许多 vSphere 安全增强功能,包括备受期待的虚拟机加密功能。为了能够使用新的虚拟机加密功能,您需要先设置一个 密钥管理互操作性协议 (KMIP)服务器(如果您还没有)并将其与您的 vCenter Server 相关联。有很多 3rd 方供应商提供与新的 VM 加密功能互操…

运维实战:Xtrabackup备份与还原

目录 运维实战&#xff1a;percona-xtrabackup备份与还原 一、工作原理 二、版本区别 三、Xtrabckup特点及限制 3.1 特点 3.2 限制 四、xtrabckup安装&#xff08;mariadb5.5 xtrabckup 2.4&#xff09; 4.1 rpm安装xtrabackup 4.2 xtrabackup的rpm包含哪些内容 4.2…

FileNotFoundException: jdcbc.properties (系统找不到指定的文件) 该问题的解决方法

一般遇到这种问题都是我们将properties文件创建在模块下面了, 这时候,由于默认访问路径在项目下面, 所以此时我们应该加上当前模块的路径, 即可解决这个问题

pykmip测试

开源路径:https://github.com/OpenKMIP 创建key并加解密 import ssl from kmip.pie.client import ProxyKmipClient, enums from kmip.pie import objectsclient ProxyKmipClient(hostname127.0.0.1,port5696,cert/home/nxy/PyKMIP/bin/client_cert.pem,key/home/nxy/PyKMIP…

开始使用KMIP4J

开始使用KMIP4J 密钥管理互操作协议&#xff08;KMIP&#xff09;的开源实现 KMIP定义了密钥生命周期管理系统&#xff08;KLMS&#xff09;和其客户之间的沟通。一些公司已经使用专有的KMIP实现&#xff0c;这些KMIP实现使用不同的编程语言&#xff0c;但是到现在为止&#xf…