转录组分析RNA-Seq(续)

简介: 转录组分析RNA-Seq(续)

我该分享点什么?分享点什么能让大家有兴趣?分享点什么能帮到大家?这是最近一直困扰我的三个问题。

昨晚在翻腾公众号的时候,发现2022年01月20日公众号发表了《转录组数据分析 RNA-seq》,NGS分析相关的推文就一直没有更新过,而且该文仅分享了上游分析的众多pipeline之一,并未涉及下游分析以及绘图,于是乎有了这篇推文。

数据简介

当我们拿到了基因的表达矩阵,接下来就是差异分析。接下来我将以2020年发表在BMC的一篇鹌鹑的文章中部分RNAseq数据为例进行分析。(文末附基因表达矩阵的百度云链接,大家可自行下载练手,不必下载原始测序文件重新跑一遍上游分析)

Morris KM, Hindle MM, Boitard S, et al. The quail genome: insights into social behaviour, seasonal biology and infectious disease response. BMC Biol. 2020;18(1):14. Published 2020 Feb 12. doi:10.1186/s12915-020-0743-4

基因定量矩阵文件格式如下(第一列为基因名,第二列为基因所在染色体,第三列为基因的起始位置,第四列为基因的终止位置,后八列为8个文库的基因定量信息,前4个文库为对照组,后四个文库为处理组):

3a68513fb798eefb6304322f82783b5d_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

DESeq2的介绍

DESeq2是一个为高维计量数据的归一化、可视化和差异表达分析而设计的一个R语言包。它通过经验贝叶斯方法(empirical Bayes techniques)来估计对数倍数变化(log2foldchange)和离差的先验值,并计算这些统计量的后验值。

它由美国北卡罗莱纳大学教授Michael Love(michaelisaiahlove@gmail.com)于2014年发布,目前仍在更新与维护中,是目前差异表达分析方面最常用的R包。

当然像limma,edgeR也是常用的计算差异的R包,至于三者想用哪个,随你个人喜好。

DESeq2的安装

#这一步请在R或Rstudio中运行

if (!requireNamespace("BiocManager"))
  install.packages("BiocManager")
BiocManager::install("DEseq2")

DESeq2差异分析

# 加载DESseq2 R包
library(DESeq2)
# 读取基因表达矩阵数据
countData <- read.table("C:\\Users\\Jeff\\OneDrive\\桌面\\online_count.txt",row.names=1,header=F))
'''
BTW 如果你不想输入太长的绝对路径,你可以先设置工作路径,就像python中os模块中os.chdir()一样
setwd("C:\\Users\\Jeff\\OneDrive\\桌面")
countData <- read.table("online_count.txt",row.names=1,header=F))
'''
countData <- countData[,c(4:11)]
# 查看数据的头部
head(countData)
# 删除表达量均值小于1的基因
countData <- countData[rowMeans(countData)>1,]
# 构造一个处理组-列交联矩阵
condition <- factor(c(rep("control",4),rep("treatment",4)))
colData <- data.frame(row.names=colnames(countData), condition=condition)
# 构造DESeq2计算矩阵
dds <- DESeqDataSetFromMatrix(countData = countData, colData = colData, design = ~condition)
# 差异分析
dds <- DESeq(dds)
# 提取差异分析结果
res <- results(dds, contrast=c("condition","treatment","control"))
# 按照矫正后的p值进行结果的排序
res <- res[order(res$padj),]
# 提取所有的差异基因,其中阈值设置为p-adjust value < 0.01,log2FoldChange的绝对值大于1
# 另外如若想单独提取上下调基因的相关信息,修改subset的筛选条件即可:
#p-adjust value < 0.01,log2FoldChange > 1
#p-adjust value < 0.01,log2FoldChange <- 1
diff_gene_deseq2 <-subset(res,padj < 0.01 & (log2FoldChange > 1 | log2FoldChange < -1))
diff_gene_deseq2 <- row.names(diff_gene_deseq2)
# 整合差异结果以及各文库标准化后的定量数值至同一数据框
resdata <-  merge(as.data.frame(res),as.data.frame(counts(dds,normalize=TRUE)),by="row.names",sort=FALSE)
#得到csv格式的差异表达分析结果
write.csv(resdata,file= "DESEQ_result.csv",row.names = F)

看到此处,有人想问数据有了,火山图不是最经典的转录组图吗?怎么画图?有没有快捷作图的代码?QAQ

Yep 复制~ 粘贴~

#导入R包,如果未安装请按DESeq2的方法安装
library(RColorBrewer)
library(ggpubr)
library(ggthemes)
#在这里我们定义一个函数对接DESeq2产出的结果
#函数需要传入res和pdf_path两个参数
VolcanoPlot=function(res,pdf_path)
{
  res$logP <- -log10(res$padj) #padj取-log值生成新列
  res <- as.data.frame(res) #转为数据框形式
  res$group <- 'not-significant' #根据选定的阈值对基因添加label(上调?下调?还是没差异?)
  res$group[which((res$padj <=0.01) & (res$log2FoldChange >=1) )] = 'up-regulated'
  res$group[which((res$padj <=0.01) & (res$log2FoldChange <=-1) )] = 'down-regulated'
  table(res$group) #简单看下多少个上调基因多少个下调基因
  ggscatter(res, #画图咯
            x = 'log2FoldChange', #x轴数据
            y ='logP' , #y轴数据
            color = 'group', #用标签区分散点颜色为三个颜色
            size = 1, #散点大小
            palette = c("#2f5688","#BBBBBB","#CC0000"), #手动定义三个颜色应为什么色
            xlab = "log2FoldChange", #x轴标签
            ylab = "-log10(padj)" #y轴标签
           )+theme(text = element_text(size = 10),legend.position = "right")+ #theme中定义全局字体大小和图例的位置(在右边)
  geom_hline(yintercept = 2,linetype='dashed')+  #绘制y轴阈值线 即padj =0.01处
  geom_vline(xintercept = c(-1,1),linetype='dashed') #绘制x轴阈值线 即log2FoldChange分别为1和-1处
  ggsave(pdf_path, width = 6.4, height = 3.6 ,dpi = 300) #保存图片,指定pdf高度和宽短,dpi分辨率为300
  return(TRUE)
}
#在这里 我们运行一下我们定义的函数
VolcanoPlot(res,"tmp.pdf")

8eec382ee12e133b54da59dfb07ab76b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

## PCA
library("FactoMineR")
library("factoextra")
count.pca <- counts(dds) %>% as.matrix %>% t %>% PCA(.,graph = F)
pdf("PCA.pdf")
fviz_pca_ind(count.pca, 
               col.ind=condition, 
               mean.point=T, 
               addEllipses = F, 
               legend.title="Groups")+ 
theme(panel.border = element_rect(fill=NA,color="black", size=1, linetype="solid"))
dev.off()
## Heatmap
library(pheatmap)
pdf("Heatmap.pdf")
normalized_counts <- counts(dds, normalized=TRUE)
normalized_counts_mad <- apply(normalized_counts, 1, mad)
normalized_counts <- normalized_counts[order(normalized_counts_mad, decreasing=T), ]
Heatmap_Data=normalized_counts[rownames(diff_gene_deseq2),]
annotation_col = data.frame(
    Conditions  = factor(c(rep("control", 4),rep("treatment", 4)) ))
colnames(Heatmap_Data)=factor(colnames(Heatmap_Data))
pheatmap(Heatmap_Data,
           scale = "row",
           show_rownames = F,
           cluster_cols = F,
           main = "DAR Heatmap",
           cutree_rows = 2,
           gaps_col  = 4,
           color = colorRampPalette(c("navy", "white", "firebrick3"))(50),
           ColSideColors = rep(c("pink", "purple"), each = 4))
dev.off()
### pearson
library(amap)
library(gplots)
rld <- rlog(dds, blind=TRUE)
rlogMat <- assay(rld)
rlogMat <- rlogMat[order(normalized_counts_mad, decreasing=T), ]
hmcol <- colorRampPalette(brewer.pal(9, "GnBu"))(100)
pearson_cor <- as.matrix(cor(rlogMat, method="pearson"))
hc <- hcluster(t(rlogMat), method="pearson")
heatmap.2(pearson_cor, Colv = as.dendrogram(hc), Rowv=as.dendrogram(hc), symm=T, trace="none",
          col=hmcol, main="The pearson correlation of each
sample")
dev.off()

27e7f482a958a92d6cb66cc7bba75eaa_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

c4ee61ae24f90ea048f985d6c9824d34_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

9c20a067d181fe2ef6fe634d9a572d3d_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

小结

好了,今天摸鱼时间有限,实在不能再摸了,课题还亟待处理,只能先写到这里了,接下来我将不定时的继续更新转录组相关的下游个性化分析,转录组系列写完之后我们就开始Chip-seq,ATAC-seq,非模式物种的单细胞ATAC-seq等多组学的上下游数据分析,欢迎讨论~

互相学习,加油!

相关文章
|
数据挖掘
Seurat 4.0 | 单细胞转录组数据整合(scRNA-seq integration)
Seurat 4.0 | 单细胞转录组数据整合(scRNA-seq integration)
1754 0
Seurat 4.0 | 单细胞转录组数据整合(scRNA-seq integration)
|
4天前
|
SQL 机器学习/深度学习 编解码
R中单细胞RNA-seq分析教程 (4)
R中单细胞RNA-seq分析教程 (4)
21 6
R中单细胞RNA-seq分析教程 (4)
|
1天前
|
数据挖掘
R中单细胞RNA-seq分析教程 (5)
R中单细胞RNA-seq分析教程 (5)
27 13
R中单细胞RNA-seq分析教程 (5)
|
7天前
|
并行计算 数据可视化 开发者
RNA-seq 差异分析的点点滴滴(4)
RNA-seq 差异分析的点点滴滴(4)
16 3
RNA-seq 差异分析的点点滴滴(4)
|
1月前
|
存储
RNA-seq 差异分析的点点滴滴(1)
RNA-seq 差异分析的点点滴滴(1)
33 1
RNA-seq 差异分析的点点滴滴(1)
|
3月前
|
数据可视化
单细胞转录组|scATAC-seq 数据整合
单细胞转录组|scATAC-seq 数据整合
69 0
|
5月前
|
数据处理 索引
联合 RNA 和 ATAC 分析:SNARE-seq
联合 RNA 和 ATAC 分析:SNARE-seq
48 0
联合 RNA 和 ATAC 分析:SNARE-seq
|
6月前
|
数据可视化 Java 数据处理
单细胞|RNA-seq & ATAC-seq 联合分析
单细胞|RNA-seq & ATAC-seq 联合分析
69 3
|
7月前
|
存储 编解码 数据可视化
单细胞分析|整合 scRNA-seq 和 scATAC-seq 数据
单细胞分析|整合 scRNA-seq 和 scATAC-seq 数据
102 0
|
编解码 芯片
文献丨转录组RNA seq——青年阶段!(下)
文献丨转录组RNA seq——青年阶段!(下)