在單細(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ì)降維的概念很難理解,那么可以把它們理解為一種排序分析:降維是一種排序树碱,在低維空間中保持高維空間的主要次序肯适。