转录组学习七(差异基因分析)

任务

  • 载入表达矩阵,然后设置好分组信息

  • 用DEseq2进行差异分析,也可以走走edgeR或者limma的voom流程

  • 基本任务是得到差异分析结果,进阶任务是比较多个差异分析结果的异同点。

  • 了解差异基因分析背后的统计学基础(数据标准化,假设检验)

<font color=orange>差异基因分析背后的统计学知识</font>

简单回顾之前genek-转录组原理篇的知识点,参考学习徐洲更的转录组分析流程七(差异基因分析),及相关统计学书本知识。

一:样品间(组间的数据)的表达标准化

  1. (处理样品中,有一个基因的表达量异常的高,大量的reads被占,导致其他gene的相对表达量下降。)TPM的标准化是在 各自的==样品内部==的 差异基因==相对表达量==对于组间来说,也就是处理组和对照组来说就需要进一步的标准化。目的就是能够得到==样品间的绝对表达量==是否有差异

  2. 标准化方法:

    • 内参基因,看家基因。某一基因在样本中的表达肯定是一样的。(有限制,依赖基因的功能注释,数目少准确不高。)

    • 通用方法:假设大多数基因是没有差异表达的。统计学方法找到标准化的因子。

    • DESeq2(estimateSizeFactors/sizeFactors)、edgeR(TMM,calcNormFactors)。差异表达分析鉴定软件。

    • 输入文件是reads count矩阵。

    • 可用Trinity软件包里的run_DE_analysis.pl

  3. FPKM/TPM/TMM的选择

    • 组内比较 TPM(不同基因在同一样品中的表达差异)

    • 组间比较 TMM(同一基因在不同样品间的表达差异)

    • 低表达基因的过滤TMM-normalized FPKM(用于数据过滤、heatmap、共表达等)

    • TMM-TPM还未结合起来(可能TMM矫正TPM后意义就变了?或者TMM还未流行起来)

二:假设检验进行差异表达基因的鉴定

  1. 建库测序是一个随机抽样的过程。纵使是两次测序,即抽样,同一基因的reads_count也会有差异。

    • 当观察到的基因在两组reads_count 中不一样的时候,可能有两种原因:可能是==表达丰度上的差异,也可能是随机抽样过程中的波动==。假设是随机波动导致的,然后计算在随机波动的前提下,出现当前事件的概率,如果概率低。 反证法。

  2. 假设检验:需要根据实际情况(总体均值、方差是否已知,单样本还是多样本,重复个数的多少/大样本量还是小样本量

    image
  3. 差异表达基因通常用t检验(组间差异除以/组内差异,组间差异更大,而组内差异小则更可能有差异【此即是需要测更多生物学重复,能更准确的估计组内差异】)

  4. t值的双侧检验和单侧检验

    • 单侧检验:G1在处理组中表达 大于 对照组。右侧面积->则单侧检验,即upregulate。

    • 双侧检验:G1处理组与对照组有明显差异。则双侧检验

  5. 一类错误(即为假阳性,与P-value对应,0.05 or 0.01),二类错误(指漏诊率)

    image
    1. 降低一类错误:对于一条gene可能有5%可能误诊,而在差异基因鉴定时都是大规模的,如果一万条,50条则太高了。p-value 进一步的矫正 FDR方法,q-value为升级版。

    2. 降低二类错误:G3增加生物学重复,G2增加测序量来提高抽样次数。

      image

<font color=orange>用DESeq2进行差异表达分析</font>

一:DESeq2的安装

source("https://bioconductor.org/biocLite.R") 载入安装工具bioconductorbiocLite("DESeq2") bioconductor安装DESEQ2library(DESeq2)

二:DESeq2差异分析基本流程

  • 对于DESeq2需要输入的三个数据:表达矩阵、样品信息矩阵、差异比较矩阵

  • 而对于DESeq2的差异分析步骤,总结起来就是三步:

    • <font color=darkred>构建一个dds(DESeqDataSet)的对象</font>;

    • <font color=darkred>利用DESeq函数进行标准化处理</font>;

    • <font color=darkred>用result函数来提取差异比较的结果</font>。

三:构建dds矩阵

  • 构建dds矩阵的基本代码

dds <- DESeqDataSetFromMatrix(countData = cts, colData = coldata, design= ~ batch + condition)
  • 其输入的三个文件:

    • 表达矩阵:即代码中的countData,就是通过之前的HTSeq-count生成的reads-count计算融合的矩阵。行为基因名,列为样品名,值为reads或fragment的整数。

    • 样品信息矩阵:即上述代码中的colData,它的类型是一个dataframe(数据框),第一列是样品名称,第二列是样品的处理情况(对照还是处理等)。可以从表达矩阵中导出或是自己单独建立。

    • 差异比较矩阵:即代码中的design,差异比较矩阵就是告诉差异分析函数哪些是对照,哪些是处理。

  • 正式构建dds的矩阵

  • 输入HTSeq-count的各个结果文件

KD1 <- read.table("mus_E14_cell_Akap95_shRNA_rep1_SRR3589959.count",sep = "\t",col.names = c("gene_id","rep1"))KD2 <- read.table("mus_E14_cell_Akap95_shRNA_rep2_SRR3589960_matrix.count",sep = "\t",col.names = c("gene_id","rep2"))control1 <- read.table("mus_E14_cell_control_shRNA_rep1_SRR3589961_matrix.count",sep = "\t",col.names = c("gene_id","control1"))control2 <- read.table("mus_E14_cell_control_shRNA_rep2_SRR3589962_matrix.count",sep = "\t",col.names = c("gene_id","control2"))
  • merge_file

raw_count <- merge(merge(merge(KD1,KD2,by="gene_id"),control1,by="gene_id"),control2,by="gene_id")
  • 构建DESeq_data_set基本信息

count_data <- raw_count[,2:5]row.names(count_data) <- raw_count[,1]condition <- factor(c("rep","rep","condition","condition"))col_data <- data.frame(row.names = colnames(count_data), condition)dds <- DESeqDataSetFromMatrix(countData = count_data,colData = col_data,design = ~ condition)
  • 过滤低质量的低count数据:

nrow(dds) ## 显示52636行dds_filter <- dds[ rowSums(counts(dds))>1, ] ##将所有样本基因表达量之和小于1的基因过滤掉nrow(dds_filter) ##显示27101行,过滤掉了近50%

四:对dds矩阵进行DESeq分析:

  • 使用DESeq进行差异表达分析:(一堆统计统计学知识的坑待填啊)

    • estimation of size factors(estimateSizeFactors),

    • estimation of dispersion(estimateDispersons),

    • Negative Binomial GLM fitting and Wald statistics(nbinomWaldTest)

    • DESeq自动化的基本过程如图:

      image
dds_out <- DESeq(dds_filter)res <- results(dds_out)summary(res)
  • <font color=darkred>结果显示:</font> 2.6%的基因:717个上调,2.1%的基因579下调,另外还有41%的基因表达量是不高的,属于low count。

    image

五:提取差异基因分析的结果

  • 在利用数据比较分析两个样品中同一个基因是否存在差异表达的时候,一般选取Foldchange值和经过FDR矫正过后的p值,取padj值(p值经过多重校验校正后的值)小于0.05,log2FoldChange大于1的基因作为差异基因集

table(res$padj<0.05)res_deseq <- res[order(res$padj),]diff_gene_deseq2 <- subset(res_deseq, padj<0.05 & (log2FoldChange > 1 | log2FoldChange < -1))## or diff_gene_deseq2 <- subset(res_desq, padj<0.05 & abs(log2FoldChange) >=1)diff_gene_deseq2 <- row.names(diff_gene_deseq2)res_diff_data <- merge(as.data.frame(res),as.data.frame(counts(dds_out,normalize=TRUE)),by="row.names",sort=FALSE)write.csv(res_diff_data,file = "11_30_mouse_data.csv",row.names = F)
  • 提取结果:

    image

六 MA图

MA-plot (R. Dudoit et al. 2002) ,也叫 mean-difference plot或者Bland-Altman plot,用来估计模型中系数的分布。 X轴, the “A” ( “average”);Y轴,the “M” (“minus”) – subtraction of log values is equivalent to the log of the ratio。
M表示log fold change,衡量基因表达量变化,上调还是下调。A表示每个基因的count的均值。根据summary可知,low count的比率很高,所以大部分基因表达量不高,也就是集中在0的附近(log2(1)=0,也就是变化1倍).提供了模型预测系数的分布总览。

library(ggplot2)plotMA(res,ylim=c(-5,5))topGene <- rownames(res)[which.min(res$padj)]with(res[topGene, ], {    points(baseMean, log2FoldChange, col="dodgerblue", cex=2, lwd=2)    text(baseMean, log2FoldChange, topGene, pos=2, col="dodgerblue")})
image
  • lfcShrink 收缩log2 fold change

resLFC <- lfcShrink(dds_out,coef = 2,res=res)plotMA(resLFC, ylim=c(-5,5))topGene <- rownames(resLFC)[which.min(res$padj)]with(resLFC[topGene, ], {    points(baseMean, log2FoldChange, col="dodgerblue", cex=2, lwd=2)    text(baseMean, log2FoldChange, topGene, pos=2, col="dodgerblue")})idx <- identify(res$baseMean, res$log2FoldChange)
image

七:gene 聚类热图

基本上是按照PANDA姐的分析的代码走一遍,很多参数的含义还不是很清楚,等接下来的时间再学习作图相关。

library(genefilter)library(pheatmap)rld <- rlogTransformation(dds_out,blind = F)write.csv(assay(rld),file="mm.DESeq2.pseudo.counts.csv")topVarGene <- head(order(rowVars(assay(rld)),decreasing = TRUE),20)mat  <- assay(rld)[ topVarGene, ]### mat <- mat - rowMeans(mat) 减去一个平均值,让数值更加集中。第二个图anno <- as.data.frame(colData(rld)[,c("condition","sizeFactor")])pheatmap(mat, annotation_col = anno)

结果两个热图:

image
image

八:火山图

#### perl 单行:第三列log2foldchange大于1为上调,小于-1下调,其他的不显著。perl -F'\t' -alne '$F[5]=~s/\r//;if(/baseMean/){print "gene\tlog2FoldChange\tpadj\tsignificant"} else{unless(/NA/){if($F[2] >=1 && $F[5]<0.05){print "$F[0]\t$F[2]\t$F[5]\tup"} elsif($F[2]<=-1 && $F[5]<0.05){print "$F[0]\t$F[2]\t$F[5]\tdown"} else{print "$F[0]\t$F[2]\t$F[5]\tno"}}}' mm_deseq2_resLFS.csv >volcano.txt### 火山图data <-read.table(file="volcano.txt",header = TRUE, row.names =1,sep = "\t")volcano <-ggplot(data = volcano_data,aes(x=log2FoldChange,y= -1*log10(padj)))+geom_point(aes(color=significant))+scale_color_manual(values = c("red","grey","blue")) + labs(title="Volcano_Plot",x=expression((log[2](FC)), y=expression(-log[10](padj)) ))+geom_hline(yintercept=1.3,linetype=4)+geom_vline(xintercept=c(-1,1),linetype=4)volcano
image

11/30下午小结:本次差异基因分析的学习,代码部分基本上是参考学习着各个大神们的笔记一步步操作来的。好的方面是总算对差异基因分析有了一定系统化的了解,对DESeq2差异分析软件了解了基本使用方法,对一些简单可视化图形的展示与解读有了一定的认识。但仍然有许多不足,许多坑待填比如:R语言,ggplot2可视化方面,还有最大的坑:统计学相关知识。这些将会是转录组学习完之后新的学习方向。

参考文章

  1. 【PANDA姐的转录组入门-差异基因分析-2】 https://mp.weixin.qq.com/s/05Gv1pnL0GWZwjz893xcOw

  2. 【用DESeq2包来对RNA-seq数据进行差异分析】http://www.bio-info-trainee.com/bioconductor_China/software/DESeq2.html

  3. 【(伪)从零开始学转录组(7):差异基因表达分析】https://mp.weixin.qq.com/s?__biz=MzI1MjU5MjMzNA==&mid=2247484514&idx=1&sn=1c6d227c6d7ac432d8baffb93b0b9072&chksm=e9e02dc3de97a4d59d918ee37655153fa4ccc8122e3259c0201ff441c922548f22f84311ad91&scene=21#wechat_redirect

  4. 【鉴定差异基因,哪家强?】https://mp.weixin.qq.com/s?__biz=MzI4NjMxOTA3OA==&mid=2247484152&idx=1&sn=b27809490589b6082ce1ea0cc3be878f&chksm=ebdf8a71dca803674a7865b41e63b3900d3bd5b257b46a1a89ddad1326fe784a19b3a732dfd0&scene=21#wechat_redirect

  5. 【青山屋主-转录组入门】https://zhuanlan.zhihu.com/p/30350531?group_id=905527998389362688

  6. 【Analyzing RNA-seq data with DESeq2
    http://www.bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html

  7. 【转录组差异表达筛选的真相
    https://mp.weixin.qq.com/s?__biz=MzI4NjMxOTA3OA==&mid=2247484080&idx=1&sn=7de397add158271aa51763d0d3598deb&chksm=ebdf8a39dca8032f1cb8b8154a024ee7f564c2e33b2f824efce7e34a016ef7baf92d52d64c79&scene=21#wechat_redirect

  8. 【FPKM / RPKM与TPM哪个用来筛选差异表达基因更准确?你可别逗了!】https://mp.weixin.qq.com/s?__biz=MzI4NjMxOTA3OA==&mid=2247483987&idx=1&sn=aa2ca81e7fe128edaaedc47479c517c9&chksm=ebdf8adadca803cc31261a1ccabf8a6bdb835ce12b670cc01969fcfde51cfdb991d0619e7695&scene=21#wechat_redirect

(0)

相关推荐

  • 16s分析之差异分析(DESeq2)

    今天我们来学习R语言DESeq2包,原理什么的后不说,在操作过程中点缀一下,等四个差异包推送完成后,咱们在对这四个包做差异分析的原理做一个比较分析: 这个包适用于: 高通量数据分析过程中,基于coun ...

  • 试一下我的差异分析软件

    我本身是不喜欢把差异分析这种需求包装成软件的,甚至它都算不上软件.当然,我也很不太喜欢写软件(需要考虑太多的用户意外),不过,总有一天我还是得面对.为什么让大家试一下我的 `差异分析软件` ,其实是想 ...

  • 转录组入门(mac 版本)

    软件安装 安装bioconda: 去官网下载和自己电脑系统一样的版本 https://conda.io/miniconda.html 下载完后,双击解压,然后cd 到文件目录,开始安装. # 安装 b ...

  • 插件 | 点点点,基因差异表达分析~几分钟就掌握了

    于是,TBtools - RNAseq 全家桶到位! 写在前面 很久很久以前,TBtools 解决了 RNAseq 数据分析中几个常见问题: 基因功能注释,NR,SWISSPROT,GO注释等 基因集 ...

  • What if starts with DESeq2 normlized matrix?

    因为没拿到raw counts,拿到的是DESeq2 normlized matrix,为了有谱,拿airway数据用DESeq2处理两次,看下结果,比较一下是不是可行! 可行性以及解释,各位看官,往 ...

  • 转录组差异表达分析和火山图可视化

    利用R包DEseq2进行差异表达分析和可视化 count数矩阵 差异分析 1. 安装并载入R包 2. count数矩阵导入并对矩阵进行数据处理 3. 查看样本相关性并采用热图展示 4. hclust对 ...

  • 差异分析|DESeq2完成配对样本的差异分析

    本文为群中小伙伴进行的一次差异分析探索的记录. 前段时间拿到一个RNA-seq测序数据(病人的癌和癌旁样本,共5对)及公司做的差异分析结果(1200+差异基因),公司告知用的是配对样本的DESeq分析 ...

  • DESeq2差异表达分析(二)

    接上文DESeq2差异表达分析 质量控制--样品水平 DESeq2工作流程的下一步是QC,它包括样本级和基因级的步骤,对计数数据执行QC检查,以帮助我们确保样本/重复 看起来很好. RNA-SEQ分析 ...

  • 比较不同的对单细胞转录组数据寻找差异基因的方法

    背景介绍 如果是bulk RNA-seq,那么现在最流行的就是DESeq2 和 edgeR啦,而且有很多经过了RT-qPCR 验证过的真实测序数据可以来评价不同的差异基因算法的表现. 对单细胞测序数据 ...

  • 年龄相关差异基因分析数据库

    我们人体的基因表达情况是会随着年龄的变化发生变化的.通过了解正常人当中那些基因随着年龄会发生变化,对于研究和年龄有关的疾病也有种重要的作用.今天就来介绍一个年龄有关基因表达数据库:ADEIP (htt ...

  • 科研 | Industrial Crops & Products:代谢组与转录组揭示三种烟草的代谢多样性与差异基因

    编译:菜鸟菠萝,编辑:十九.江舜尧. 原创微文,欢迎转发转载. 导读 烟草是一种重要的经济农作物,叶片是重要的芳香生物活性化合物(如酚类和生物碱)的来源.在本研究中,采用无偏转录组学和代谢组学方法来鉴 ...

  • 「标杆学习」质量问题分析解决七步法

    「标杆学习」质量问题分析解决七步法

  • 转录组学习八(功能富集分析)

    任务 选择p<0.05而且abs(log2FC)大于1的基因为显著差异表达基因集,对这个基因集用R包做KEGG/GO超几何分布检验分析. 把表达矩阵和分组信息分别作出cls和gct文件,导入到G ...

  • 三阴性乳腺癌表达矩阵探索笔记之差异基因富集分析

    学徒和学员已经陆续出师,是时候把生信技能树的舞台交给后辈了! 下面是学徒写的<GEO数据挖掘课程>的配套笔记(第3篇) B站课程<三阴性乳腺癌表达矩阵探索>笔记之文献解读 三阴 ...

  • 学徒作业-转录组差异基因筛选背景知识很重要

    一个学徒跟着我做了七十多个转录组项目了,但是一直不能理解,凭什么这样的高通量筛选就能定位到具体的一两个基因. 为了帮助他理解生物学的混沌思想,我特意给他找了一个与2018年2月发表在CELL杂志的文章 ...

  • TCGA转录组差异分析后多种基因功能富集分析:从GO/KEGG到GSEA和GSVA/ssGSEA(含基因ID转换)

    TCGA转录组数据在完成差异分析后,我们通常希望系统地获取这些成百上千的差异基因的功能信息,帮助我们分析下游实验的思路.面对大量的差异基因,逐个查询基因功能是不切实际的.所以我们需要借助基因功能富集分 ...

  • GEO实操|limma分析差异基因

    欢迎来到医科研,这里是白介素2的读书笔记,跟我一起聊临床与科研的故事, 生物医学数据挖掘,R语言,TCGA.GEO数据挖掘. ---limma分析差异基因--- 在经过了前两期中的数据下载,数据基本处 ...