拿到基因表达矩阵之后的那点事(一)

简介: 做转录组一般拿到基因表达矩阵之后工作即可开始做差异分析,在此之前还有一步就是对矩阵做标准化,常见的几种RPKM、FPKM、TMM等,虽然RPKM、FPKM方法被吐槽的尤为厉害,但是大多数测序公司给出的结果依然还是很多在使用这种方法,这里我还是以RPKM作为演示。

拿到基因表达矩阵之后的那点事(一)


做转录组一般拿到基因表达矩阵之后工作即可开始做差异分析,在此之前还有一步就是对矩阵做标准化,常见的几种RPKM、FPKM、TMM等,虽然RPKM、FPKM方法被吐槽的尤为厉害,

但是大多数测序公司给出的结果依然还是很多在使用这种方法,这里我还是以RPKM作为演示


公式如下:

RPKM=  read counts / (mapped reads (Millions) * exon length(KB))

其实标准化就是俩点 基因的长度和所有基因上计数后的reads总数

之前看到了一个帖子,感觉说的不错,对基因长度和mapped reads做了介绍,并推荐了一种方法计算这个基因长度点Here


计算基因长度需要用到gtf文件,代码如下:

# 根据gtf文件求基因长度,载入GTF文件,其实和feature结果一致
library(GenomicFeatures)
txdb <- makeTxDbFromGFF("hg38.gtf",format="gtf")
#通过exonsBy获取每个gene上的所有外显子的起始位点和终止位点,然后用reduce去除掉重叠冗余的部分,最后计算长度
exons_gene <- exonsBy(txdb, by = "gene")
exons_gene_lens <- lapply(exons_gene,function(x){sum(width(reduce(x)))})
#获得每个基因下所有外显子的总长度后,就可以利用上述公式计算FPKM了。
exons_gene_lens <- as.matrix(exons_gene_lens)
write.table(exons_gene_lens, 'length.txt', sep = '\t', col.names = NA, quote = FALSE)
#通过exonsBy获取每个gene上的所有外显子的起始位点和终止位点,然后用reduce去除掉重叠冗余的部分,最后计算长度

拿到长度之后我们就可以去做RPKM标准化了

#导入基因长度文件
leng <- read.delim('length.txt',header = T,stringsAsFactors = FALSE,check.names = FALSE)
#导入counts矩阵
count <- read.table('RPKM.txt',header = T,row.names = 1,stringsAsFactors = FALSE,check.names = FALSE)
#将其顺序一致
count <- count[match(leng$Geneid,rownames(count)),]
length <- leng[,2]#提取长度
total_count<- colSums(count)#计算各样本总数
#RPKM标准化
rpkm <- t(do.call( rbind,
                   lapply(1:length(total_count),
                          function(i){
                            10^9*count[,i]/length/total_count[i]
                          }) ))
dim(na.omit(rpkm))
colnames(rpkm) <- colnames(count)
rownames(rpkm) <- leng$Geneid
rpkm <- as.data.frame(rpkm)

OK,简单做个热图瞅一瞅

#相关性热图  
library(RColorBrewer)
rpkm <- log2(rpkm+1) #log一下
cor_pearson <- cor(rpkm, method = 'pearson')
coul <- colorRampPalette(brewer.pal(8, "PiYG"))(25)
pheatmap::pheatmap(cor_pearson,display_numbers = T,color = coul)

image.png

箱线图看一下表达量分布

#做各个样本箱线图
tiff('boxplot.tiff', width = 1000, height = 600)
#设置分组信息 方便作图
group_list <- c(rep('T',2),rep('N',2),rep('a',2),rep('b',2),rep('c',2),rep('d',2))
group_list <- factor(group_list,levels = c('T','N','a','b','c','d'),ordered=TRUE) #设置一下分组,因为我有12个样品,6个组.
boxplot(rpkm,outline = FALSE,border  = group_list,las =2,varwidth = T,
        main = 'RPKM counts',ylab = 'log(RPKM+1)')
dev.off()

image.png

接下来绘制两两样本散点图

之前都是一个个的去提取两组画图,感觉颇为麻烦,然后看到了一个帖子get到了新方法,还是用函数去解决,参照原贴

scaplot_r2 <- function(indata,inx,iny){
  nms <- names(indata)
  x <- nms[inx]
  y <- nms[iny]
  regression <- paste0(x,"~",y)
  dat.lm <- lm(as.formula(regression),data = indata)
  r2 <- sprintf("italic(r) == %.4f",sqrt(summary(dat.lm)$r.squared)) 
  labels <-  data.frame(r = r2,stringsAsFactors = FALSE)
  #注意此处需要加上 !!ensym 函数才可以
  p3 <- ggplot(indata, aes(x = !!ensym(x), y = !!ensym(y))) +
    geom_point(colour = "black", size = 1) +
    theme_light() +
    stat_smooth(method = lm, se = FALSE,colour = 'pink') +
    labs(x=paste0(x," (log2 intensity)"),y=paste0(y," (log2 intensity)"))+
    geom_text(data=labels,mapping=aes(x = 6,y=1,label=r2),parse = TRUE,inherit.aes = FALSE,size = 6)
  #  annotate("text", label = r2, x = 5.0, y = 1)
  ggsave(paste(x,'vs',y,'.tiff',sep = ''),p3, width = 6, height = 5)
}
scaplot_r2(rpkm,3,7)#指定两组

image.png

除了!!ensym 函数这种形式,帖子中还介绍了另一种方法用到everything函数,大家可以去看原贴学习~~

其实转录组还有很多方法直接用原始矩阵去做差异分析,Deseq2,edgeR等等都有自己的标准化方法,大家也可学习!!今天就先介绍到这吧~

相关文章
|
6月前
R语言偏最小二乘回归PLS回归分析制药产品化学制造过程数据、缺失值填充、变量重要性
R语言偏最小二乘回归PLS回归分析制药产品化学制造过程数据、缺失值填充、变量重要性
|
6月前
|
数据可视化
R语言广义相加(加性)模型(GAMs)与光滑函数可视化
R语言广义相加(加性)模型(GAMs)与光滑函数可视化
数学问题-反射定律&折射定律的向量形式推导
数学问题-反射定律&折射定律的向量形式推导
192 0
|
机器学习/深度学习 决策智能
矩阵分析 (五) 矩阵的分解
矩阵分析 (五) 矩阵的分解
143 0
|
机器学习/深度学习 决策智能
矩阵分析 (八) 矩阵的直积
矩阵分析 (八) 矩阵的直积
400 0
|
机器学习/深度学习
等约束二次规划中的特征分解研究(Matlab代码实现)
等约束二次规划中的特征分解研究(Matlab代码实现)
向量带来的高维思维
学习向量对于我们来说是突然的,感觉我一直在经历“降维打击”,经过十几节课的系统学习,向量似乎在我的眼里和高中时候的不太一样了。为什么这么说呢?在以前的认知里,向量就是简单的“有大小、有方向的量”,
|
数据可视化 搜索推荐 Go
拿到基因表达矩阵之后的那点事(四)
得到了差异基因并进行了一顿操作可视化后,我们可以开始富集分析了,Don't say so much,要富集当然首推Y叔的成功之作-- Clusterprofiler, 因为我的数据物种比对的牛的基因组,也是属于模式物种,用该包去做富集是更为方便~~ ,当然这个包也不仅仅限于模式物种,开发者当然会考虑的比较全面,提供了几个函数去做非模式物种或无参的富集,后面我也会说到~~ OK,开始富集吧!!
356 0
|
数据可视化
拿到基因表达矩阵之后的那点事(三)
之前的流程我们已经通过三种常用的方法对样品之间做了差异分析,接下来我们就以最流行的DEseq2包分析的结果接着进行分析,可视化~
184 0
拿到基因表达矩阵之后的那点事(二)
上次说了除了FPKM/RPKM标准化,我们可以直接拿原始Counts去进行差异分析,基于Deseq2、edgeR、limma三个包简单介绍一下分析流程。其中edgeR包在无生物学重复的研究中也用的较多~~
246 0