Single cell RNA-seq data analysis with R視頻學習筆記(六)

第六講:降維Dimensionality reduction (PCA, tSNE and UMAP)
視頻地址:https://www.youtube.com/watch?v=qcLJ_JO6bn8&list=PLjiXAZO27elC_xnk7gVNM85I2IQl5BEJN&index=6

這一講里,主講人將介紹三種降維的方法(PCA, tSNE and UMAP),但是關于原理部分(一堆數學公式)他就不細說了(其實我也不想聽)。

在你做完測序以后,你會得到reads counts,然后你要做QC來質控一下。之后標準化。接下來你要做降維,PCA或者CCA(CCA在前一講里說過了),這里取決于你要干什么,如果你要整合數據,那么就要做CCA;如果僅僅是分析你的一個dataset,那么一般就是PCA。然后就是tSNE/UMAP、聚類,最后是差異基因。作為單細胞測序的流程,你有很多的options。如果你已經知道了你的classes,你都不用做降維,可以直接從標準化跳到差異基因,或者直接做軌跡分析。你也可以從PCA跳到聚類。這完全取決于你的dataset和你的需求。主講人不會一一介紹。但是,中間那個分析流程是最經典的。

那么問題來了,為什么要做降維呢?說白了,就是簡化你數據的復雜性。比如你的矩陣里有好幾千個基因,然后你把它們降至二維,把非線性轉化成線性,這非常有利于你的后續分析,尤其是clustering。其次,把你的數據“去冗余”。因為很多基因都與其他基因有關聯,你不需要去解釋你的不同樣品里幾千個基因的變化。第三,發現你數據里與condition最相關的信息。第四,減少下游分析的時間。第五,方便聚類。

降維的算法大致可以分為2類或3類。這一講主要介紹其中3種。

首先是PCA。這是一種線性代數的降維方法。

PCA利用奇異值分解(SVD)方法進行數據壓縮,上圖是對PCA的一個說明。你的M矩陣,可以被分解成好幾個矩陣,一個就是U矩陣,這個矩陣是所有的基因和主要成分之間的關系,可以代表每一個基因對于主要成分的重要性。還有一個矩陣就是V矩陣,是每一個樣品對于主成分的重要性。如果你查看主成分對象(上圖右下角),你會發現有兩個矩陣,分別是U(rotation)和V(x)。

這個主講人把PCA講的有點復雜了,我還是喜歡前一講里那個人舉的例子(魚的例子),非常的簡單明了(Single cell RNA-seq data analysis with R視頻學習筆記(四、五))。

上圖里可以看到,主成分1里儲存了更多的variation,大概占了你data里的98%的variation。而主成分2只占了2%。所以主成分1可以解釋你數據里的98%的variation。假設你的dataset里有2萬個基因,那么主成分1在這里就可以解釋你數據里50%的基因(取決于你的data是什么樣的),這也就可以把你的data進行去冗余了。而主成分2在這里基本上沒有提供什么有效的信息,所以如果你的PCA也像這樣,你完全可以忽略主成分2的影響。

在單細胞測序里,你可以根據里的主成分來判斷細胞的類型。有時候主成分會捕捉到你的gene pattern。但有時候,如果你有兩個測序文庫,主成分會捕捉到你的“測序深度”。有時也會捕捉到“異質性”,特別是你的樣品里有紅細胞的時候,紅細胞相比于成纖維細胞或其他細胞,它沒有很多的RNA,所以這時候PCA不僅會根據你的gene pattern來區分細胞,還會根據RNA的量來把細胞分開。比如上圖左下角,top 2兩個基因對主成分1 的影響是最大的。在右下角的圖里,你可以看到哪一個基因真正corresponding一些細胞,然后把這些細胞分到主成分1里。

上面是對PCA的一個總結,不難理解,就不多做說明了。缺點是在單細胞測序里,dataset很多都是0,會影響你的PCA結果。另外細胞大小和測序深度也會被PCA捕捉到,但這通常不是你想看的。所以最好是用非線性降維方式來處理單細胞測序dataset。

在講解非線性降維之前,主講人想先講一下什么是graph(圖形)。因為tSNE就是基于graph原理來的。在graph里,每一個藍色的點是一個細胞,也可以是一個基因。藍點之間的黑色粗線就是兩個細胞之間的connection。有粗線的兩個細胞說明他們在多維空間里的距離很近,是高度相關的。這樣就可以把你的data很形象的表示出來。并且這種相關性是可以被量化的。很多非線性降維方法都是基于這個概念設計的。這里分為兩步:(1)根據k connection建立一個加權圖,也叫KNN。(2)把你的Data低維度嵌入這個加權圖。舉個例子,圖里有13個藍點,也就是說你的矩陣13*13,你要把它們降到二維,也就是x和Y。這個過程就叫“嵌入”。

現在來看看tSNE。

首先,tSNE是一種非線性的降維方式。上圖比較形象:一般來說你的數據在多維空間里并不是線性分布的,比如說是一種“流形”的空間結構,而不是平面的(因為平面是二維)。所有的細胞組成了一個“卷”,然后看兩個白色的點,代表其中兩個細胞。如果你用PCA來計算兩個白點之間的距離,那么藍色的直線就是他們之間的歐式距離,是線性的。但是tSNE尋找的是白色點臨近的細胞(neighbor),但是這個圖里,兩個白點的直線距離內沒有細胞。而離它們近的則是沿著紅色線方向的細胞群,而紅色線就是tSNE方法里兩個白點的空間距離。

現在來看看tSNE是怎么做的。怎么確定你降維后的兩個細胞的空間距離,可以對應多維空間里兩個細胞的空間距離呢?上圖左邊,這是你的所有的細胞在多維空間里的分布。你想把左邊的多維空間,投影到右邊的二維上。它是利用一個叫t-distribution來做的。比如左邊的i細胞為中心點,那么離它很遠的點都不會被考慮為“nearest neighbor”,因為那些點的t-distribution是接近于0的(右下角的圖,峰的兩側趨近于0的位置是那些離i很遠的細胞所擁有的t-distribution值)。而j細胞是i的"nearest neighbor",無論在多維還是二維,j是i的“最近的鄰居”的“可能值”都是最高的。

舉個例子:上圖左邊,我們有兩個基因,3個細胞群。我們想把二維降到一維,也就是線性。那么剛開始(右圖),細胞是隨機分散在一條線的,然后根據幾次的重復,計算最鄰近的“鄰居”,相同顏色的細胞逐漸的被分到一起,這就是tSNE的concept。需要注意的是,在tSNE里,相對于較遠的細胞群(比如紅色和藍色,紅色和綠色),并不能說明哪一個群離紅色細胞更遠,所以不能根據tSNE圖上的細胞群的距離來判斷兩個群是否更接近或者更不接近。

這里有需要注意的點:(1)與PCA不同的是,tSNE是一個隨機的算法。在你進行PCA分析時,無論你跑幾遍PCA,你總能得到相同的圖。而對于tSNE來說,每一次你跑tSNE的時候,圖都是不一樣的。如果你想要你的結果是可重復的,你需要設置“seed”,就是“種子”,以這些種子為中心進行計算,這樣你的data才可以重復出來。(2)與前一張PPT講的一樣,上圖右邊,黑色箭頭所標注的細胞群的形態在每次tSNE運行結果里是conserved的,而這個群與其他群的相對位置在每次運行tSNE后卻是不一樣的,這是因為tSNE并不能解釋farthest距離,所以圖里的兩個不同群的相對位置是沒有意義的,不能拿來比較。(3)如果你想加樣品,比如你想把其他人的dataset和你的結合在一起分析,請重頭分析。

這是tSNE的一個總結,就不多說了。(這里有人問tSNE是不是聚類的方法,主講人說不是,這只是一個降維的方法)

下面講的是UMAP。

UMAP是一個比較新的方法,它是一種基于拓撲結構的方法。什么是拓撲結構?主講人說,簡單的理解:拓撲結構就是一個"surface"(面)。所以如果你three dimensions, 你就可以構成一個“球形”,或者是“正方形”,在這里是一個“四面體”。這個四面體就代表了4個樣品在多維空間里的結構。與tSNE不同的是,UMAP不是隨機的,而是根據拓撲結構來計算距離的。

再來看看這個圖,還是兩個基因,3個細胞群。UMAP與tSNE不同的是,UMAP考慮的不僅僅是每個細胞群的內部,它還要考慮整體的情況,比如紅色和藍色群,紅色和綠色群。這有什么好處呢?說明不管你跑幾次UMAP,甚至是只跑你的dataset的部分數據,你會得到非常相似的結果。當然,這不是說我們就不能用tSNE了,還是有很多人習慣用tSNE的。有時也很難說哪一個更好,只能說哪一個可以給我們更好看的結果,完全取決于你的dataset。

至于運算速度:UMAP在處理大量數據的時候(大于10^5個細胞的時候),它的速度慢于其他降維方法。

這是UMAP的總結。

最后這張PPT說的是不同的包里包含的降維方法,可以看到三大R包Seurat v3, Scater, Monocle v3都包含PCA、tSNE、UMAP。所以用哪一個還是看自己的習慣。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯系作者。

推薦閱讀更多精彩內容