由于最近在做BRCA-lncRNA相关的生信课题研究,在看到相关论文中的一些模型和方法,整理一下,供自己和大家一起学习。
(1)生存分析:log-rank检验在什么情况下失效?
这一篇博客,写了关于生存分析检验方法的差别。
介绍了:1) log-rank检验 (对数秩检验) 2)Wilcoxon检验 3)Peto检验、Tarone-Ware检验
作者的总结:
如果log-rank检验有意义而Wilcoxon检验无意义,表明可能远期差异较大,早期则不一定,有可能差异不大。
如果log-rank检验无意义而Wilcoxon检验有意义,表明早期生存差别较大,远期生存差异不大。
总的来说,如果研究某种疗法对生存常期是一种状态效果,并不会随着时间变换而衰弱,就可以运用log-rank检验(对数秩检验),如果是认为这种预期效果会随着时间变化而减弱,可以考虑到加入权重N的Wilcoxon检验。
(2):DESeq2详细用法
这一篇博客,写了创建一个DESeq的对象dds,两种数据转换的方法:vst,rlog,【数据集小于30个样品可以用rlog,数据集大于30个样品用vst,因为rlog速度慢。】,这两种方法的目的:得到一个近似为同方差的值矩阵(沿均值范围具有恒定的方差)。**
(3):TCGA+biomarker——风险因子关联图
这一篇博客是关于预后分析的关联图。在我们得到了风险评分后,如何通过图像来展现出高低风险组样本的分类情况,这时可以通过风险因子关联图来展现出高低风险的差异,其中风险因子关联图包括三个部分。
这里这部分,加一点我的代码:
# 由多因素COX得到的5个基因,我们要进行风险分析,
# 来重新定义BRCA,将他们分组。
rm(list = ls())
library(survival)
library(glmnet)
library(ggplot2)
library(survminer)
setwd("D:\\AProject\\Study_code\\Code_026_Risk_model_lncRNA\\Code_026_Risk_vst_v2\\Risk")
# 读取表达数据
lncRNA_data <- read.csv("tcga_lncRNA_significance_in_immunecell_pathway.csv", row.names = 1)
lncRNA_exp <- lncRNA_data[, 1:7]
#####(1)建立多因素cox回归的数据#######
fml <- as.formula(Surv(lncRNA_data$OS.time, lncRNA_data$status)~.)
mycox <- coxph(fml, data = lncRNA_exp)
summary(mycox)
# 生存风险得分risk_level和评分risk_score
risk_score <- predict(mycox, type="risk", newdata = lncRNA_exp)
risk_level <- as.data.frame(ifelse(risk_score > median(risk_score), "High", "Low"))
colnames(risk_level) <- "risk_level"
risk_score <- as.data.frame(risk_score)
colnames(risk_score) <- "risk_score"
# 生存最后的数据
dat <- cbind(lncRNA_data, risk_score, risk_level)
write.csv(dat, "risk_score.csv")
######(2)生存分析#####
colnames(dat)
# 影响因素分析
# survival包中的Surv函数可以创建一个生存对象
# gender: 0(wumen)、1(men)
fit <- survfit(Surv(OS.time1, status1) ~ risk_level, data = dat)
#survival包中的survfit函数用Kaplan-Meier法进行生存曲线的拟合
sur <- ggsurvplot(fit,
pval = TRUE,
# conf.int = TRUE,
risk.table = TRUE, # Add risk table
risk.table.col = "strata", # Change risk table color by groups
linetype = "strata", # Change line type by groups
surv.median.line = "hv", # Specify median survival
ggtheme = theme_bw(), # Change ggplot2 theme
palette = c("#E7B800", "#2E9FDF")
)
# 存储图片
pdf("survival_sig_lncRNA_level1.pdf")#生成文件
sur
dev.off()
#####(3) 绘制风险因子关联图#####
phe <- dat[order(dat$risk_score), ]
fp_dat <- data.frame(patientid = 1:nrow(phe),
fp = phe$risk_score)
#添加风险分组,以风险评分的中位值将患者分为两组,大于中位值的 患者为高风险组,小于或等于中位值的患者为低风险组
fp_dat$riskgroup <- ifelse(fp_dat$fp>= median(fp_dat$fp),'high','low')
###第一个图
library(ggplot2)
p1 = ggplot(fp_dat,aes(x = patientid,y = fp))+ geom_point(aes(color = riskgroup))+
scale_colour_manual(values = c("red","green"))+
theme_bw()+labs(x="Patient ID(increasing risk score)",y="Risk score")+
geom_hline(yintercept=median(fp_dat$fp),colour="black", linetype="dotted",size=0.8)+
geom_vline(xintercept=sum(fp_dat$riskgroup=="low"),colour="black", linetype="dotted",size=0.8)
p1
# 生成sur_dat绘制图二
sur_dat <- data.frame(patientid = 1:nrow(risk_score),
time = phe[,'OS.time1'],
event = phe[, 'status1'])
sur_dat$event <- ifelse(sur_dat$event==0, 'alive', 'death')
sur_dat$event <- factor(sur_dat$event, levels = c("death","alive"))
#### 第二个图
p2 <- ggplot(sur_dat, aes(x=patientid,y=time)) + geom_point(aes(col=event)) + theme_bw()+
scale_colour_manual(values = c("red","green"))+
labs(x = "Patient ID(increasing risk score)", y = "Survival time(year)")+
geom_vline(xintercept=sum(fp_dat$riskgroup=="low"), colour="black", linetype="dotted",size=0.8)
p2
#### 第三个图
library(pheatmap)
heatmap.data <- phe[, 1:7] # 基因数据框
heatmap.data[is.na(heatmap.data)] <- 0
heatmap.data <- as.matrix(heatmap.data)
heatmap.data.scale <- scale(heatmap.data)
heatmap.data.scale.new <- ifelse(abs(heatmap.data.scale) > 1, sign(heatmap.data.scale)*1, heatmap.data.scale)
# 绘制热图
library(ComplexHeatmap)
library(qdapTools) #need df2matrix function
library(RColorBrewer) #colorRamp2
library(circlize) #colorRamp2
library(tidyverse) #select
# 转置,得到行为基因,列为样本的矩阵
mat = t(heatmap.data.scale.new)
dim(mat)
# 在热图上添加组标签
Groups <- as.character(phe$risk_level)
# 添加标签
annotation_col = HeatmapAnnotation(Groups = Groups,
col = list(
Groups = c("Low" = "#556B2F", "High" = "royalblue")
),
annotation_name_side = "right", # 设置注释的名字在右边
na_col = "#808080", #设置空白值的颜色为灰色
simple_anno_size = unit(5, "mm") # 设置行宽度
)
p3 = Heatmap(mat,
col = colorRamp2(c(-1, 0, 1),
c("CornflowerBlue", "#D3D3D3", "FireBrick")),
column_title_gp = gpar(fontsize = 8, fontface = "bold"),
top_annotation = annotation_col,
# column_split = 2,
# row_split = 2,
# row_labels = FALSE,
# row_names_gp = gpar(fontsize = 20), # 设置行字体的大小
# column_title = "Kmeans groups with heatmap", # 标签名称
cluster_columns = FALSE, # 列不进行聚类
# cluster_columns = hclust(dist(t(mat1))), #列是样本,样本需要聚类
# clustering_distance_columns = "euclidean", #列是样本,样本需要聚类
# clustering_method_columns = "complete",
cluster_rows = hclust(dist(mat)),
clustering_distance_rows = "euclidean", #行是基因,基因需要聚类
clustering_method_rows = "complete",
show_row_dend = FALSE, #是否显示树状图
show_column_dend = FALSE,
show_row_names = T,
show_column_names = F,
# column_names_gp = gpar(fontsize = 1),
# row_names_gp = gpar(fontsize = 1),
heatmap_legend_param = list(title = "Legend",
title_position ="topcenter",
title_gp = gpar(fontsize = 10, fontface = "bold"),
labels_gp = gpar(fontsize = 10))
)
p3
### 拼图实现三图联动
library(ggplotify)
plots = list(A = p1,B = p2,C = as.ggplot(as.grob(p3)))
library(gridExtra)
lay1 = rbind(c(rep(1,7)),c(rep(2,7)),c(rep(3,7))) #布局矩阵
riskdistru <- grid.arrange(grobs = plots, layout_matrix = lay1, heigths = c(2,2,3),weights=c(10,10,10))
ggsave("Risk factor association diagram.pdf", plot = riskdistru, dpi=600, width = 6.73, height = 6.7)
# ggsave("风险因子关联图.tiff", plot = riskdistru, dpi=600, width = 6.73,height = 6.7)
####(4) ROC曲线图#####
library(timeROC)
library(survival)
ROC <- timeROC(T= dat$OS.time/12, delta = dat$status,
marker=dat$risk_score,
cause=1,
weighting="marginal",
times=c(3,5,2),ROC=TRUE)
# 显示全部细胞和基质占比
pdf(file = "ROC.pdf",width=5,height=5, useDingbats = FALSE)
plot(ROC,time=3,col="blue", title=FALSE, lwd=3)
plot(ROC,time=5,col="red", add=TRUE, title=FALSE,lwd=3)
legend("bottomright",title = 'AUC',
c(paste("3-year: ",round(ROC$AUC[1],1)),
paste("5-year: ",round(ROC$AUC[2],1))),
col=c("blue","red"),lwd=2)
dev.off()
# ggsave("TCGA生存+timeROC.pdf", plot = ROC,dpi=600, width = 10, height = 4)
(4):ROC、AUC、混淆矩阵
特别是看一下第四个博客,博客中有详细讲解了ROC曲线中点是如何绘制出来的。
可以看到,ROC中的点是从原点(0,0)移动到(1,1),依据真正类率(true positive rate ,TPR)和假正类率(true positive rate ,FPR)的值作为坐标值,同时,在此之前是按照得分排名的,个人认为:每一个Score下的矩阵表示形式为一个:混淆矩阵,通过计算TPR,FPR来最后得到该概率下的点坐标。
最理想的状况下是先上移动到(0,1),再右移动到(1,1);理解就是,我们将样本分成的高低风险组与原有的分组之间是完全匹配的。
图片来自博主:chuanbanjun
文章链接: 代谢相关的大肠癌分子分类.
链接: 非负矩阵分解NMF.
可以通过非负矩阵的分解将原始V矩阵(n×m)分解成W(n×r)与矩阵H(r×m)的乘积,矩阵H也叫系数矩阵,通常系数矩阵能够代替原始矩阵,实现降维。【其中矩阵V的每一个列向量为矩阵W所有列向量的线性组合的值,系数为矩阵H 的某一列】
如何使用Cytoscape绘制出ceRNA网络图
其他学习链接:
(1)ceRNA预测工具 —— GDCRNATools
http://www.360doc.com/content/18/0119/10/45852776_723289997.shtml
(2) Cytoscape史上最全攻略
http://www.360doc.com/content/19/0409/20/49059453_827533578.shtml
官网:http://starbase.sysu.edu.cn/
(1)https://www.bilibili.com/video/BV1qh411o7UG?from=search&seid=2485808999820599866
官网:https://string-db.org/
(1)https://www.biomart.cn/experiment/793/2713465.html
(2)https://www.omicsclass.com/article/1126
(3)http://www.360doc.com/content/19/0419/13/52645714_829884871.shtml
什么是 DNA 甲基化?
DNA甲基化是在DNA甲基化转移酶(Dnmt)的作用下将甲基选择性地添加到胞嘧啶上形成5-胞嘧啶的过程,刚被发现时被定义为第五种碱基,实际上它是一种重要的表观遗传学标记,在调控基因表达、维持染色质结构、基因印记、X染色体失活以及胚胎发育等生物学过程中发挥着重大的作用。
甲基化与肿瘤:
这些因素是导致肿瘤发展、转移、恶化最终导致患者死亡的重要原因。
(1) 甲基化的CpG岛二核苷酸中的胞嘧啶以较高的频率脱氨基变成胸腺嘧啶,造成基因突变;
(2) 抑癌基因和DNA修复基因由于超甲基化而沉默;
(3) 癌基因甲基化水平降低而活化;
(4) 基因组总体甲基化水平降低使转座子、重复序列活化导致染色体稳定性下降。
甲基化与肿瘤侵袭和转移:
利用DNA甲基转移酶(methyltransferase)抑制剂5-氮杂胞苷(5-aza-cytidine)处理MCF-7乳腺癌细胞,使其维持低甲基化状态,结果显示与EMT过程相关的促细胞侵袭基因(pro-invasive EMT-associated gene)表达上调,细胞的侵袭能力和转移能力增强。
甲基化与肿瘤治疗:
肿瘤预防和治疗的一个手段是通过去甲基化恢复某些关键的抑癌基因或DNA修复基因的活性,目前研究最多的是DNMTs抑制剂,它通过抑制DNMT活性以逆转异常的DNA甲基化。