<p>I'm not sure Seurat is the best tool for this as it was developed for single cell RNA seq data and there are a few intricacies of that type of data that are very different from bulk RNA seq. 
For bulk there are really good packages available and corresponding workflows, e.g. <a href="https://master.bioconductor.org/packages/release/workflows/html/RNAseq123.html" rel="nofollow noreferrer">limma</a>, <a href="https://master.bioconductor.org/packages/release/workflows/html/RnaSeqGeneEdgeRQL.html" rel="nofollow noreferrer">edgeR</a> and <a href="https://master.bioconductor.org/packages/release/workflows/html/rnaseqGene.html" rel="nofollow noreferrer">DESeq2</a>.</p>

<p>The main problems with Seurat for bulk RNA-seq:</p>

<ol>
<li>Seurat expects counts as input - FPKM are not counts nor are they log counts or log norm counts. It's a specific normalisation method that takes into account gene length and library size and breaks the link between gene counts and variance. </li>
<li>Because of the distribution of reads from a single cell that you get from the sequencer Seurat scales all unique reads (i.e. UMIs) to 10,000 per cell and usually regresses out the nUMI count. Again, becuase you've got FPKMs this makes no sense.</li>
<li>The other functions you can use on bulk data, i.e. tSNE, finding clusters and markers (which is essentially DGE analysis). The one thing to note for the latter is that again because you've got FPKMs they don't follow the negative binomial distribution. Your best bet is limma trend but I'm not sure it's included in Seurat. </li>
</ol>

CC BY-SA 4.0
2018-10-12T18:51:25.170Z
You don't need to use Seurat's normalization. You can provide normalized counts or FPKMs and skip the normalization step. See this earlier discussion: https://bioinformatics.stackexchange.com/questions/5115/seurat-with-normalized-count-matrix
burger
CC BY-SA 4.0
2018-10-13T08:49:44.340Z
That's true but if you look at the original post, OP uses `ScaleData`, which scales already scaled FPKM values. Even though feeding bulk RNA seq FPKM values to a Seurat@data slot is essentially doable, you are still relying on the downstream processing steps that were designed for log-normalised count data to be meaningful for FPKM values and it's certainly not the case for the `FindAllMarkers` function.
biomiha
CC BY-SA 4.0
2018-10-13T20:35:07.327Z
There are a few issues on the Seurat GitHub that discuss importing TPM/FPKM values. The suggestions are always to just skip normalization and proceed normally. I haven't seen any concerns raised about `FindAllMarkers`. I don't mean to imply those concerns are not legitimate, but it's interesting they are not raised.
burger
CC BY-SA 4.0
2018-10-12T12:44:56.740Z
2018-10-12T15:41:47.740Z
2018-10-12T15:41:47.740Z
biomiha
<p>FYI - heard from the author of Seurat, see <a href="https://github.com/satijalab/seurat/issues/826" rel="nofollow noreferrer">this github issue</a></p>

<p>His suggestion to use DESeq won't work in my case, because DESeq requires counts data which I don't have. But it is the green light to generally use the package on bulk data. I am using test.use = "wilcox" in FindMarkers() because it's non-parametric...</p>

CC BY-SA 4.0
2018-10-31T18:26:42.883Z
I would actually suggest limma-trend (not voom). Compared to a wilcox you'll gain a bit of statistical power due to the empirical bayes moderated t-test.
biomiha
CC BY-SA 4.0
2018-10-29T21:07:22.873Z
2018-10-29T21:07:22.873Z
R-Peys
<p>Is it ever ok to use Seurat for clustering bulk samples?</p>

<p>I am looking at FPKM data from ~750 bulk RNA-seq samples generated using <code>Cufflinks</code>. As suggested for FPKM data, I manually input log transformed data to the <code>@data</code> slot [<code>cd138_bm@data &lt;- log(cd138_bm@raw.data + 1)</code>] and skip the <code>NormalizeData()</code> function. I then use functions <code>FindVariableGenes</code>, <code>ScaleData</code>, <code>RunPCA</code>, <code>FindClusters</code>, <code>RunTSNE</code>, <code>FindAllMarkers</code> in their usual ways to find clusters &amp; cluster markers. My clustering results are quite reasonable, and reflect published work clustering similar samples.</p>

<p>What are the potential pitfalls of using these Seurat functions on bulk data? In <code>FindAllMarkers</code>, would you recommend I use the "negbinom" test? (currently using wilcox) Any other arguments you would recommend changing from the default?</p>

CC BY-SA 4.0
2019-09-26T03:28:04.673Z
I also want to try this bulk analysis with seurat and I am interested in your methods.
Did you publish this analysis already ?
If it's fine, I would like to ask you get the papers you wrote !
ASE
CC BY-SA 4.0
2019-09-27T04:11:48.000Z
I didn't publish, but I did use seurat on bulk and it worked great.
R-Peys
CC BY-SA 4.0
2018-10-05T08:47:08.027Z
Good question. I removed scrnaseq tag since you have bulk rna sequencing, if I misunderstood somehting, feel free to [edit] it back.
Kamil S Jaron
CC BY-SA 4.0
2023-06-07T12:34:04.967Z
It's a good question. I processed the sc-RNAseq data and generated some new markers based on gene expression value. In the subsequent analysis, I want to find differential markers in multiple clusters of my dataset based on seurat package.
Xuexing Wangzhe Dishitian
<rna-seq><seurat><clustering>
Seurat for clustering bulk RNA-seq?
# Seurat for clustering bulk RNA-seq?

(Asked by: username_0 on 2018-10-04)

Is it ever ok to use Seurat for clustering bulk samples?

I am looking at FPKM data from ~750 bulk RNA-seq samples generated using `Cufflinks`. As suggested for FPKM data, I manually input log transformed data to the `@data` slot [`cd138_bm@data <- log(cd138_bm@raw.data + 1)`] and skip the `NormalizeData()` function. I then use functions `FindVariableGenes`, `ScaleData`, `RunPCA`, `FindClusters`, `RunTSNE`, `FindAllMarkers` in their usual ways to find clusters & cluster markers. My clustering results are quite reasonable, and reflect published work clustering similar samples.

What are the potential pitfalls of using these Seurat functions on bulk data? In `FindAllMarkers`, would you recommend I use the "negbinom" test? (currently using wilcox) Any other arguments you would recommend changing from the default?

**Tags:** rna-seq, seurat, clustering
> **Comments:**
> **username_2**: Good question. I removed scrnaseq tag since you have bulk rna sequencing, if I misunderstood somehting, feel free to [edit] it back.  
> **username_1**: I also want to try this bulk analysis with seurat and I am interested in your methods. Did you publish this analysis already ? If it's fine, I would like to ask you get the papers you wrote !  
> **username_0**: I didn't publish, but I did use seurat on bulk and it worked great.  
> **username_3**: It's a good question. I processed the sc-RNAseq data and generated some new markers based on gene expression value. In the subsequent analysis, I want to find differential markers in multiple clusters of my dataset based on seurat package.  

---

## 2 answers

### Answer by username_4 on 2018-10-12. Score: 2

I'm not sure Seurat is the best tool for this as it was developed for single cell RNA seq data and there are a few intricacies of that type of data that are very different from bulk RNA seq.
For bulk there are really good packages available and corresponding workflows, e.g. [limma](https://master.bioconductor.org/packages/release/workflows/html/RNAseq123.html), [edgeR](https://master.bioconductor.org/packages/release/workflows/html/RnaSeqGeneEdgeRQL.html) and [DESeq2](https://master.bioconductor.org/packages/release/workflows/html/rnaseqGene.html).

The main problems with Seurat for bulk RNA-seq:

1. Seurat expects counts as input - FPKM are not counts nor are they log counts or log norm counts. It's a specific normalisation method that takes into account gene length and library size and breaks the link between gene counts and variance.
2. Because of the distribution of reads from a single cell that you get from the sequencer Seurat scales all unique reads (i.e. UMIs) to 10,000 per cell and usually regresses out the nUMI count. Again, becuase you've got FPKMs this makes no sense.
3. The other functions you can use on bulk data, i.e. tSNE, finding clusters and markers (which is essentially DGE analysis). The one thing to note for the latter is that again because you've got FPKMs they don't follow the negative binomial distribution. Your best bet is limma trend but I'm not sure it's included in Seurat.

> **Comments:**
> **username_5**: You don't need to use Seurat's normalization. You can provide normalized counts or FPKMs and skip the normalization step. See this earlier discussion: https://bioinformatics.stackexchange.com/questions/5115/seurat-with-normalized-count-matrix  
> **username_4**: That's true but if you look at the original post, OP uses `ScaleData`, which scales already scaled FPKM values. Even though feeding bulk RNA seq FPKM values to a Seurat@data slot is essentially doable, you are still relying on the downstream processing steps that were designed for log-normalised count data to be meaningful for FPKM values and it's certainly not the case for the `FindAllMarkers` function.  
> **username_5**: There are a few issues on the Seurat GitHub that discuss importing TPM/FPKM values. The suggestions are always to just skip normalization and proceed normally. I haven't seen any concerns raised about `FindAllMarkers`. I don't mean to imply those concerns are not legitimate, but it's interesting they are not raised.  

---

### Answer by username_0 on 2018-10-29. Score: 1

FYI - heard from the author of Seurat, see [this github issue](https://github.com/satijalab/seurat/issues/826)

His suggestion to use DESeq won't work in my case, because DESeq requires counts data which I don't have. But it is the green light to generally use the package on bulk data. I am using test.use = "wilcox" in FindMarkers() because it's non-parametric...

> **Comments:**
> **username_4**: I would actually suggest limma-trend (not voom). Compared to a wilcox you'll gain a bit of statistical power due to the empirical bayes moderated t-test.  

---

