使用PHATE可視化單細(xì)胞數(shù)據(jù)

在單細(xì)胞標(biāo)準(zhǔn)分析中芯丧,在兩個(gè)地方使用了降維技術(shù)稍计,特征提取和可視化席赂。特征提取我們都知道用的是PCA,在數(shù)據(jù)分析領(lǐng)域是比較常見的一種主成分提取的方法矛渴,可視化為什么也算是一種降維技術(shù)呢椎扬?這是因?yàn)槿祟愂歉泄賹?duì)三維以上的數(shù)據(jù)感知能力很弱,而實(shí)現(xiàn)三維的效果雖然可實(shí)現(xiàn)具温,但不太利于傳播盗舰。于是我們要把高維的數(shù)據(jù)特征降維到二維的平面上。這個(gè)過程就像拍照桂躏,把三維的人物景色拍到一張紙上,當(dāng)然是希望能夠盡可能地保留原來的信息川陆。

在單細(xì)胞數(shù)據(jù)分析中我們認(rèn)識(shí)了tsne以及umap這兩種可視化技術(shù)剂习。在2019年的Moon, van Dijk, Wang, Gigante et al. Visualizing Transitions and Structure for Biological Data Exploration. 2019. Nature Biotechnology.文章中作者用了新的算法(Potential of Heat-diffusion for Affinity-based Trajectory Embedding,PHATE )來實(shí)現(xiàn)單細(xì)胞數(shù)據(jù)的可視化碎捺,那么PHATE是怎樣的一種算法呢滚澜?

以下是文章摘要:

由高通量技術(shù)創(chuàng)建的高維數(shù)據(jù)需要可視化工具以直觀的形式顯示數(shù)據(jù)結(jié)構(gòu)和模式锋叨。我們提出了一種利用數(shù)據(jù)點(diǎn)之間的信息幾何距離來捕獲局部和全局非線性結(jié)構(gòu)的可視化方法:PAHATE仑扑。我們將PHATE與各種人工和生物數(shù)據(jù)集上的其他可視化工具進(jìn)行比較替蔬,發(fā)現(xiàn)它始終如一地在數(shù)據(jù)中保留一系列模式惭婿,包括連續(xù)的分化驾诈、分支和分群凤瘦,比其他工具更好冤竹。我們定義了一個(gè)流形保藏度量拂封,我們稱之為去噪嵌入流形保藏(denoised embedding manifold preservation ,DEMaP)鹦蠕,并證明了PHATE生成的低維嵌入在數(shù)量上比現(xiàn)有的可視化方法去噪效果更好冒签。對(duì)新生成的單細(xì)胞RNA測序數(shù)據(jù)集的分析,顯示了PHATE如何揭示對(duì)主要發(fā)育分支的獨(dú)特生物學(xué)洞察力钟病,包括識(shí)別三個(gè)以前未描述的亞群萧恕。我們還證明PHATE適用于多種數(shù)據(jù)類型,包括大規(guī)模細(xì)胞檢測肠阱、單細(xì)胞RNA測序票唆、Hi-C和腸道微生物組數(shù)據(jù)。

在單細(xì)胞數(shù)據(jù)PCA降維之后屹徘,就可以開始使用PHATE可視化數(shù)據(jù)了(同tsne與umap在單細(xì)胞數(shù)據(jù)分析中的位置相同)走趋。我們將在一些數(shù)據(jù)集上演示PHATE分析。我們將展示:

  • PHATE是如何工作的
  • 在多個(gè)數(shù)據(jù)集上運(yùn)行PHATE
  • 如何解釋PHATE圖
  • 使用擴(kuò)散勢(diffusion potential)進(jìn)行聚類
  • 如何為PHATE選擇參數(shù)
  • 如何排除PHATE圖中的常見問題
什么是PHATE缘回,為什么要使用它?

PHATE是Krishnaswamy實(shí)驗(yàn)室為可視化高維數(shù)據(jù)而開發(fā)的一種降維方法吆视。我們使用PHATE處理來自實(shí)驗(yàn)室的每個(gè)數(shù)據(jù)集:scRNA-seq、CyTOF酥宴、腸道微生物組概況啦吧、模擬數(shù)據(jù)等。PHATE被設(shè)計(jì)用來處理數(shù)據(jù)點(diǎn)之間嘈雜的非線性關(guān)系拙寡。PHATE生成一個(gè)低維表示授滓,它在數(shù)據(jù)集中同時(shí)保留本地和全局結(jié)構(gòu),因此您可以根據(jù)數(shù)據(jù)集中出現(xiàn)的單元之間關(guān)系的圖進(jìn)而形成對(duì)數(shù)據(jù)結(jié)構(gòu)的全局認(rèn)識(shí)肆糕。雖然PHATE可以用于多種數(shù)據(jù)模式的分析般堆,但我們將重點(diǎn)討論P(yáng)HATE在scRNA-seq分析中的應(yīng)用。

PHATE的靈感來自于擴(kuò)散圖(Coifman et al.(2008))诚啃,但它包含了幾個(gè)關(guān)鍵的創(chuàng)新淮摔,這些創(chuàng)新使生成二維或三維可視化成為可能,從而保持細(xì)胞之間存在的連續(xù)關(guān)系始赎。關(guān)于PHATE算法的完整解釋和橙,請參閱PHATE原稿(the PHATE manuscript)仔燕。

安裝
pip install --user phate

PHATE 也可以在R或者M(jìn)ATLAB 中實(shí)現(xiàn),但是我們今天為大家?guī)淼氖莗ython的是實(shí)現(xiàn)魔招。

PHATE參數(shù)

PHATE是sklearn的一個(gè)子類晰搀,它的API與PCA操作符的API匹配。要使用PHATE办斑,您必須首先實(shí)例化一個(gè)PHATE外恕。然后使用fit_transform來構(gòu)建數(shù)據(jù)的圖形,并降低數(shù)據(jù)的維數(shù)以實(shí)現(xiàn)可視化乡翅。

  • n_components—設(shè)置PHATE將減少輸入數(shù)據(jù)
  • knn的維數(shù)—設(shè)置計(jì)算內(nèi)核帶寬衰減所需的最近鄰
  • decay —設(shè)置內(nèi)核(kernel)尾部的衰減率

在scanpy的external接口中已經(jīng)安排好了:

Help on function phate in module scanpy.external.tl._phate:

phate(adata: anndata._core.anndata.AnnData, n_components: int = 2, k: int = 5, a: int = 15, n_landmark: int = 2000, t: Union[int, str] = 'auto', gamma: float = 1.0, n_pca: int = 100, knn_dist: str = 'euclidean', mds_dist: str = 'euclidean', mds: scanpy._compat.Literal_ = 'metric', n_jobs: Union[int, NoneType] = None, random_state: Union[NoneType, int, numpy.random.mtrand.RandomState] = None, verbose: Union[bool, int, NoneType] = None, copy: bool = False, **kwargs) -> Union[anndata._core.anndata.AnnData, NoneType]
    PHATE [Moon17]_.
    
    Potential of Heat-diffusion for Affinity-based Trajectory Embedding (PHATE)
    embeds high dimensional single-cell data into two or three dimensions for
    visualization of biological progressions.
    
    For more information and access to the object-oriented interface, read the
    `PHATE documentation <https://phate.readthedocs.io/>`__.  For
    tutorials, bug reports, and R/MATLAB implementations, visit the `PHATE
    GitHub page <https://github.com/KrishnaswamyLab/PHATE/>`__. For help
    using PHATE, go `here <https://krishnaswamylab.org/get-help>`__.
    
    Parameters
    ----------
    adata
        Annotated data matrix.
    n_components
        number of dimensions in which the data will be embedded
    k
        number of nearest neighbors on which to build kernel
    a
        sets decay rate of kernel tails.
        If None, alpha decaying kernel is not used
    n_landmark
        number of landmarks to use in fast PHATE
    t
        power to which the diffusion operator is powered
        sets the level of diffusion. If 'auto', t is selected
        according to the knee point in the Von Neumann Entropy of
        the diffusion operator
    gamma
        Informational distance constant between -1 and 1.
        `gamma=1` gives the PHATE log potential, `gamma=0` gives
        a square root potential.
    n_pca
        Number of principal components to use for calculating
        neighborhoods. For extremely large datasets, using
        n_pca < 20 allows neighborhoods to be calculated in
        log(n_samples) time.
    knn_dist
        recommended values: 'euclidean' and 'cosine'
        Any metric from `scipy.spatial.distance` can be used
        distance metric for building kNN graph
    mds_dist
        recommended values: 'euclidean' and 'cosine'
        Any metric from `scipy.spatial.distance` can be used
        distance metric for MDS
    mds
        Selects which MDS algorithm is used for dimensionality reduction.
    n_jobs
        The number of jobs to use for the computation.
        If `None`, `sc.settings.n_jobs` is used.
        If -1 all CPUs are used. If 1 is given, no parallel computing code is
        used at all, which is useful for debugging.
        For n_jobs below -1, (n_cpus + 1 + n_jobs) are used. Thus for
        n_jobs = -2, all CPUs but one are used
    random_state
        Random seed. Defaults to the global `numpy` random number generator
    verbose
        If `True` or an `int`/`Verbosity` ≥ 2/`hint`, print status messages.
        If `None`, `sc.settings.verbosity` is used.
    copy
        Return a copy instead of writing to `adata`.
    kwargs
        Additional arguments to `phate.PHATE`
    
    Returns
    -------
    Depending on `copy`, returns or updates `adata` with the following fields.
    
    **X_phate** : `np.ndarray`, (`adata.obs`, shape=[n_samples, n_components], dtype `float`)
        PHATE coordinates of data.
    
    Examples
    --------
from anndata import AnnData
import scanpy.external as sce
import phate
tree_data, tree_clusters = phate.tree.gen_dla(
    n_dim=100,
    n_branch=20,
    branch_length=100,
)
tree_data.shape
    (2000, 100)
adata = AnnData(tree_data)
sce.tl.phate(adata, k=5, a=20, t=150)
adata.obsm['X_phate'].shape
    (2000, 2)
sce.pl.phate(adata)
什么是核(kernel)?

如果你從未學(xué)過圖論或離散數(shù)學(xué)鳞疲,最后兩個(gè)參數(shù)可能會(huì)讓你感到困惑。為了理解它們峦朗,考慮一個(gè)非常簡單的圖建丧,k近鄰圖。這里波势,每個(gè)cell都是圖中的一個(gè)節(jié)點(diǎn)翎朱,邊存在于cell和它的k個(gè)近鄰之間。你也可以把它想象成一個(gè)所有細(xì)胞都連接在一起的圖尺铣,但是非相鄰細(xì)胞之間的連接的強(qiáng)度或權(quán)值為0拴曲,而相鄰細(xì)胞之間的邊的權(quán)值為1。

kNN圖為單細(xì)胞數(shù)據(jù)提供了一種非常強(qiáng)大的表示凛忿,但它也有一些缺點(diǎn)澈灼。例如,考慮以下圖表:

在左邊店溢,我們有一個(gè)k=4的kNN圖叁熔。請注意,所有的藍(lán)色細(xì)胞床牧,無論它們是否靠近紅色細(xì)胞荣回,其邊緣的重量都是相等的。還要注意戈咳,右下角的綠色細(xì)胞與紅色細(xì)胞沒有任何聯(lián)系心软,盡管它與相鄰細(xì)胞的距離微不足道。kNN圖的這兩個(gè)性質(zhì)著蛙,嚴(yán)格的邊界和統(tǒng)一的邊權(quán)值删铃,意味著選擇合適的k對(duì)于使用這個(gè)圖的任何方法都是至關(guān)重要的。

了克服這些限制踏堡,我們使用了右側(cè)徑向基核圖的一個(gè)變量猎唁。該圖將具有邊權(quán)值的單元格按其到紅色單元格的距離比例連接起來。您可以將這個(gè)內(nèi)核函數(shù)看作一個(gè)“軟”kNN顷蟆,其中的權(quán)值平滑地在0和1之間變化胖秒。注意:在實(shí)踐中缎患,所有cell在圖實(shí)例化期間的一個(gè)階段都是連接的,但是低于截止線(如1e-4)的邊被設(shè)置為0阎肝。

既然您已經(jīng)理解了這種區(qū)別,那么您可以將knn參數(shù)看作是找到相近c(diǎn)ell的基線肮街,將decay看作是邊緣加權(quán)的“柔軟度”风题。

在scanpy中的實(shí)現(xiàn)
import scanpy as sc
import scanpy.external as sce
from anndata import AnnData
import phate
results_file = 'E:\learnscanpy\write\pbmc3k.h5ad'
adata = sc.read_h5ad(results_file)
adata

AnnData object with n_obs × n_vars = 2223 × 2208 
    obs: 'n_genes', 'percent_mito', 'n_counts', 'percent_mito1', 'leiden'
    var: 'gene_ids', 'feature_types', 'n_cells', 'highly_variable', 'means', 'dispersions', 'dispersions_norm'
    uns: 'leiden', 'leiden_colors', 'leiden_sizes', 'neighbors', 'paga', 'pca', 'rank_genes_groups', 'umap'
    obsm: 'X_pca', 'X_umap'
    varm: 'PCs'

sce.tl.phate(adata, k=5, a=20, t=150)
adata.obsm['X_phate'].shape
(2223, 2)

adata
Out[75]: 
AnnData object with n_obs × n_vars = 2223 × 2208 
    obs: 'n_genes', 'percent_mito', 'n_counts', 'percent_mito1', 'leiden'
    var: 'gene_ids', 'feature_types', 'n_cells', 'highly_variable', 'means', 'dispersions', 'dispersions_norm'
    uns: 'leiden', 'leiden_colors', 'leiden_sizes', 'neighbors', 'paga', 'pca', 'rank_genes_groups', 'umap'
    obsm: 'X_pca', 'X_umap', 'X_phate'
    varm: 'PCs'

我們在X_phate所降的維度中可視化一下之前用leiden聚類的結(jié)果:

sce.pl.phate(adata, color='leiden',color_map='tab20',)

在此結(jié)構(gòu)上,我們也可以繪制基因的變化:

sce.pl.phate(adata, color='CD79A',color_map='tab20',)

其實(shí)眾多的軌跡推斷本質(zhì)上也是學(xué)習(xí)一種低維的結(jié)構(gòu)嫉父,以反映我們細(xì)胞之間的關(guān)系沛硅,也可以說是一種降維。至此绕辖,我們應(yīng)該知道摇肌,降維至少在細(xì)胞中有過三次主要的應(yīng)用:特征提取 ,可視化仪际,軌跡推斷围小。如果對(duì)降維的概念很難理解,那么可以把它們理解為一種排序分析:降維是一種排序树碱,在低維空間中保持高維空間的主要次序肯适。



visualizing_phate

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市成榜,隨后出現(xiàn)的幾起案子框舔,更是在濱河造成了極大的恐慌,老刑警劉巖赎婚,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刘绣,死亡現(xiàn)場離奇詭異,居然都是意外死亡挣输,警方通過查閱死者的電腦和手機(jī)纬凤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來歧焦,“玉大人移斩,你說我怎么就攤上這事【钼桑” “怎么了向瓷?”我有些...
    開封第一講書人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長舰涌。 經(jīng)常有香客問我猖任,道長,這世上最難降的妖魔是什么瓷耙? 我笑而不...
    開封第一講書人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任朱躺,我火速辦了婚禮刁赖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘长搀。我一直安慰自己宇弛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開白布源请。 她就那樣靜靜地躺著枪芒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谁尸。 梳的紋絲不亂的頭發(fā)上舅踪,一...
    開封第一講書人閱讀 48,954評(píng)論 1 283
  • 那天,我揣著相機(jī)與錄音良蛮,去河邊找鬼抽碌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛决瞳,可吹牛的內(nèi)容都是我干的货徙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼瞒斩,長吁一口氣:“原來是場噩夢啊……” “哼破婆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起胸囱,我...
    開封第一講書人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤祷舀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后烹笔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裳扯,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年谤职,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了饰豺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡允蜈,死狀恐怖冤吨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情饶套,我是刑警寧澤漩蟆,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站妓蛮,受9級(jí)特大地震影響怠李,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一捺癞、第九天 我趴在偏房一處隱蔽的房頂上張望夷蚊。 院中可真熱鬧,春花似錦髓介、人聲如沸惕鼓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呜笑。三九已至,卻和暖如春彻犁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凰慈。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來泰國打工汞幢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人微谓。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓森篷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親豺型。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仲智,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容