R语言 | 差异表达基因分析(DEGs)| 原始数据处理&火山图绘制

差异表达基因分析 即筛选处理组与对照组相比,呈现差异表达的基因,Up,No sig,Down. 今天使用的R包为:DESeq2[1] 这个包基于RNA Seq data-count data(也就是说这里要求输入的数据矩阵必须为count,而不是已经标准化后的TPM,FRAM),基于负二项广义线性模型估算样本间基因差异表达概率。 获取示例数据 这里我没有合适的数据进行演示,于是搜索到pasilla包中有一个示例数据可用。那我们就从pasilla包中获取今天的示例数据。 code1
  1if (!requireNamespace("BiocManager", quietly = TRUE)) 2  install.packages("BiocManager") 3> BiocManager::install("pasilla") 4library(pasilla) 5> pasCts<-system.file("extdata", 6+                     "pasilla_gene_counts.tsv", 7+                     package="pasilla", 8+                     mustWork = T) 9> pasCts10[1"E:/R-4.1.0/library/pasilla/extdata/pasilla_gene_counts.tsv"11> pasAnno<-system.file("extdata",12+                      "pasilla_sample_annotation.csv",13+                      package="pasilla",14+                      mustWork=T)15> pasAnno16[1"E:/R-4.1.0/library/pasilla/extdata/pasilla_sample_annotation.csv"17> df<-read.csv(pasCts,sep="\t",row.names = "gene_id")18> cts<-as.matrix(df)19   > coldata<-read.csv(pasAnno,row.names = 1) 
这样就获得了今天我们需要的两个示例数据集,即表达矩阵cts,样本分组数据集coldata。如下: code2
  1> head(coldata)
2           condition        type
3treated1     treated single-read
4treated2     treated  paired-end
5treated3     treated  paired-end
6untreated1 untreated single-read
7untreated2 untreated single-read
8untreated3 untreated  paired-end
9> head(cts)
10            treated1 treated2 treated3 untreated1 untreated2 untreated3 untreated4
11FBgn0000003        0        0        1          0          0          0          0
12FBgn0000008      140       88       70         92        161         76         70
13FBgn0000014        4        0        0          5          1          0          0
14FBgn0000015        1        0        0          0          2          1          2
15FBgn0000017     6205     3072     3334       4664       8714       3564       3150
16FBgn0000018      722      299      308        583        761        245        310
实际上仔细看看code1中row10和row16即可知道我们需要的数据集所在位置。 示例数据获取完毕,下面利用DESeq2进行差异表达分析: code3
 1dds <- DESeqDataSetFromMatrix(countData = cts, 
2colData = coldata, design = ~ condition)
3dds <- DESeqDataSetFromMatrix(countData = cts, 
4colData = coldata, design = ~ condition)
5dds <- DESeq(dds)    
画火山图 code4
 1sum(res$padj < 0.05, na.rm = TRUE)    #统计padj<0.05显著差异的基因
2plotMA(res)    #画火山图
3plotMA(res, alpha = 0.05, colSig = 'red', colLine = 'skyblue')    #稍微设置一下参数
通常,画出火山图不是目的,目的是需要知道差异表达的基因到底是哪些? 于是,需要统计差异表达基因的信息。 code5
 1filter_up <- subset(res, pvalue < 0.05 & log2FoldChange > 1#过滤上调基因
2filter_down <- subset(res, pvalue < 0.05 & log2FoldChange < -1#过滤下调基因
3print(paste('差异上调基因数量: ', nrow(filter_up)))  #打印上调基因数量
4print(paste('差异下调基因数量: ', nrow(filter_down)))  #打印下调基因数量
统计完成,我们当然还需要对统计结果进行保存。 code6
 1write.table(res, file = "example_differential_gene.txt"
2write.table(filter_up, file="example_filter_up_gene.txt", quote = F)  
3write.table(filter_down, file="example_filter_down_gene.txt", quote = F)
到这里,基本的分析就算是完成了。但是还可以继续:
  1###读取刚才保存的差异表达基因分析数据
2df = read.table("example_differential_gene.txt",header =T,stringsAsFactor = F)
3###查看前6行
4head(df)
5                baseMean log2FoldChange     lfcSE         stat    pvalue      padj
6FBgn0000003    0.1715687    1.026045410 3.8055034  0.269621465 0.7874515        NA
7FBgn0000008   95.1440790    0.002151424 0.2238838  0.009609555 0.9923328 0.9969271
8FBgn0000014    1.0565722   -0.496735569 2.1602643 -0.229942039 0.8181368        NA
9FBgn0000015    0.8467233   -1.882761702 2.1064322 -0.893815463 0.3714206        NA
10FBgn0000017 4352.5928988   -0.240025230 0.1260243 -1.904594503 0.0568328 0.2823611
11FBgn0000018  418.6149305   -0.104799112 0.1482803 -0.706763605 0.4797134 0.8239073
12###可以看到我们一会儿重新绘图需要的padj列有NA值,故需要删掉包含NA的行
13df = na.omit(df)
14##再次查看,可以看到包含NA的行已被删除
15head(df)
16               baseMean log2FoldChange     lfcSE         stat     pvalue      padj
17FBgn0000008    95.14408    0.002151424 0.2238838  0.009609555 0.99233280 0.9969271
18FBgn0000017  4352.59290   -0.240025230 0.1260243 -1.904594503 0.05683280 0.2823611
19FBgn0000018   418.61493   -0.104799112 0.1482803 -0.706763605 0.47971340 0.8239073
20FBgn0000032   989.73003   -0.091905049 0.1476974 -0.622252169 0.53377607 0.8497739
21FBgn0000037    14.09481    0.463068060 0.4914026  0.942339492 0.34601886 0.7409094
22FBgn0000042 82207.72464    0.314524848 0.1405415  2.237949545 0.02522435 0.1645315
23###接下来需要设置限定值
24df$group = ifelse(df$log2FoldChange>=1&df$padj<=0.05,"Up",
25                  ifelse(df$log2FoldChange<=-1&df$padj<=0.05,"Down","Not sig"))
26table(df$group)
27   Down Not sig      Up 
28    105    8103     115 
29###可以看到,这里有105个下调gene,115个上调基因。但是还是太多了,毕竟后面的分析中我希望得到限制条件更严格的结果。那就重新设定限定值
30df$group = ifelse(df$log2FoldChange>=2&df$padj<=0.01,"Up",
31                  ifelse(df$log2FoldChange<=-2&df$padj<=0.01,"Down","Not sig"))
32table(df$group)
33   Down Not sig      Up 
34    25    8275     23
35#好,差不多了下面开始用ggplot2绘图 
36install.packages("ggplot2")
37library(ggplot2)
38ggplot(df,aes(x=log2FoldChange,y = -log10(padj)))+
39  geom_point(aes(color=group))+
40  scale_color_manual(values = c("red","grey","blue"),limit = c('Up','Not sig',"Down"))+
41  theme_bw(base_size = 20)+
42  ggtitle("今日之森Volcano Plot")+
43  theme(plot.title = element_text(size=30,hjust = 0.5))+
44  coord_cartesian(xlim = c(-5,5),ylim = c(0,75))

[1]Anders S, Huber W. Differential expression analysis for sequence count data. Genome Biol. 2010;11(10):R106. doi:10.1186/gb-2010-11-10-r106

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

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

推荐阅读更多精彩内容