<p>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 <a href="https://doi.org/10.1084/jem.20160470" rel="nofollow noreferrer">our paper</a>:</p>
<blockquote>
<p>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.</p>
</blockquote>
<p>[FWIW, single-molecule long reads don't need any length-normalisation carried out on them]</p>

CC BY-SA 4.0
2021-01-16T15:45:08.797Z
Since VST transformed data are on a log2 scale, wouldn't you be better subtracting the log(length), rather than dividing?
Ian Sudbery
CC BY-SA 4.0
2021-01-17T01:35:05.027Z
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.
gringer
CC BY-SA 4.0
2021-01-15T03:18:26.627Z
2021-01-15T03:18:26.627Z
gringer
<p>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 <code>EDASeq</code>. Unlike <code>DESeq</code> or <code>EdgeR</code>, its normalization step takes gene length into account to produce "normalized counts", which you can feed into <code>DESeq</code> or <code>EdgeR</code> according to their <a href="https://bioconductor.org/packages/release/bioc/vignettes/EDASeq/inst/doc/EDASeq.html#differential-expression-analysis" rel="nofollow noreferrer">manual</a>.</p>

<p>Below is from the said manual: </p>

<blockquote>
  <p>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.</p>
</blockquote>

CC BY-SA 4.0
2019-11-20T08:50:08.993Z
2019-11-20T08:50:08.993Z
haci
<p>tximport is recommended by the DESeq author, that can account for gene lengths.</p>
<p>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.</p>

CC BY-SA 4.0
2020-12-14T19:17:14.747Z
2020-12-14T19:17:14.747Z
swbarnes2
<p>I was thinking about the best method for normalization, which takes gene length into account (in order to compare genes)...</p>

<p>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).</p>

<p>I was wondering if it would be ok to do that.</p>

<p>Thank you very much for your help</p>

CC BY-SA 4.0
2019-11-21T02:31:57.840Z
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.
M__
CC BY-SA 4.0
2019-11-21T09:46:50.540Z
It would be on human data (cancer) and for visualization (heatmap, etc.) and gene ontology (gsea, etc.)
Nin00
CC BY-SA 4.0
2020-04-18T14:52:55.517Z
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?
Phoenix Mu
<rna-seq><deseq2><normalization>
RNASeq: Normalization, stabilization, gene length and rlog
# RNASeq: Normalization, stabilization, gene length and rlog

(Asked by: username_0 on 2019-11-20)

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

**Tags:** rna-seq, deseq2, normalization
> **Comments:**
> **username_1**: 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.  
> **username_0**: It would be on human data (cancer) and for visualization (heatmap, etc.) and gene ontology (gsea, etc.)  
> **username_2**: 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?  

---

## 3 answers

### Answer by username_3 on 2021-01-15. Score: 1

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](https://doi.org/10.1084/jem.20160470):

> 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]

> **Comments:**
> **username_4**: Since VST transformed data are on a log2 scale, wouldn't you be better subtracting the log(length), rather than dividing?  
> **username_3**: 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.  

---

### Answer by username_5 on 2019-11-20. Score: 1

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](https://bioconductor.org/packages/release/bioc/vignettes/EDASeq/inst/doc/EDASeq.html#differential-expression-analysis).

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.


---

### Answer by username_6 on 2020-12-14. Score: 0

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.


---

