Skip to main content
. Author manuscript; available in PMC: 2020 Jul 7.
Published in final edited form as: Nat Methods. 2020 Jan 13;17(3):302–310. doi: 10.1038/s41592-019-0689-z

Algorithm 1.

Pseudocode for the PhEMD analytical approach
1: procedure PHEMD(multispecimen.data)
2: ▹Map first-level manifold (e.g., cell-state embedding)
3: data.all←aggregateData all specimens(multispecimen.data)
4: first.level.embedding←embedDatapoints(data.all)
5: first.level.clusts←clusterPoints(first.level.embedding)
6: cluster.ground.dists←computeGroundDists(first.level.embedding; first.level.clusts)
7:
8: ▹Map higher-level manifold (e.g., single-cell specimen embedding)
9: specimen.clus.prop←GetClusterProportions(data.all; first.level.embedding; first.level.clusts)
10: for each pair of specimens si; sj do
11: Dists[i; j]←EMD(cluster.ground.dists; specimen.clus.prop[i]; specimen.clus.prop[j])
12: specimen.embedding←DiffusionMap(Dists)
13: specimen.clusters←ClusterSpecimens(Dists)