-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathDPT.Rmd
90 lines (68 loc) · 2.57 KB
/
DPT.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
---
title: destiny 2.0 brought the Diffusion Pseudo Time (DPT) class
output: rmarkdown::html_vignette
bibliography: bibliography.bib
vignette: >
%\VignetteIndexEntry{destiny 2.0 brought the Diffusion Pseudo Time (DPT) class}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r}
set.seed(1)
```
Diffusion Pseudo Time (DPT) is a pseudo time metric based on the transition probability of a diffusion process [@haghverdi_diffusion_2016].
*destiny* supports `DPT` in addition to its primary function of creating `DiffusionMap`s from data.
```{r}
library(destiny) # load destiny…
data(guo) # …and sample data
library(gridExtra) # Also we need grid.arrange
```
`DPT` is in practice independent of Diffusion Maps:
```{r}
par(mar = rep(0, 4))
graph <- igraph::graph_from_literal(
data - + 'transition probabilities' - + DiffusionMap,
'transition probabilities' - + DPT)
plot(
graph, layout = igraph::layout_as_tree,
vertex.size = 50,
vertex.color = 'transparent',
vertex.frame.color = 'transparent',
vertex.label.color = 'black')
```
However in order not to overcomplicate things, in *destiny*, you have to create `DPT` objects from `DiffusionMap` objects.
<small>(If you really only need the DPT, skip Diffusion Component creation by specifying `n_eigs = 0`)</small>
```{r}
dm <- DiffusionMap(guo)
dpt <- DPT(dm)
```
The resulting object of a call like this will have three automatically chosen tip cells. You can also specify tip cells:
```{r}
set.seed(4)
dpt_random <- DPT(dm, tips = sample(ncol(guo), 3L))
```
Plotting without parameters results in the DPT of the first root cell:
TODO: wide plot
```{r}
grid.arrange(plot(dpt), plot(dpt_random), ncol = 2)
```
Other possibilities include the DPT from the other tips or everything supported by `plot.DiffusionMap`:
TODO: wide plot
```{r}
grid.arrange(
plot(dpt, col_by = 'DPT3'),
plot(dpt, col_by = 'Gata4', pal = viridis::magma),
ncol = 2
)
```
The `DPT` object also contains a clustering based on the tip cells and DPT, and you can specify where to draw paths from and to:
```{r}
plot(dpt, root = 2, paths_to = c(1, 3), col_by = 'branch')
```
You can further divide branches. First simply plot branch colors like we did above, then identify the number of the branch you intend to plot, and then specify it in a subsequent `plot` call. In order to see the new branches best, we specify a `dcs` argument that visually spreads out out all four branches.
```{r}
plot(dpt, col_by = 'branch', divide = 3, dcs = c(-1, -3, 2), pch = 20)
```
References
==========
<div id="refs"></div>