Allowed downstream analysis with get_normalized_expression?

Greetings all,

Hope I won’t be redundant with this issue.

I am interested in finding an integration tool which returns a full gene-space batch-corrected matrix to use for downstream analysis, and I bumped into scVI’s get_normalized_expression. Reading from other issues, I fully get how this matrix is obtained and what it mathematically means, but the potential usability remains unclear to me.

Is this matrix meant to be used for visualization/exploratory analysis only, or can it be used to perform some more advanced downstream tasks at the gene level, such as DE or CNV inference (as suggested here, even if most methods assume raw counts)?

Best,

Gabriele

It can be used for both, as well as other downstream tasks like imputation, denoising, and counterfactual prediction.

When you run scvi’ DE it already uses get_normalized_expression.

See our tutorials for more info: Documentation — scvi-tools

1 Like

Thank you for the prompt response.

What about running external DE analysis on the extracted matrix instead of native scVI function? From this issue, I see that some statistical frameworks are not recommended with this kind of data.

The key issue is not normalization itself: scVI returns model-estimated, denoised expression, rather than directly observed expression data, so classical p-value tests (Wilcoxon, Student t) lose their usual interpretation. You are welcome to try, of course.

The DE of scvi does not extract the full matrix, but samples decoded expression values under the fitted posterior distributions of the two populations; that’s the main difference.

Besides that, as you saw, it will be more memory-heavy for large-scale data unless using a threshold to make it sparse.

I understood the difference between the two approaches.

Is it then possible to compute “integrated” clusters on the matrix extracted with get_normalized_expression() and use them as input for differential_expression() in a one-vs-all fashion?

Theoretically, yes. DE of scvi will just require you to specify the column name of groups (usually cell types but can also be your very own clusters, achieved in any way you want).

We usually cluster based on the latent space, though (memory-efficient and batch denoised). See our tutorials for more information.

1 Like

You are right, that is much more easy.

Thank you @ori-kron-wis !

1 Like