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

2021-02-24 小張聊科研

專注生物分析最前沿

定期解讀生信文章

提供生信分析思路和套路

看圖說話欄目曾介紹過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點

相關焦點

  • GSEA分析合理性討論
    此晶片的目的是對功能學行為進行佐證,沒有挑選關鍵基因進行後續的機制研究,故而沒有進行多組樣本的檢測。那我們現在就繼續討論一下,文中的GSEA的顯著性結果圖(下圖)到底該如何來重現。只是術業有專攻,他們專注溼實驗以及科研想法,在數據分析方面略微薄弱,也忽略了其中的細節描述。然後我們就乾脆直接聯繫了完成晶片服務的公司,拿到了全部數據分析資料。
  • 生信分析幫你湊!學會深度挖掘快速發文章
    這個時候需要的是生信分析——深度的數據挖掘和分析處理,可以幫助臨床醫生不耗費大量的時間通過實驗攢數據,而是通過數據處理得到自己想要的信息,更快速地發文章。 學習哪種生信分析的工具?
  • 如何做GO和KEGG富集分析(GSEA)?
    我們做完RNA-seq差異基因表達分析後,一個頭疼的問題就是如何完成GO和KEGG的富集分析。
  • 生信圖文鑑賞與解析:LASSO分析
    橘子,生信組技術支持,特徵描述:
  • 7G R語言乾貨教程,視頻加書籍免費領!
    >R語言視頻教程: 1. 1、關注《生信之家》公眾號。醫藥加生信+基礎+臨床研究實操訓練,科研專家授課,微信互動答疑,課後視頻可回放!迅速提升科研能力!高質量課題與文章專家一對一輔導為幫助廣大初學者和具有一定基礎的研究者能更好掌握生信分析,回顧性臨床研究,網絡藥理,科研作圖,基因編輯,m6a等套路與常用技能, 考慮目前在疫情期間的實際情況,我們決定召開下面10多門在線實操學習班(每個月輪迴開班),為了保證學習效果,我們採用Zoom網絡會議平臺授課,可回放,互動體驗效果好!
  • 用R進行Lasso regression回歸分析
    歡迎關注」生信修煉手冊」!
  • 這個函數支持差異基因富集分析,也支持GSEA
    做富集分析,有幾個通路其實本質上是同一條,想精簡富集的結果,怎麼辦?如果你用clusterProfiler做富集分析,一行代碼就能搞定精簡的問題。今天小丫用clusterProfiler做GSEA,也想精簡。於是?
  • 【R語言】相關性分析、相關係數的顯著性檢驗及可視化
    本篇文章介紹基於R語言的相關性分析、相關係數的顯著性檢驗及可視化,該教程為個人筆記,大家也可參考學習,不足之處也歡迎大家批評指正!相關性分析用於評估兩個或多個變量之間的關聯,能通過定量指標描述變量之間的強弱、直接或間接聯繫。
  • 單基因生信分析2--下遊分析
    前期小王子已經更過單基因生信分析--差異分析&生存分析,今天,小王子跟大家一起學習如何進行下遊挖掘,也就是本期主打的單基因下遊富集通路,以下以
  • 生信小工具:Orthofinder使用教程
    因此,真正識別直向同源物的唯一方法是通過分析系統發育樹。確保直系分配正確的唯一方法是對所考慮的物種的最後共同祖先的單個基因下降的所有基因進行系統發育重建。這組基因是正交群。因此,定義直系同源的唯一方法是分析正交群。安裝廢話說了一大篇,是時候開始安裝軟體了。
  • CNS 一作大神:這個生信分析方法帶你不做實驗快速發論文!
    這是一篇完全基於生物信息學分析的文章,文章的思路:分析 TCGA 資料庫中的數據——利用 R 語言的 WGCNA 包——結合在線工具——發表文章。 不得不說,生信分析類文章最近兩年井噴式發表。在國內生信類文章幾乎能媲美同級別的基礎研究型文章,且普通的雜誌對生信分析很友好,容易接納。
  • SPSS實操教程——單因素方差分析
    如何驗證是否符合正態分布:分析——描述——探索然後將應變量和分組變量分別選取如下圖所示可選框中,點擊繪製,勾選帶檢驗的正態圖。點擊繼續,確定。輸出結果。第三張表就是單因素方差分析,P值大於0.05,提示三組之間比較沒有達到統計學意義。這個時候,其實就沒有必要再進行組間兩兩比較了。
  • r語言有什麼優劣勢及R語言的未來發展趨勢_R語言在現實中的應用
    r語言有什麼優劣勢分析 R語言擁有強大的軟體包生態系統與圖表優勢 安全等相關功能並沒有被內置在R語言當中,Peng指出。此外,R語言無法被嵌入到網絡瀏覽器當中,Peng表示。「我們不能利用它開發Web類或者網際網路類應用程式。」再有,我們基本上沒辦法利用R語言當作後端伺服器執行計算任務,因為它在網絡層面缺乏安全性保障,他表示。
  • R語言data manipulation學習筆記之subset data
    個人博客: https://ytlogos.github.io/公眾號:生信大講堂往期回顧數據分析過程中我們常常需要從數據集中抽取部分數據,本文將介紹如何提取子數據集,主要利用R自帶的函數,以後會專門介紹data manipulation
  • 掌握R語言for循環一文就夠了(認真臉)
    嗨,大家好,我就是帥氣的小編~R語言是進行統計分析和可視化的優秀語言(其實機器學習和網頁製作也可以用R,小聲說~|ω`))R語言相信大家在利用R語言進行數據分析的時候可能會有大數據分析需求。,默認優先進行列運算~我現在想要進行for循環了,首先明確我的目的是想計算每一行之間的pearson相關係數和P值,最後得到一個4列的data.frame並輸出為csv,可用excel進行進一步編輯。
  • R語言-stringr-字符串處理
    R包stringr處理字符相對簡單,尤其是我常用Power BI,但是對M語言不熟悉,不會處理字符數據,往往我就先利用R清洗字符數據列。本文記錄工作中常用的字符處理函數,部分案例照搬R for Data Science的字符部分。
  • 利用R語言進行層次聚類分析以及繪製樹狀圖
    這種圖解表示經常多種場合中被使用:在層次聚類中,它說明了由相應分析產生的聚類的排列;在計算生物學中,它顯示了基因或樣本的聚類,有時在熱圖的邊緣在系統發育學中,它顯示了各種生物類群之間的進化關係。 在這種情況下,樹狀圖也稱為系統發育樹。    其實最簡單的理解就是樹形圖是通過計算距離(計算距離的方式)來表示兩個對象之間關係遠近的圖解。
  • R語言從入門到精通:Day12--R語言統計--回歸分析
    回歸分析在現代統計學中非常重要,本次教程內容安排如下:  首先:看一看如何擬合和解釋回歸模型,然後回顧一系列鑑別模型潛在問題的方法,並學習如何解決它們;  其次:我們將探究變量選擇問題(對於所有可用的預測變量,如何確定哪些變量包含在最終的模型中?)
  • 如何進行血清外泌體的miRNA標誌物的生信數據挖掘?本文告訴你研究套路!
    EVs的其中一個重要的應用就是可以作為標誌物用於疾病的診斷,血清的外泌體在體內循環,可以作為無創標誌物去分析,是一個很好的研究方向。而通過生物信息學手段挖掘疾病標誌物已經有很多文章,那麼外泌體的標誌物又怎樣去通過生信分析呢?在這裡,總結了最近剛剛發表的幾篇血清外泌體的RNA標誌物文章,分析其中用到的思路,工具和研究套路。
  • 使用IMonitor進行免疫組庫分析
    > 其實前面我們已經分享了MiXCR,還有igblast,這兩個免疫組庫上遊分析軟體已經夠用