差异基因分析不会做?最简单的火山图做法,一秒学会

最近很多刚了解生信的同学问喵学姐:看了一些文献,文献里的各种图怎么看呀,完全看不懂。今天喵学姐就来给大家讲一讲我们平时做的最基础的差异分析——火山图

火山图(Volcano plot)是散点图的一种,它将统计测试中的统计显著性量度(如p-value)和变化幅度相结合,从而能够帮助快速直观地识别那些变化幅度较大且具有统计学意义的数据点(代谢物等)。是一种单变量统计分析方法,常应用于研究基因组、转录组、代谢组、蛋白质组等数据分析。

火山图长啥样?

先给大家看看最最最常见的一种,基础款:

有的人可能觉得,这不就是高级一点的散点图+三根虚线+花里胡哨的颜色吗?

NO NO NO,火山图可不光只有上面那一种,

▲别人家的火山图,是不是很美

▲别人的火山图里竟然还有反比例函数阈值线

▲这一排火山图放在一起是不是很有气势

火山图有啥用?

分析数据用散点图表示看不大明白?

想要表现数据间有统计学意义的明显差异?

我们给散点图换个样子,分区划线做成火山图优势这不就来了?

火山图是生信文章中最常见的表达图,它最直观的作用就是展示组间差异的物质

比如找到肿瘤细胞跟正常细胞的差异基因,或是研究疾病组跟正常组之间的差异表达基因情况。

绘制火山图通常需要两个关键指标

①差异倍数Fold Change值

②假设检验P值

火山图怎么看?

用之前讲过的一篇非肿瘤思路文献来举例,:4分+非肿瘤纯生信,GEO数据集+铁死亡+cytoscape调控网络+miRNA+转录因子

这张图展现了精神分裂组与正常组之间的差异表达基因,

其中每个点代表一个基因。

蓝色的点代表显著下调的基因,红色的点代表显著上调的基因,而灰色的点就表示无显著差异的基因。

那我们怎么去判断它是显著上调还是显著下调呢?

这就涉及到两个坐标轴,

 横坐标Log2  (Fold Change)

②纵坐标-log10 (P value)

横坐标为log2FC值即差异倍数值。表示两个分组之间的差异倍数,其绝对值越大说明某基因在两组之间的表达差异也越大。该值为正时,表示差异上调;该值为负时,表示差异下调。

纵坐标为-log10(P-value)值,表示某个基因在比较分组之间的表达差异是否足够显著,一般认为p-value<0.05为显著。

根据作者设置的阈值:log2FC的绝对值为0.1,p值<0.05,因此灰色部分的基因不满足条件。

因此,横着看基因与对照组的差异,竖着看有无统计学意义,在欣赏火山图时,我们只需要关注左上和右上两区,然后再研究这两块的基因就好啦。

火山图怎么做?

之前的推文已经为大家详细讲解了整篇文献的思路框架,也教大家学习了GEO数据库以及数据集的下载。

现在呢,我们就要开始复现文章的结果图了,先来做GEO数据差异基因的分析,今天会使用两个方法教大家绘制火山图。

使用GEO2R绘制火山图

Step 1. 找到数据集

文献中作者用到的数据集是GSE27383,我们直接在GEO数据库搜索这个数据集。

它包含了精神分裂症患者的信息和健康对照者的患者信息。

Step 2. 使用GEO2R进行分析

直接点击GEO2R,

因为需要做两组之间的差异基因,所以要对组别进行定义。

Step 3. 对组别进行定义

首先在Define groups定义精神分裂症组别,命名为SCH,点击enter键,将正常对照组命名为HC。

然后,把相应的样本归属到不同组别中。直接选中相应的精神分裂症的样本,把这43个样本归属到SCH组别中。

接着同样的操作,把正常对造组的29个样本归属到HC。

Step 4. 分析生成火山图

然后点击Analyze分析,就可以生成相应的火山图,底下是所有的差异基因信息。包括基因探针名、校正的P值、P值、T检验、logFC值、基因名,直接下载就可以得到所有的差异基因的信息了。

直接将它复制到excel表格中打开。可以看到一共有45000多个差异基因,但它们并不都参与精神分裂症的发生。

Step 5. 设置阈值,筛选差异基因

第一种方法:手动设置阈值

我们需要根据文献中作者设置的阈值:p<0.05 and ︱logFC︱>0.1,从这两个层面去限定阈值作为精神分裂症与健康对造组之间的显著差异基因。

对刚刚下载的数据进行筛选,首先使用ABS函数对logFC进行绝对值计算。

然后根据作者设置的阈值筛选我们想要的显著性的差异基因。

最终得到4000多个参与精神分裂症的显著差异基因。

第二种方法:直接在GEO2R网站上设置阈值

点击Options这一栏,并在界面右侧进行阈值设置。

0.05为cut-off值, log2FC值为0.1。

点击分析后出来的火山图可以直接下载使用。

Step 6. 差异基因数据下载

底部是经过设置阈值后呈现的所有基因情况,也可以直接下载。

使用在线分析平台绘制火山图

Step 1. 打开桑格助手分析工具http://vip.sangerbox.com/home.html

对于没有 GEO2R 这个功能的数据集,我们可以直接在桑格助手在线平台去做差异基因分析,只要上传表达谱,然后输入组别信息,就可以得到相应的差异基因情况了。

点击⌈工具列表-limma差异分析工具⌋进入使用界面。

Step 2. 上传表达谱信息以及组别信息

上传处理好的表达谱文件。表达谱加载完后,左边这一列默认为表达谱里的所有样本。

这时我们需要用到临床数据来分别定义精神分裂症组别和健康对照组别。

打开从GEO数据库下载的临床数据集进行组别定义。在右边新建一列,先把健康对照组筛选出来,组别命名为HC,然后对空白处的精神分裂组命名为SCH。

再把组别信息复制到桑格助手里面,这样我们所需要的数据就准备好了。

Step 3. 设置阈值

在右边的实验设计选择实验组vs对照组,差异方法选择limma检验。然后开始分析,进行命名并确认。

此处需要点击选择比较组来显示火山图,PS:因为火山图耗的耗费的内存比较大,所以默认不显示。

左侧为所有的差异基因信息,右边为火山图。也可以选择阈值参数,作者限定的是logFC值,PS:这个工具有一个缺点就是不能定义logFC值,只能定差异倍数,我们一般分析都认为若差异倍数为两倍则显著上调或显著下调。

但是在此数据集中,我们设置差异倍数为2即log2FC为1的时候,基本上没有显著性差异的基因,所以说在文章中,作者就放宽了条件限制,设置为log2FC= 0.1 and p<0.05。

Step 4. 基因差异信息下载

页面底部为基因差异信息,可以展现出就是在不同阈值设置的情况下相应的差异倍数上调或下调的基因数量。

在右边,有未设置阈值/设置阈值后的所有的显著性差异基因数据情况,都可以直接下载使用。

END

只要原始数据准备好,阈值设置好,大家也可以使用其他的在线分析平台去绘制火山图,喵学姐在这里就不赘述了。

火山图绘制的底层逻辑已经告诉大家了,后面大家也可以更近一层,学习用代码把火山图做的更好看。

后面喵学姐再慢慢给大家讲解其他的结果图,新来的同学们可以悄悄点个关注~

最后附上双曲线火山图代码

library(ggplot2)

volcano_plot <- function(df, pvalue_threshold = 0.05, foldchange_threshold = 1) {

  xmax <- max(abs(na.omit(df$log2foldchange))) + 0.2

  xmin <- min(abs(na.omit(df$log2foldchange)), 0.0001)

  x <- seq(xmin, xmax, by = 0.0001)

  y <- 1/x + (-log10(pvalue_threshold))

  curve_xy <- rbind(data.frame(xpos = x + foldchange_threshold, ypos = y),

                    data.frame(xpos = -(x + foldchange_threshold), ypos = y))


  df$curve_y <- ifelse(df$log2foldchange > 0,

                       1/(df$log2foldchange - foldchange_threshold) + (-log10(pvalue_threshold)),

                       1/(-df$log2foldchange - foldchange_threshold) + (-log10(pvalue_threshold)))


  df$curve_group <- ifelse(-log10(df$pvalue) > df$curve_y & df$log2foldchange > foldchange_threshold, 'up',

                           ifelse(-log10(df$pvalue) > df$curve_y & df$log2foldchange < -foldchange_threshold, 'down', 'nosignif'))   


  df$pvalue <- -log10(df$pvalue)

  p <- ggplot(df, aes(x = log2foldchange, y = pvalue, color = curve_group)) +

    geom_point(size = 1) +

    geom_line(data = curve_xy, aes(x = xpos, y = ypos), lty = 3, col = "black", lwd = 0.6) +

    scale_color_manual(values = c('up'='red', 'down'='blue', 'nosignif'='gray')) +

    xlim(-xmax, xmax) +  

    ylim(0, 30) +

    labs(x = "log2(FoldChange)", y = "-log10(P-value)") + 

    theme_bw() +

    theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),

          legend.spacing.x = unit(0.05, 'cm'), plot.title = element_text(hjust = 0.5),

          legend.text = element_text(size = 8)) + 

    guides(color = guide_legend(override.aes = list(size = 2), title = NULL))


  return(p)

}

data <- read.table('desktop/sample_dge.txt',header=T,stringsAsFactors=F,sep='\t')

head(data)

                         gene       pvalue log2foldchange

1   ENSG00000000003.15 TSPAN6 6.954955e-04      1.0305811

2      ENSG00000000005.6 TNMD 1.103522e-01     -2.1289526

3     ENSG00000000419.12 DPM1 7.168680e-02      0.5515042

4    ENSG00000000457.14 SCYL3 5.743836e-01      0.1453620

5 ENSG00000000460.17 C1orf112 1.173320e-06      2.1643651

6      ENSG00000000938.13 FGR 1.388476e-13     -4.0345022

p <- volcano_plot(data)

p


本文使用 文章同步助手 同步

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容