text: user3225: I have some RNA-Seq data from leukaemia patients. I want to do unsupervised clustering on them with some other published leukaemia RNA-Seq data and see how they cluster. There are a few problems I encountered while doing this.
  
  I read mix messages of whether using log2(TPM) or rlog(counts) (e.g. Deseq2 rlog or limma voom transformation) for clustering. Which one should I choose?
  If I am filtering out genes with low counts, should I do it prior normalisation to library size or after?
  I tried using filterByExpr from edgeR for filtering but it removed many of the genes that are only expressed by subtypes with small sample number. If I am to filter the counts "manually", is there a recommendation of how the threshold should be set?
  If I should use log2(TPM) for unsupervised clustering, can I treat low TPM (e.g. <2) as 0? As this paper suggested TPM < 2 basically means no expression, is it alright to treat them as 0?
  
  
  user77: 
  rlog(normalized counts) is going to be more robust than log2(TPM), so use it instead.
  Do it afterward, keeping the low counts can be helpful for library-size normalization.
  This is very much more of an art than a science, though have a look at the kOverA() function from the genefilter package. That will give you a bit more fine-grained control on filtering.
  You'd be better off using something like zFPKMs if you want to filter by "expressed or not", since there's no really great definition of that.
  
  
original_text: 3225: <p>I have some RNA-Seq data from leukaemia patients. I want to do unsupervised clustering on them with some other published leukaemia RNA-Seq data and see how they cluster. There are a few problems I encountered while doing this.</p>
  
  <ol>
  <li><p>I read mix messages of whether using log2(TPM) or rlog(counts) (e.g. Deseq2 rlog or limma voom transformation) for clustering. Which one should I choose?</p></li>
  <li><p>If I am filtering out genes with low counts, should I do it prior normalisation to library size or after?</p></li>
  <li><p>I tried using filterByExpr from edgeR for filtering but it removed many of the genes that are only expressed by subtypes with small sample number. If I am to filter the counts "manually", is there a recommendation of how the threshold should be set?</p></li>
  <li><p>If I should use log2(TPM) for unsupervised clustering, can I treat low TPM (e.g. &lt;2) as 0? As this <a href="https://link.springer.com/article/10.1007%2Fs12064-013-0178-3" rel="nofollow noreferrer">paper</a> suggested TPM &lt; 2 basically means no expression, is it alright to treat them as 0?</p></li>
  </ol>
   77: <ol>
  <li><code>rlog(normalized counts)</code> is going to be more robust than <code>log2(TPM)</code>, so use it instead.</li>
  <li>Do it afterward, keeping the low counts can be helpful for library-size normalization.</li>
  <li>This is very much more of an art than a science, though have a look at the <code>kOverA()</code> function from the <code>genefilter</code> package. That will give you a bit more fine-grained control on filtering.</li>
  <li>You'd be better off using something like zFPKMs if you want to filter by "expressed or not", since there's no really great definition of that.</li>
  </ol>
  