text: user2005: I got a dataset from C.Elegans scRNA-seq paper: 
  GSM2599701_Gene.count.matrix.celegans.cell.Rdata in GSE98561_RAW.tar
  The dataset is 40 000 x 68 000, where rows represent genes and columns - cells. So, I took it and tried to process myself to build an scRNA-seq pipeline. Here is what I did:
  
  I filtered out the genes that have zero counts in all of the cells and the dataset was reduced to 29 000 x 68 000
  I removed all of the cells with counts < 100 in all of the genes - the dataset became 29 000 x 66 000
  Then, because the dataset was too big to run normalization even on the cluster with 120Gb RAM (because there are multiple distinct types of cells, first clustering needs to be done), I selected just even columns and ran normalization with 29 000 x 33 000 dataset (UMI_count):
  library(scran)     
  library(scater)
  sce <- newSCESet(countData=UMI_count)
  clusters <- quickCluster(sce)
  sce <- computeSumFactors(sce, clusters=clusters, positive=TRUE)
  
  
  After running the code above I decided to check whether the data is fine and so I ran:
  > summary(sizeFactors(sce))
  Min.    1st Qu.  Median  Mean   3rd Qu.    Max. 
  0.0000  0.0000  0.0000  0.0717  0.0000 33.3900 
  
  I also ran PCA on the normalized dataset and it looks like that:
  
  It seems to me that the normalized dataset is terrible and I need to do some further processing before I could run further analysis. What else could I do to improve it? How to filter it? There are no spike-ins and maybe 200 mitochondrial genes. The approach described here does not work, probably because the majority of the cells have low number of genes expressed:
  
  I tried removing low-abundance genes after normalization, but it seems that most of them are going to be removed:
  >ave.counts <- rowMeans(counts(sce))
  >keep <- ave.counts >= 1
  >sum(keep)
  109
  
  Should I filter all of the cells - columns - for up to 500 total gene expression count instead of 100? Is it a good idea? I can't think of anything else.
  
  user73: Given that this is single-cell sequencing results, you should be using rowSums instead of rowMeans for filtering genes. Most genes won't be expressed at a single cell level, but there should be a lot of genes that have some expression. The zero counts are probably better represented as "missing" rather than zero.
  Unfortunately that feature makes running PCAs difficult, because PCAs don't work with missing values. The missing values may need to be imputed in order to generate a better PCA.
  disclaimer: I don't [typically] work with single cell data, so don't have a good handle on the methods for looking at it.
  
  user2156: I usually use a minimum of 200 genes/cell for relaxed filters (500 if possible).
  For genes I use presence in at least 10% of the cells.
  A few other filters you can try are:
  
  High percentage of reads from only top50 genes. This means you haven't captured a lot of genes and the diversity of the cell won't be useful.
  High percentage of mitochondrial genes. This has been reported to be linked to bad quality cells. The idea is that mRNA is depleted because of early cell death (or other outer membrane injury) leading to having only mito mRNA left.
  Minimum UMI per cells. Similar to minimum genes but more dependent of the protocol used.
  UMI per gene/cell. This can be interesting to detect a potential bias from amplification and is also dependent on the protocol.
  
  The best would be to compare all your samples using violin plots with those different filters and choose your thresholds from there.
  A quick example (using Seurat):
  Pre filtering:
  
  Post filtering:
  
  
  user35: I don't think you can conclude that the dataset is terrible based on that PCA. Depending on the specific protocol, each scRNA-seq dataset is going to be very different. Unlike bulk RNA-seq where all the samples are going to be of very similar quality, individual cells will be highly variable. For example, the most basic QC metric is the number of reads. If some of your bulk RNA-seq samples have 10X more reads than other samples, that's a cause for concern. In scRNA-seq experiments, that's not at all surprising. The PCA exposes the major sources of variation. In scRNA-seq experiment, those are probably going to be technical rather than biological, so the output may not make much sense. Furthermore, even if all the cells are of perfect quality, PCA is not really optimal for sparse data with many dropouts like you see with scRNA-seq.
  Regardless of PCA, those library sizes seem very small. Based on your plot, there are barely any cells with over 10K reads. I understand this is C elegans, but that seems somewhat low. That may be why you are having trouble with normalization. It would help with understanding the data if you changed the X-axis on those plots so that you can actually see where the peak is. Right now, it looks like 0, but that can't be the case.
  
original_text: 2005: <p>I got a <a href="https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE98561" rel="noreferrer">dataset</a> from <code>C.Elegans scRNA-seq</code> <a href="https://www.ncbi.nlm.nih.gov/pubmed/28818938" rel="noreferrer">paper</a>: </p>
  
  <p><code>GSM2599701_Gene.count.matrix.celegans.cell.Rdata</code> in <code>GSE98561_RAW.tar</code></p>
  
  <p>The dataset is <code>40 000 x 68 000</code>, where rows represent genes and columns - cells. So, I took it and tried to process myself to build an <code>scRNA-seq</code> pipeline. Here is what I did:</p>
  
  <ol>
  <li><p>I filtered out the genes that have zero counts in all of the cells and the dataset was reduced to <code>29 000 x 68 000</code></p></li>
  <li><p>I removed all of the cells with counts <code>&lt; 100</code> in all of the genes - the dataset became <code>29 000 x 66 000</code></p></li>
  <li><p>Then, because the dataset was too big to run normalization even on the cluster with <code>120Gb</code> RAM (because there are multiple distinct types of cells, first clustering needs to be done), I selected just even columns and ran normalization with <code>29 000 x 33 000</code> dataset (<code>UMI_count</code>):</p>
  
  <pre><code>library(scran)     
  library(scater)
  sce &lt;- newSCESet(countData=UMI_count)
  clusters &lt;- quickCluster(sce)
  sce &lt;- computeSumFactors(sce, clusters=clusters, positive=TRUE)
  </code></pre></li>
  </ol>
  
  <p>After running the code above I decided to check whether the data is fine and so I ran:</p>
  
  <pre><code>&gt; summary(sizeFactors(sce))
  Min.    1st Qu.  Median  Mean   3rd Qu.    Max. 
  0.0000  0.0000  0.0000  0.0717  0.0000 33.3900 
  </code></pre>
  
  <p>I also ran <code>PCA</code> on the normalized dataset and it looks like that:</p>
  
  <p><a href="https://i.stack.imgur.com/4sPJN.png" rel="noreferrer"><img src="https://i.stack.imgur.com/4sPJN.png" alt="enter image description here"></a></p>
  
  <p>It seems to me that the normalized dataset is terrible and I need to do some further processing before I could run further analysis. What else could I do to improve it? How to filter it? There are no <code>spike-ins</code> and maybe <code>200</code> mitochondrial genes. The approach described <a href="https://f1000research.com/articles/5-2122/v2" rel="noreferrer">here</a> does not work, probably because the majority of the cells have low number of genes expressed:</p>
  
  <p><a href="https://i.stack.imgur.com/UDcKg.png" rel="noreferrer"><img src="https://i.stack.imgur.com/UDcKg.png" alt="enter image description here"></a></p>
  
  <p>I tried removing low-abundance genes after normalization, but it seems that most of them are going to be removed:</p>
  
  <pre><code>&gt;ave.counts &lt;- rowMeans(counts(sce))
  &gt;keep &lt;- ave.counts &gt;= 1
  &gt;sum(keep)
  109
  </code></pre>
  
  <p>Should I filter all of the cells - columns - for up to <code>500</code> total gene expression count instead of <code>100</code>? Is it a good idea? I can't think of anything else.</p>
   73: <p>Given that this is single-cell sequencing results, you should be using <code>rowSums</code> instead of <code>rowMeans</code> for filtering genes. Most genes won't be expressed at a single cell level, but there should be a lot of genes that have some expression. The zero counts are probably better represented as "missing" rather than zero.</p>
  
  <p>Unfortunately that feature makes running PCAs difficult, because PCAs don't work with missing values. The missing values may need to be imputed in order to generate a better PCA.</p>
  
  <p>disclaimer: I don't [typically] work with single cell data, so don't have a good handle on the methods for looking at it.</p>
   2156: <p>I usually use a minimum of 200 genes/cell for relaxed filters (500 if possible).
  For genes I use presence in at least 10% of the cells.</p>
  
  <p>A few other filters you can try are:</p>
  
  <ul>
  <li>High percentage of reads from only top50 genes. This means you haven't captured a lot of genes and the diversity of the cell won't be useful.</li>
  <li>High percentage of mitochondrial genes. This has been reported to be linked to bad quality cells. The idea is that mRNA is depleted because of early cell death (or other outer membrane injury) leading to having only mito mRNA left.</li>
  <li>Minimum UMI per cells. Similar to minimum genes but more dependent of the protocol used.</li>
  <li>UMI per gene/cell. This can be interesting to detect a potential bias from amplification and is also dependent on the protocol.</li>
  </ul>
  
  <p>The best would be to compare all your samples using violin plots with those different filters and choose your thresholds from there.
  A quick example (using Seurat):</p>
  
  <p>Pre filtering:
  <a href="https://i.stack.imgur.com/67jMn.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/67jMn.jpg" alt="enter image description here"></a></p>
  
  <p>Post filtering:
  <a href="https://i.stack.imgur.com/9zeEG.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/9zeEG.jpg" alt="enter image description here"></a></p>
   35: <p>I don't think you can conclude that the dataset is terrible based on that PCA. Depending on the specific protocol, each scRNA-seq dataset is going to be very different. Unlike bulk RNA-seq where all the samples are going to be of very similar quality, individual cells will be highly variable. For example, the most basic QC metric is the number of reads. If some of your bulk RNA-seq samples have 10X more reads than other samples, that's a cause for concern. In scRNA-seq experiments, that's not at all surprising. The PCA exposes the major sources of variation. In scRNA-seq experiment, those are probably going to be technical rather than biological, so the output may not make much sense. Furthermore, even if all the cells are of perfect quality, PCA is not really optimal for sparse data with many dropouts like you see with scRNA-seq.</p>
  
  <p>Regardless of PCA, those library sizes seem very small. Based on your plot, there are barely any cells with over 10K reads. I understand this is C elegans, but that seems somewhat low. That may be why you are having trouble with normalization. It would help with understanding the data if you changed the X-axis on those plots so that you can actually see where the peak is. Right now, it looks like 0, but that can't be the case.</p>
  