前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RNA-seq入门实战(四):差异分析前的准备——数据检查

RNA-seq入门实战(四):差异分析前的准备——数据检查

作者头像
生信技能树
发布2022-07-26 10:09:39
2.2K1
发布2022-07-26 10:09:39
举报
文章被收录于专栏:生信技能树

连续两次求贤令:曾经我给你带来了十万用户,但现在祝你倒闭,以及 生信技能树知识整理实习生招募,让我走大运结识了几位优秀小伙伴!大家开始根据我的ngs组学视频进行一系列公共数据集分析实战,其中几个小伙伴让我非常惊喜,不需要怎么沟通和指导,就默默的完成了一个实战!

他前面的分享是:

下面是他对我们b站转录组视频课程的详细笔记

本节概览:

  1. 数据预处理, 进行样本间具有可比性
  2. boxplot查看样本的基因整体表达情况
  3. 查看不同分组的聚类情况:样本hclust 图、距离热图、PCA图、差异基因热图、相关性热图

承接上节 RNA-seq入门实战(三):在R里面整理表达量counts矩阵RNA-seq入门实战(二):上游数据的比对计数——Hisat2+ featureCounts 与 Salmon

在进行差异分析前需要进行数据检查,保证我们的下游分析是有意义的。

以下展示了样本hclust 图、距离热图、PCA图、前500差异性大的基因热图、相关性热图(选取了500高表达基因,防止低表达基因造成的干扰),确定我们不同样本间确实是有差异的。这些图并不是全都是必须的,它们全都是为了说明一个问题:我们的不同分组间确实存在差异。

代码语言:javascript
复制
rm(list = ls())  
options(stringsAsFactors = F)
library(FactoMineR)
library(factoextra)  
library(tidyverse) # ggplot2 stringer dplyr tidyr readr purrr  tibble forcats
library(pheatmap)
library(DESeq2)
library(RColorBrewer)

#### 载入数据 设置目录
setwd("C:/Users/Lenovo/Desktop/test")
load(file = '1.counts.Rdata')
dir.create("2.check")
setwd("2.check")

#### 数据预处理  # (任选以下一种作为dat即可,主要是进行样本间归一化,使得样本具有可比性)
#dat <- as.data.frame(log2(edgeR::cpm(counts)+1))  #简单归一化 CPM:Counts per million
dat <- log2(tpm+1)
#DESeq2_normalize   rld 
if (F) { 
  dds <- DESeqDataSetFromMatrix(countData = counts,
                                colData = gl,
                                design = ~ group_list)
  rld <- rlog(dds, blind=FALSE)
  write.table(assay(rld),  file="Deseq2_rld.txt", sep="\t", quote=F, col.names=NA)
  dat <- as.data.frame(assay(rld))     
}

###boxplot 查看样本的基因整体表达情况
boxplot(dat,col=color, ylab="dat", main=" normalized data ",
        outline = F, notch = F)
dev.off()

###################### hclust and Heatmap of the sample-to-sample distances ###########################
sampleDists <- dist(t(dat))   #dist默认计算矩阵行与行的距离, 因此需要转置
sampleDistMatrix <- as.matrix(sampleDists)  
colors <- colorRampPalette( rev(brewer.pal(9, "Blues")) )(255)  #选取热图的颜色
p0 <- pheatmap::pheatmap(sampleDistMatrix,
                         fontsize=7,
                         clustering_distance_rows=sampleDists,
                         clustering_distance_cols=sampleDists,
                         angle_col=45,
                         col=colors)
ggsave(p0,filename = 'check_dist.pdf',width = 7.5,height =6)
dev.off()

pdf("check_hclust.pdf")
plot(hclust(sampleDists))
dev.off()

################################# PCA检测 #####################################
#PCA查看实验和对照组情况
dat.pca <- PCA(t(dat) , graph = F) 
pca <- fviz_pca_ind(dat.pca,
                    title = "Principal Component Analysis",
                    legend.title = "Groups",
                    geom.ind = c("point", "text"), 
                    pointsize = 1.5,
                    labelsize = 4,
                    col.ind = group_list, # 分组上色
                    axes.linetype=NA,  # remove axeslines
                    mean.point=F#去除分组中心点
                    ) + 
  coord_fixed(ratio = 1)+  #坐标轴的纵横比
  xlab(paste0("PC1 (",round(percentVar[1,'variance.percent'],1),"%)")) +
  ylab(paste0("PC2 (",round(percentVar[2,'variance.percent'],1),"%)"))
#若用 rld 数据,还可使用DESeq2自带函数 
#pca <- plotPCA(rld, ntop = 500, intgroup=c("group_list"))
ggsave(pca, filename = 'check_PCA.pdf',width = 7.5,height =6)
dev.off()

####################### heatmap检测——取500差异大的基因 ##########################################
cg <- names(tail(sort(apply(dat,1,sd)),500)) #取每一行的方差,从小到大排序,取最大的500个
p1 <- pheatmap::pheatmap(n,show_colnames =T,show_rownames = F,
                         fontsize=7,
                         legend_breaks = -3:3,
                         #scale = "row",
                         angle_col=45,
                         annotation_col=gl) 
}
ggsave(p1,filename = 'check_heatmap_top500_sd.pdf',width = 7.5,height =6)
dev.off()

#######################样本相关性检测————取500高表达基因##################################
dat_500 <- dat[names(sort(apply(dat,1,mad),decreasing = T)[1:500]),]#取高表达量前500基因
M <- cor(dat_500)

p2 <-pheatmap::pheatmap(M,
                   show_rownames = T,
                   angle_col=45,
                   fontsize=7,
                   annotation_col = gl ) }
ggsave(p2,filename = 'check_cor_top500.pdf',width = 7.5,height =6)

出图如下:

image.png

image.png

image.png


从以上各图可以看出,我们进行归一化后的数据在各样本间分布一致,因此各样本间是可比较的。各种聚类可视化图也可以明显看出我们的两个分组之间确实存在有很大的差异,组间样品是分开的,组内是聚在一起的,因此我们就可以自信地进行下一步的差异分析啦。

这就是生信技能树一直提到的三张图,生信技能树的教程:《你确定你的差异基因找对了吗?》提到过,必须要对你的转录水平的全局表达矩阵做好质量控制,最好是看到标准3张图

  • 左边的热图,说明我们实验的两个分组,normal和npc的很多基因表达量是有明显差异的
  • 中间的PCA图,说明我们的normal和npc两个分组非常明显的差异
  • 右边的层次聚类也是如此,说明我们的normal和npc两个分组非常明显的差异

如果分组在3张图里面体现不出来,实际上后续差异分析是有风险的。这个时候需要根据你自己不合格的3张图,仔细探索哪些样本是离群点,自行查询中间过程可能的问题所在,或者检查是否有其它混杂因素,都是会影响我们的差异分析结果的生物学解释。

参考资料

Analyzing RNA-seq data with DESeq2 (bioconductor.org)

GitHub - jmzeng1314/GEO (强烈推荐学习) 本实战教程基于以下生信技能树分享的视频

【生信技能树】转录组测序数据分析_哔哩哔哩_bilibili

【生信技能树】GEO数据库挖掘_哔哩哔哩_bilibili

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档