生信實操|如何利用R語言進行GSEA分析

2021-02-14 小張聊科研

專注生物分析最前沿

定期解讀生信文章

提供生信分析思路和套路

看圖說話欄目曾介紹過GSEA的原理(看圖說話|GSEA分析--教你解鎖高級的富集分析),今天我們來看一下如何利用R語言進行GSEA分析。

如果你有RNA-seq的數據,就可以這樣做,先把數據整成這樣,一共兩列,一列是SYMBOL,一列是foldChange。

然後輸入代碼:

> setwd("E:\\ 20201214GSEA分析怎麼做")
> #if (!requireNamespace("BiocManager", quietly = TRUE))
> #  install.packages("BiocManager")
> #BiocManager::install("clusterProfiler")
> library(clusterProfiler)#主要用到clusterProfiler包
> df = read.table("easy_input.txt",header = T,as.is = T)
> head(df)#查看前面幾行
    SYMBOL  foldChange
1      A2M -0.50361737
2     NAT1 -3.25012047
3     NAT2 -0.28492113
4 SERPINA3 -0.63137249
5    AADAC -0.18896102
6     AAMP -0.03605823
> dim(df)#數據總共幾行幾列
[1] 12444     2
>

可以看出,輸入的數據總共12444個基因,當然,這並不僅僅是是差異基因。
在分析之前,還是要把SYMBOL轉換成ENTREZ ID,之前講過,ENTREZ ID在染色體上是有編號的,一個編號對應一個基因,錯不了,但是如果是gene name,很容易出錯,另外也不好計算。
這裡要用到clusterProfiler包裡面的bitr函數,這個函數很方便的就可以轉換ENTREZID和SYMBOL。

> df.id<-bitr(df$SYMBOL, #轉換的列是df數據框中的SYMBOL列
+             fromType = "SYMBOL",#需要轉換ID類型
+             toType = "ENTREZID",#轉換成的ID類型
+             OrgDb = "org.Hs.eg.db")#對應的物種,小鼠的是org.Mm.eg.db
'select()' returned 1:many mapping between keys and columns
Warning message:
In bitr(df$SYMBOL, fromType = "SYMBOL", toType = "ENTREZID", OrgDb = "org.Hs.eg.db") :
  1.28% of input gene IDs are fail to map
> head(df.id)
    SYMBOL ENTREZID
1      A2M        2
2     NAT1        9
3     NAT2       10
4  SERPINA3       12
5    AADAC       13
6     AAMP       14
> dim(df.id)
[1] 12287     2
>

代碼說有1.28%沒有map,所以,剛才是12444個基因,現在就變成了了12287個基因。
接下來,將最開始的文件和轉成ENTREZID的文件合併,用到merge函數。

> #讓基因名、ENTREZID、foldchange對應起來
> easy.df<-merge(df,df.id,by="SYMBOL",all=F)
> head(easy.df)
  SYMBOL  foldChange ENTREZID
1   A1CF -0.13606162    29974
2    A2M -0.50361737        2
3 A4GALT  0.22796773    53947
4  A4GNT -0.08822687    51146
5   AAAS -0.12161476     8086
6   AACS  0.23240224    65985

為了做GSEA分析,先要對所有的基因進行排序,就是大家常看到的那個蝴蝶圖,這裡用foldchange作為量化的標準,將基因從大到小的排序。

> #按照foldchange排序
> sortdf<-easy.df[order(easy.df$foldChange, decreasing = T),]#降序排序
> head(sortdf)
     SYMBOL foldChange ENTREZID
6398   MMP1   4.572613     4312
1724  CDC45   4.514594     8318
7042    NMU   4.418218    10874
1731  CDCA8   4.144075    55143
6190  MCM10   3.876258    55388
1706  CDC20   3.677857      991
> gene.expr = sortdf$foldChange#把foldchange按照從大到小提取出來
> head(gene.expr)
[1] 4.572613 4.514594 4.418218 4.144075 3.876258 3.677857
> names(gene.expr) <- sortdf$ENTREZID#給上面提取的foldchange對應上ENTREZID
> head(gene.expr)
    4312     8318    10874    55143    55388      991 
4.572613 4.514594 4.418218 4.144075 3.876258 3.677857

有了這個ENTREZID和foldchange信息的gene.expr之後,就可以使用clusterProfiler進行GSEA分析了,進行GSEA分析。
這裡就很簡單,GSEA就一句代碼:

kk <- gseKEGG(gene.expr, organism = "hsa")

是不是出奇的簡單。

> kk <- gseKEGG(gene.expr, organism = "hsa")
preparing geneSet collections...
GSEA analysis...
leading edge analysis...
done
Warning messages:
1: In preparePathwaysAndStats(pathways, stats, minSize, maxSize, gseaParam,  :
  There are ties in the preranked stats (0.02% of the list).
The order of those tied genes will be arbitrary, which may produce unexpected results.
2: In serialize(data, node$con) :
  'package:stats' may not be available when loading
3: In serialize(data, node$con) :
  'package:stats' may not be available when loading
4: In serialize(data, node$con) :
  'package:stats' may not be available when loading
5: In serialize(data, node$con) :
  'package:stats' may not be available when loading
6: In fgseaMultilevel(...) :
  For some pathways, in reality P-values are less than 1e-10. You can set the `eps` argument to zero for better estimation.
> head(kk)
               ID                  Description setSize enrichmentScore      NES
hsa04110 hsa04110                   Cell cycle     114       0.6698529 2.740968
hsa03050 hsa03050                   Proteasome      43       0.7099227 2.425653
hsa05169 hsa05169 Epstein-Barr virus infection     193       0.4337991 1.932303
hsa04657 hsa04657      IL-17 signaling pathway      85       0.5624088 2.172820
hsa03030 hsa03030              DNA replication      33       0.7233029 2.309149
hsa01230 hsa01230  Biosynthesis of amino acids      62       0.5891945 2.178783
               pvalue     p.adjust      qvalues rank                   leading_edge
hsa04110 1.000000e-10 3.240000e-08 2.431579e-08 1210 tags=40%, list=10%, signal=37%
hsa03050 1.358588e-08 2.200913e-06 1.651757e-06 2469 tags=65%, list=20%, signal=52%
hsa05169 8.736724e-08 9.435662e-06 7.081345e-06 2770 tags=39%, list=23%, signal=31%
hsa04657 1.413224e-07 1.144711e-05 8.590914e-06 2830 tags=49%, list=23%, signal=38%
hsa03030 2.526900e-07 1.637431e-05 1.228871e-05 1867 tags=64%, list=15%, signal=54%
hsa01230 1.176431e-06 6.352728e-05 4.767642e-05 2868 tags=55%, list=23%, signal=42%
                                                                                                                                                                                                                                                                                                                                                                               core_enrichment
hsa04110                                                                                                                                                         8318/991/9133/890/983/4085/7272/1111/891/4174/9232/4171/993/990/5347/701/9700/898/23594/4998/9134/4175/4173/10926/6502/994/699/4609/5111/1869/1029/8317/4176/2810/3066/1871/1031/9088/995/1019/4172/5885/11200/7027/1875/7534
hsa03050                                                                                                                                                                                                                                       5688/5709/5698/5693/3458/5713/11047/5721/5691/5685/5690/5684/5686/5695/10213/23198/7979/5699/5714/5702/5708/5692/5704/5683/5694/5718/51371/5682
hsa05169 3627/890/6890/9636/898/9134/6502/6772/3126/3112/4609/917/5709/1869/3654/919/915/4067/4938/864/4940/5713/5336/11047/3066/54205/1871/578/1019/637/916/3383/4939/10213/23586/4793/5603/7979/7128/6891/930/5714/3452/6850/5702/4794/7124/3569/7097/5708/2208/8772/3119/5704/7186/5971/3135/1380/958/5610/4792/10018/8819/3134/10379/9641/1147/5718/6300/3109/811/5606/2923/3108/5707/1432
hsa04657                                                                                                                                                                 4312/6280/6279/6278/3627/2921/6364/8061/4318/3576/3934/6347/727897/1051/6354/3458/6361/6374/2919/9618/5603/7128/1994/7124/3569/8772/5743/7186/3596/6356/5594/4792/9641/1147/2932/6300/5597/27190/1432/7184/64806/3326
hsa03030                                                                                                                                                                                                                                                                           4174/4171/4175/4173/2237/5984/5111/10535/1763/5427/23649/4176/5982/5557/5558/4172/5424/5983/5425/54107/6119
hsa01230                                                                                                                                                                                                             29968/26227/875/445/5214/440/65263/6472/7086/5723/3418/7167/586/2597/5230/2023/5223/5831/6888/50/5315/3419/10993/2805/22934/3421/5634/3417/5232/221823/2027/5211/384/5832

返回的kk文件很複雜,總共48行,11列。

> dim(kk)
[1] 48 11

1,代表的KEGG中的信號通路,比如hsa04110就是KEGG中的Cell cycle的信號通路
2,對信號通路的描述,也就是信號通路的名字
3,該信號通路的基因個數
4,很熟悉的富集分數,就是ES
5,這是標準化以後的ES,全稱是normalized enrichment score
6,P值
7,矯正以後的p值
8,Q值,也有的寫FDR q-val(false discovery rate),表示錯誤發現率
9,這裡的rank就是ES在頂點時候,那個最幸運基因的位置,或者說是排名
10,這裡的leading_edge有點複雜,對富集貢獻最大的基因成員,即領頭亞集,用於定義Leading-edge subset的參數有:Tags,List,Signal,對於一個基因集而言,定義其中對Enrichment score貢獻最大的基因為核心基因,也稱之為leading edge subset,也就是ES頂點的之前的基因。tags表示核心基因佔該基因集基因總數的比例,而list表示核心基因佔所有基因總數的比例,signal利用這兩個指標計算得到,公式如下:

N代表所有基因的數目,Nh代表該基因集下的基因總數。對於一個基因集而言,當核心基因的數目和該基因集下的基因總數相同,signal取值最大,當該基因集的基因數目和所有基因數目接近時,signal的取值接近於0。當然,我們希望的是signal越大越好。
11,這個core_enrichment就是主要富集的基因,下面的數字其實是ENTREZID,就是一個一個基因,換句話說,就是做GSEA分析的基因列表中,Hit到該目的通路的基因列表。

接下裡,需要按照ES的大小,給通路排序,然後保存起來,後面用來可視化。

#按照enrichment score從高到低排序,便於查看富集通路
sortkk<-kk[order(kk$enrichmentScore, decreasing = T),]
head(sortkk)
dim(sortkk)
write.table(sortkk,"gsea_output2.txt",sep = "\t",quote = F,col.names = T,row.names = F)

通過查看gsea_output2.txt,選擇你想畫的pathway,記下通路的term ID
開始畫圖,不需要另外準備輸入文件,clusterProfiler直接可以用gseaplot出圖:

gseaplot(kk, "hsa04510")#很簡單的代碼是吧

可以改變參數,更改線條的顏色。

gseaplot(kk, "hsa04510", color.line='steelblue')

在這裡,我們看到ES是負值,ES是負值,就是表示,功能集中在尾部,就是表示實驗組低表達,對照組高表達。
這裡用到clusterProfiler畫圖,如果覺得不夠美觀,還可以用enrichplot的包來畫圖

#另一種出圖方式是模擬Broad institute的GSEA軟體的圖,可以用gseaplot2出圖:
library(enrichplot)
gseaplot2(kk, "hsa04510")
gseaplot2(kk, "hsa04510", color = "firebrick", rel_heights=c(1, .2, .6))#改變更多參數,為了美觀

是不是感覺有點Nature的味道了。
它還有更外一個功能,就是支持同時展示多個pathways的結果。

gseaplot2(kk, row.names(sortkk)[1:4])

上圖用的是ES排名前4個畫圖,也可以用你自己感興趣的通路畫圖,自己在剛才保存的txt文件裡挑選就行。

paths <- c("hsa04510", "hsa04512", "hsa04974", "hsa05410")
gseaplot2(kk, paths)

這裡的GSEA分析其實由三個圖構成,GSEA分析的runningES折線圖,還有下面基因的位置圖,還有所謂的蝴蝶圖。如果不想同時展示,還可以通過subplots改變。

gseaplot2(kk, paths, subplots=1)#只要第一個圖
gseaplot2(kk, paths, subplots=1:2)#只要第一和第二個圖
gseaplot2(kk, paths, subplots=c(1,3))#只要第一和第三個圖

如果想把p值標上去,也是可以的。

gseaplot2(kk, paths, color = colorspace::rainbow_hcl(4), pvalue_table = TRUE)

到目前為止,基本上用KEGG庫做注釋的GSEA分析就做的差不多了,還想了解更多的,可能需要對clusterProfiler ,enrichplot兩個包好好研讀一下,說不定有驚喜。
最後甩出一個代碼:

gseaplot2(kk,#數據
          row.names(sortkk)[39],#畫那一列的信號通路
          title = "Prion disease",#標題
          base_size = 15,#字體大小
          color = "green",#線條的顏色
          pvalue_table = TRUE,#加不加p值
          ES_geom="line")#是用線,還是用d點

相關焦點

  • 生信分析+Meta分析實操視頻資源免費領取!
    學霸資源寶庫此次一次性解決寫作難的問題,文獻下載、SCI寫作、綜述寫作、Meta分析、生信分析、基金標書、實驗操作視頻等等統統搞定,助您快速實現科研通關(endnote正版軟體安裝包也在裡面哦)!)8、Image J 最新版本(包含安裝教程及MAC版本)③Image J使用方法進階系列教程(共10課時)生信數據分析必看6個課件:
  • R語言:如何快速生成許多差異明顯的顏色?
    在生成大量元素比較圖時要明顯區分不同樣本,比如宏基因組中的物種分析:方法一:自定義自定義顏色:優點是選擇差異明顯的顏色,缺點是費時費力,不知選多少種,眼睛都要挑花。#0dbc21", "#280f7a", "#6373ed", "#5b910f" ,"#7b34c1" ,"#0cf29a" ,"#d80fc1", "#dd27ce", "#07a301", "#167275", "#391c82", "#2baeb5","#925bea", "#63ff4f")方法二:RColorBrewer包利用
  • 【語言班】R語言數據分析與可視化高級研修班(4.26-29)
    R語言是用於數據分析、數據可視化的高級程式語言,其功能包括:數據存儲和處理、科學計算工具;能夠進行幾乎所有的統計分析;內置豐富便捷的數據可視化功能
  • 輕鬆學會各種組學數據的R語言數據分析及作圖,發表文章
    可能有的人會有疑問,R語言是一種程式語言,我沒有任何計算機的基礎也適合使用R嗎?答案是可以的。原因是R軟體做分析及作圖,都有比較現成的R包及代碼。比如轉錄組分析相關的R包及代碼,可以用來做差異分析、火山圖、熱圖、PCA圖、WGCNA等。比如單細胞測序數據分析相關的R包及代碼,可以用來做細胞分型及聚類。還有RNA甲基化分析相關的、蛋白組代謝組相關的、臨床統計分析相關的R包及代碼。
  • 利用R語言進行logistic回歸分析 | 30 天學會R DAY 26
    第26 天 利用R語言進行logistic回歸分析Logistic回歸是醫學研究甚至是很多社會學研究常見的一種回歸方法,它主要針對結局變量為二分類或者多分類的數據
  • GSEA——從原理到實戰
    大家好, 今天給大家介紹如何用clusterProfiler進行基因集富集分析。分為三個部分:原理,實戰,總結。原理部分主要是對GSEA作者們2005年文(https://www.pnas.org/content/102/43/15545)想法的解讀,在實戰部分,用GSEA軟體進行基因富集分析,用clusterProfiler實現定製化的基因富集分析。
  • R語言的一些配色的R包
    超多朋友諮詢R語言可視化的配色問題,我也簡單整理了一下,希望對大家有幫助!
  • 生信分析幫你湊!學會深度挖掘快速發文章
    這個時候需要的是生信分析——深度的數據挖掘和分析處理,可以幫助臨床醫生不耗費大量的時間通過實驗攢數據,而是通過數據處理得到自己想要的信息,更快速地發文章。 學習哪種生信分析的工具?
  • 如何用R語言進行探索性因子分析(EFA)
    導入數據大家一般在進行探索性因子分析時都會使用SPSS,今天教大家如何在R語言中實現EFA。打開R studio,將數據導入R中點擊import Dataset,選擇From SPSS。因為本次分析的數據是以SPSS的sav格式保存的,所以這裡選擇從SPSS中導入。
  • Meta分析實操,直接搞定!
    實驗視頻 | 生信挖掘 | 雅思託福 | 醫學考博論文寫作作圖 | 論文投稿 | GRE/GMAT | 國自然臨近年底,各位回家了是不是下不了文獻?是不是還在為文章、標書發愁?學霸資源寶庫此次一次性解決寫作難的問題,文獻下載、SCI寫作、綜述寫作、Meta分析、生信分析、基金標書、實驗操作視頻等等統統搞定,助您快速實現科研通關!
  • 數據分析系列(3) | 如何用R語言進行相關係數與多變量的meta分析
    本文主體部分來自《全哥的學習生涯》,如需轉載請聯繫公眾號後臺。本
  • GSEA分析是個什麼鬼?(上)
    從題目中我們看到GSEA分析有三個特點: 分析的基因集合而不是單個基因; 將基因與預定義的基因集進行比較; 富集分析;看到這裡大家可能想起來了RNA-seq或者晶片分析中最為常見的兩種方法:GO(Gene Ontology)和KEGG pathway分析,它們有些相似但又不同。
  • 高級轉錄組調控分析和R語言數據可視化第十三期 (線上開課)
    而且分析思路簡潔清晰,是入門生信,學習生信分析思路和數據可視化的首選。數據分析是相通的,通過一個簡單的課程理解其中的原理,就可以推而廣之,延伸到其它類型的數據分析,如擴增子、宏基因組、單細胞等。生信分析離不開程序寫作,這部分沒想像的難,只要跟著我們操作下來,就可以理解,具體見《生物信息中的程序學習心得》。課程大綱請詳細閱讀課程簡介,如果以下內容您全精通,不必參加此培訓。每節課1小時一個主題,理論結合實戰,學懂原理,實戰實操,全是老司機多年經驗、流程和代碼的無私分享,手把手帶您快速入門、節約寶貴的時間,助力科研成果早日產出。
  • 雪球說生信 | 生信中的R包該怎麼安裝?
    要想生信統計學的好,編程學習少不了。雖然資料庫和軟體的學習,可以解決生信學習過程中的部分分析,但是遇到一下高分文章中的高大上的可視化作圖,僅僅靠資料庫是完成不了的。R語言作為統計分析、可視化繪圖、數據挖掘和機器學習的最常用的語言之一,是一款開源且相對簡單的程式語言。在生信信息分析中有著廣泛的應用。做生信,學習R語言,除了學習R語言的相關語法外,還要學習一些特定的R包。
  • 生信快速入門—R語言與統計分析
    和《乾貨︱ R語言繪圖—基礎圖形參數整理》,我們已經介紹了R語言的加載和數據導入方法,以及如何使用R語言繪製基本圖形。在數據被組織成合適的形式後,我們便要開始使用圖形探索數據,因此我們需要用數值描述每個變量的分布,去探索變量之間的關係。比如,經過新藥實驗後,用藥組和安慰劑組的治療效果之間的差異如何?而這其實可以通過統計學方法去研究組間差異。因此,今天這一期會談到如何用R語言進行基礎的統計分析。
  • 三維基因組學分析實戰培訓班,線上直播課,2天僅需399(生信技能樹粉絲特權價格)
    所以你可以看到我們的生信技能樹的2019年終總結  ,你的生物信息學成長寶藏,以及2020學習主旋律,B站74小時免費教學視頻為你領路 ,我非常的相信你肯定是受益過,所以還留在我們的十萬粉絲隊伍裡面!恰好這兩天看到朋友圈菲沙基因的朋友都在宣傳他們的線上三維基因組學分析實戰學習班,以他們的實力,肯定是能幫助到這個領域的朋友。不過,公司跟個人不一樣,你不可能要求人家免費提供服務的啦,這個課程是付費的。但是不貴,兩天線上直播授課,才收499,而且你作為生信技能樹粉絲報名,有特殊通道(直接八折)。
  • 基於R語言的主成分和因子分析
    主成分分析主成分分析,是一種降維的分析方法,其考察多個變量間相關性的一種多元統計方法,研究如何通過少數幾個主成分來揭示多個變量間的內部結構
  • R語言實戰(14)——主成分分析和因子分析
    基本圖形R語言實戰(7)——基本統計分析R語言實戰(8)——回歸R語言實戰(9)——方差分析R語言實戰(10)——功效分析R語言實戰(11)——中級繪圖R語言實戰(12)——重抽樣與自助法R語言實戰(13)——廣義線性模型本期是我們推出
  • R語言 PCA主成分分析
    微信公眾號:生信小知識關注可了解更多的教程及生信知識。問題或建議,請公眾號留言;R語言 PCA主成分分析前言統計學背景知識協方差相關係數函數總結實例講解1.載入原始數據2.作主成分分析3.結果解讀4.畫主成分的碎石圖並預測5.PCA結果繪製後記前言PCA分析大家肯定經常看到,但是你真的懂PCA分析的結果嗎?
  • 自行入門R語言的故事(一波三折)
    R語言實戰的書也掃了一邊了,就是數據框,因子,一些基本概念搞明白了,上手R還是不會啊,上網查了查資料看,有好多公眾號,好多文章都在科普生信,我就跟大海撈針一樣,東拼西湊,還是覺得半知道半解,我也就沒有耐心了,於是我把生信技能樹的微信公眾號直接取關了,接著開始了渾水摸魚的研究生生活。