【科研貓·高級繪圖】 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組中是高表達的,這個基因相關的疾病包括淋巴細胞白血病和複發緩解型多發性硬化,值得好好深入研究一下。