I wish to focus my contribution singly on ScanPy vs. Seurat FindMarkers.
ScanPy's claim is it is essentially a speeded up version of Seurat FindMarkers with better performance (discussed below) written in Python.
What they are doing are essentially datamining the expression signal using multivariate statistics (PCA) focused through tSNE. There is no controversy or dispute with this approach at all (please see Caveat I shouldn't use the term "datamining" in context - bad habit).
What ScanPy is doing is using Graph theory
Louvian groups to extract the differential signal, presumably from the tSNE focused PCA. Cool.
If you've already got to grips with ScanPy then leveraging it as a data mining approach - to me - looks sensible. The statistics will not be hugely powerful, that doesn't mean they are bad, it approximately means they are solid.
What is ScanPy doing?
The speeding up is via parallelisation, which is very easy in Python. The implication is Seurat is not parallelised, which would amaze me. The authors talk about some form of 'chunking' (they say 'partially loading the object') via HDF5. This is officially what they say
ANNDATA is similar to R’s EXPRESSIONSET , but supports sparse data and allows HDF5-based backing of ANNDATA objects on disk, a format independent of platform, framework, and language. This allows operating on an ANNDATA object without fully loading it into memory
I am confused by this, because
HDF5 is a rapid I/O format - its not a datachunking format which his what the authors imply. Yes it facilitates datachunking but simply via rapid I/O.
HDF5 is of course independent Python, but why discuss that at length (we all know that) when the critical information is how the partially loaded object is achieved. There's a lot of strategies to achieve the last bit - none of which are discussed.
The overall levels of high performance Python (outside ScanPy) - because the reality is Python's core code is slow - are three steps:
- Parallelisation and code optimisation.
- Data chunking - using algorithm strategies to partial load data e.g. Hadoop strategies.
- Compiling via
numba and static typing via
The authors have done point 1, however again
HDF5 doesn't facilitate point 2 above, all it does is enable faster read/write.
HDF5 is not actually the fastest I/O either both
Pacquet (sp?) and
feather are faster but normally for
HDF5 is actually just as fast as
pickle under many tests (!).
So the paper is a bit weird in that it is sparsely described - but this does often happen admittedly. The partial loading stuff via
HDF5 is weird, because they are not describing how that is done.
The other bit that is weird is the ML and ANNDATA class. They state,
ANNDATA is similar to R’s EXPRESSIONSET 
I rarely use
R so to me that isn't clear. The other weird thing is the authors talk about ML, they use an ML library, but give no further details nor why it is used. What I would assume is either: that they use it to assist with
pseudotemporal ordering analysis OR they use it for unsupervised learning (PCA, tSNE). The latter is more likely.
Louvian groups are from the
igraph package they use
So in my personal view, despite the paper being a bit (to very) obscure I see no reason why ScanPy cannot replace Seurat purely in terms of the datamining being performed. Python is just as good at PCA and tSNE etc ... The use of Louvain groups is cool to trap that information. The key benefit of ScanPy is:
- your already familiar with it.
- faster - it definitely could be accelerated further.
- good for Python
The drawbacks I can see are:
- RNA analysis is dominated by
R and you'll likely pick up a
R focused reviewer (which could be fun).
- As per your previous post there appear shortcomings with ScanPy - but like the development team can't think of everything first time round.
- ScanPy2 is not released.
- its not generating a critical (test) probability to distinguish between expression levels just like Seurat - there are real advantages to this however.
Caveat I keep saying "data-mining" and I shouldn't. If the reviewers are perfectly happy with the above analysis alone, that's cool. This is because what I repeatedly call "data-mining" are other investigators final results, particularly in RNA expression. If your aim is to publish a big RNA-seq data set and identify the core features of e.g. a cellular immune response - good approach. I don't generate data, mine is purely analytics and algorithms, so my perspective (and reviewing standards) are different.
Just to state my interest in DEGs (or DGE). I use unsupervised learning, PCA, tSNE to generate a hypothesis and get a feel for the data. Then however, I do customised full-scale ML (supervised learning) to interrogate the data. Finally, I use DEG to assess which way around the ML result is pointing (under- or over-represented). I will not let the DEG override the ML (supervised learning) analysis - which I see as much stronger analysis. My context is different however and I'm consolidating the result is via extensive custom databases, i.e. very different.