I was thinking about the best method for normalization, which takes gene length into account (in order to compare genes)...

Do you think I can do that? : - taking raw counts and dividing each gene by its length - using the function rlog (DESeq2) on these counts divided by gene length (I would modify the rlog function to allow it to be used on decimal data).

I was wondering if it would be ok to do that.

Thank you very much for your help

  • $\begingroup$ Hi, you will need to supply the background to your question, i.e. what system, what genes, whats the question you are addressing? You appear to be performing some of ontology. $\endgroup$
    – M__
    Nov 21, 2019 at 2:31
  • $\begingroup$ It would be on human data (cancer) and for visualization (heatmap, etc.) and gene ontology (gsea, etc.) $\endgroup$
    – Nin00
    Nov 21, 2019 at 9:46
  • $\begingroup$ Can you elaborate on why you want to compare across genes? In terms of normalization methods, maybe calculating an RPKM or TPM value works for you? $\endgroup$
    – Phoenix Mu
    Apr 18, 2020 at 14:52

3 Answers 3


I am not sure what you mean by "decimal data", however, if you really want to use "gene length" information for normalization, take a look at EDASeq. Unlike DESeq or EdgeR, its normalization step takes gene length into account to produce "normalized counts", which you can feed into DESeq or EdgeR according to their manual.

Below is from the said manual:

The normalized counts (or the original counts and the offset) obtained using the EDASeq package can be supplied to packages such as edgeR (Robinson, McCarthy, and Smyth 2010) or DESeq (Anders and Huber 2010) to find differentially expressed genes.


I've found that normalisation of variance-stabilised counts from short-read sequencing based on the length of the longest transcript isoform seems to work well. Here's a bit more detail on that from the methods of our paper:

A variance-stabilizing transformation (VST) was applied to count data using the DESeq2 function varianceStabilizingTransformation, producing gene expression values that are adjusted for variance across sample conditions. To compare different genes to each other, this matrix was further transformed by dividing by transcript length in kbp to generate VSTPk values.

[FWIW, single-molecule long reads don't need any length-normalisation carried out on them]

  • $\begingroup$ Since VST transformed data are on a log2 scale, wouldn't you be better subtracting the log(length), rather than dividing? $\endgroup$ Jan 16, 2021 at 15:45
  • $\begingroup$ Yes, that's how it's implemented in the code. I don't have that in the text because it was less confusing to naive readers. $\endgroup$
    – gringer
    Jan 17, 2021 at 1:35

tximport is recommended by the DESeq author, that can account for gene lengths.

Of course, you don't really want to account for gene length, so much as transcript length. And since you might have different transcripts in there, you will have to use something like RSEM or kallisto which will intelligently figure out the right transcript length.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.