Is it necessary to remove orphan-VJ/VDJ cells in practice?

Hello, I’ve got a question when going through the tutorial of scirpy. After invoking ir.tl.chain_qc(adata), the tutorial removes the cells that are multichain or orphan-VJ/VDJ.

adata = adata[adata.obs["chain_pairing"] != "multichain", :].copy()
adata = adata[~adata.obs["chain_pairing"].isin(["orphan VDJ", "orphan VJ"]), :].copy()

Is it necessary to remove orphan-VJ/VDJ cells in practice? In other words, I want to keep more cells in my own analysis. So, I don’t want to remove the cells with orphan VDJ/VJ, will this affect the identification of clonotypes later?

Hi @jefferyUstc,

excellent question!

In principle, it is no problem to skip the filtering, but there may be some side effects during clonotype(-cluster) definition that you’ll need to keep in mind during the interpretation. It also depends a bit on your choice for the receptor_arms parameter during clonotype definition.

Let’s revisit the example from the tutorial. Here’s the again the “original” clonotype network without orphan chains.

Here’s the same network, with receptor_arms="all" and orphan chains included.
As you can see, some relatively large and heterogeneous clonotype clusters came up in addition.

These are clusters of cells with “orphan” receptors. With receptor_arms="all", these clusters will only contain orphan chains, i.e. there will be no clusters that contain both cells with orphan chains and cells with full receptors. You can always filter them out after clonotype definition and should get the same result as if you removed orphan chains in the first place.

For instance, here’s the first few lines of chain information for cluster 12:

Now with receptor_arms="any" it becomes a huge hairy ball.
This is, because now cells with orphan chains can end up in the same cluster as cells with a full receptor. Like this the orphan chains form “links” between different full receptors and everything ends up being connected with everything.

In summary: it is no problem to keep them, but you probably don’t want to combine it with receptor_arms="any".

Hope that helps and let me know if you have further questions!

Cheers,
Gregor