【科研貓·高級繪圖】 tSNE 分析

  • 2019 年 11 月 23 日
  • 筆記

t-分布領域嵌入演算法(t-distributed stochastic neighbor embedding,tSNE),是一種常用的非線性降維方法,非常適用於高維數據降維到2維或者3維,從而進行可視化。

比如我們在進行轉錄組數據分析的時候,每一個樣本可以檢測到3萬個基因,如果有10個這樣的樣本,我們如何判斷哪些樣本之間的相似性能高。當然,通過層次聚類等方法,可以顯示樣本與樣本之間的關係。

以一篇發表在Nature Genetics (IF = 25.455)上的文章為例,通過對RNA-seq表達譜數據進行tSNE分析,將疾病分為不同的亞型。

本次教程為大家帶來是,是如何根據表達譜數據,通過運用tSNE分析的方法,顯示樣本與樣本之間的差異性。

1. R包載入和數據入讀

首先我們載入需要用到的R包,ggpubr和ggthemes包用於作圖,Rtsne包用於計算tSNE。

讀入表達譜數據並顯示文件前6行,每一列為一個樣本,每一行為一個基因。我們使用表達譜樣本一共有10個,其中M1到M5為Case,M6-M10為control。

2. tSNE計算

使用Rtsne包中的Rtsne函數計算tSNE。通過計算結果前六行,可以看出最終的結算結果為一個矩陣,一共有2列10行,每一行為一個樣本,兩列分別為tSNE_1和tSNE_2。

接下來,我們就用這個計算結果,來看Case和Control這兩組樣本之間的差異。

我們建立一個data.frame,將繪圖需要用到的數據都存入進來。

然後,便是繪圖的時刻了~

3. 基礎作圖

ggpubr提供了非常多的作圖函數,可以方便大家繪製更美觀的科研做圖。這裡我們使用ggscatter這個函數,x軸為tSNE_1,y軸為tSNE_2。

這樣,我們一張tSNE圖就做完啦~

4. 中級美化

當然,這些圖還有很多不足之處,比如我們想更直觀的顯示兩組之間的差別,所以我們需要根據點的分布計算他們的置信區間。

另外,我們也可以修改圖的樣式和顏色,來對繪圖結果進行提升。

5. 高級美化

當然,我們還不能僅僅滿足於現有的成果,作圖是一個細緻的過程,我們需要精雕細琢。比如我們有時候需要直接在圖上顯示樣本名稱,從圖上反映出樣本之間的分布。

6. 終極美化

我們通過研究表達譜發現,CD52這個基因在Case和Control這兩組之間有顯著差異,那麼我們如何將這種差異顯示在圖表中呢?另外如果樣本數目比較多,比如有100個樣本,我們並不想把所有的樣本名稱都顯示在圖表中,只想顯示重要的2-4個樣本,有沒有什麼更好的操作方法呢?

這裡就到了我們終極作圖美化的環節了~

點的形狀代表不同的類型,是Case還是Control,點的顏色代表CD52這個基因表達量的高低,藍色代表低表達,紅色代表高表達。從圖中可以非常清晰的看到,CD52基因在Control組中是高表達的,這個基因相關的疾病包括淋巴細胞白血病和複發緩解型多發性硬化,值得好好深入研究一下。