<p>DAVID depend on a couple of databases from the Gene Ontology Consortium, Reactome, KEGG,... most of them are accessible via Bioconductor. To perform an enrichment analysis you can have a look at the tutorial of the several <a href="http://bioconductor.org/packages/release/BiocViews.html#___GeneSetEnrichment" rel="nofollow noreferrer">packages in Bioconductor</a> that do this. </p>

<p>Some of the most important for analyzing enrichment in GO terms are <a href="http://bioconductor.org/packages/topGO" rel="nofollow noreferrer">topGO</a>, <a href="http://bioconductor.org/packages/goseq" rel="nofollow noreferrer">goseq</a>, <a href="http://bioconductor.org/packages/GOstats" rel="nofollow noreferrer">GOstats</a>. I would also recommend <a href="http://bioconductor.org/packages/GOSemSim" rel="nofollow noreferrer">GOSemSim</a> if you want to compare between GO  to focus on a specific GO terms.</p>

<p>Other important packages are the <a href="http://bioconductor.org/packages/fgsea" rel="nofollow noreferrer">fgsea</a> to test any kind of gene set (which is similar to the one hosted by the Broad Institute), <a href="http://bioconductor.org/packages/gsva" rel="nofollow noreferrer">gsva</a> for enrichment analysis by sample, <a href="http://bioconductor.org/packages/limma" rel="nofollow noreferrer">limma</a> has some functions for functional enrichment too. <a href="http://bioconductor.org/packages/piano" rel="nofollow noreferrer">Piano</a>, <a href="http://bioconductor.org/packages/GSCA" rel="nofollow noreferrer">GSCA</a>, <a href="http://bioconductor.org/packages/SPIA" rel="nofollow noreferrer">SPIA</a> are also worth mentioning.</p>

<p>Bioconductor has "standard" data sets of the expressions of some cells, like <a href="http://bioconductor.org/packages/airway" rel="nofollow noreferrer">airway</a> and <a href="http://bioconductor.org/packages/ALL" rel="nofollow noreferrer">ALL</a> frequently used in vignettes. They are not reference data sets because there isn't a reference expression for a cell of an organisms. It depends on the type of cell, the experiment, the conditions...</p>

CC BY-SA 3.0
2017-08-23T10:49:18.397Z
2017-08-23T10:49:18.397Z
llrs
<p>I would recommend R instead of sticking to websites.</p>

<p>There are many tools for enrichment analysis. I like to use <a href="https://bioconductor.org/packages/release/bioc/html/goseq.html" rel="nofollow noreferrer">GOseq</a>, which is initially made for RNAseq data, but can also be used for proteins (I have used it for proteomics). You can use the length of the protein instead of transcript length (to correct for length bias), or you can exclude the length information by just using the hypergeometric method.</p>

<p>See <a href="https://bioconductor.org/packages/release/bioc/vignettes/goseq/inst/doc/goseq.pdf" rel="nofollow noreferrer">manual</a> for code.</p>

<p>Subsequently you can use <a href="https://sourceforge.net/projects/gogadget/" rel="nofollow noreferrer">gogadget</a>, a tool I made for visualization of GOseq results with a heatmap or cytoscape network.</p>

<p>Additionally, you might wanna take a look at <a href="https://bioconductor.org/packages/release/bioc/html/clusterProfiler.html" rel="nofollow noreferrer">clusterProfiler</a>. With this package you can do enrichment analysis for many clusters in parallel.</p>

CC BY-SA 3.0
2017-08-21T22:36:59.310Z
Under what circumstances is it appropriate to correct for bias using the length of the protein?
Chris Mungall
CC BY-SA 3.0
2017-08-22T07:50:32.813Z
What I understand from the correction of bias in GOseq, is that if there is no bias a correction would not harm the analysis (because there is nothing to correct for). See previous discussion on [Bioconductor](https://support.bioconductor.org/p/77260/). However, I do the hypergeometric test often, because the researchers (biologists) I work with prefer a test that they understand. The hypergeometric (Fisher exact) test is something many biologists understand.
benn
CC BY-SA 3.0
2017-08-22T09:37:47.913Z
@cmungall This would be a good question on its own. Please consider asking it
llrs
CC BY-SA 3.0
2017-08-21T11:26:13.097Z
2017-08-22T10:43:13.063Z
2017-08-22T10:43:13.063Z
benn
<p>I have a lot of protein clusters. I want to perform an enrichment analysis of their functional annotations, against reference datasets or list of genes I select.</p>

<p>More precisely: a method yields cluster of proteins. I want to decide, for each cluster (which is a set of proteins identifiers), if it holds meaning regarding the proteins it contains, by comparing the annotations found in the cluster and the annotations found in common or specific datasets.</p>

<p>Initially, I used <a href="https://david.ncifcrf.gov" rel="nofollow noreferrer">DAVID</a>, which compute the GO annotations from the protein list, then perform the enrichment analysis against common datasets.</p>

<p>However, DAVID suffer of the following drawbacks:</p>

<ul>
<li>since I didn't find any other way to use it, I'm limited by the web interface and its limitations (number of genes, url size, number of request/day).</li>
<li>automation over the web interface is a hacky script.</li>
</ul>

<p>The team behind seems to offer a way to run DAVID in-house (allowing, hopefully, to relax the limitations), but I can't find any way to download the database from their website.</p>

<p>What are the alternative ways to get enrichment analysis over proteins in a reliable and automated way ?</p>

CC BY-SA 3.0
2017-08-21T11:09:49.253Z
This paper on the obsolescence of some enrichment analysis tools might be a good starting point to pick one (note that DAVID has been updated since): https://www.nature.com/nmeth/journal/v13/n9/full/nmeth.3963.html
mgalardini
CC BY-SA 3.0
2017-08-22T09:39:57.877Z
What is the biological question? Why do you want to compare the functional annotations of your proteins against reference datasets or your list of genes? (I have usually found the opposite: I have a list of genes and I need to know what functions/pathways/process are they involved)
llrs
CC BY-SA 3.0
2017-08-22T09:47:43.857Z
The question is *do a cluster expose an enrichment in functional annotations*. The method studied yields many clusters, and i want to decide if these clusters hold meaning regarding the proteins it contains, by comparing the annotations found in the cluster and the annotations found in common or specific datasets.
aluriak
CC BY-SA 3.0
2017-08-22T09:49:55.107Z
To make it even clearer, the clusters you mean you have a list of interacting proteins (in a complex or in a pathway) or that some tools grouped your proteins in a cluster? Could you [edit] the question to include the information in the body of your question?
llrs
CC BY-SA 3.0
2017-08-22T09:53:48.370Z
A cluster is a set of proteins. There is no assumption about their interaction. I updated the question accordingly.
aluriak
CC BY-SA 3.0
2017-08-22T10:00:10.280Z
And the annotations you refer, what are they about? Sorry by these questions, but as you explain more is easier for me to think about an answer that fits you
llrs
CC BY-SA 3.0
2017-08-22T10:31:18.697Z
The proteins -> annotations mapping was initially performed by DAVID. I think each database would have its own way to perform that mapping. I do not _want_ to perform that step myself, but, as for the enrichment analysis itself, i will do it myself with some scripting only if its necessary. AFAIK, considered annotations was GO annotations. I updated the question. There is no problem ; i understand the value of your questions.
aluriak
<go><go-enrichment>
How to run enrichment analysis of protein functional annotation?
# How to run enrichment analysis of protein functional annotation?

(Asked by: username_0 on 2017-08-21)

I have a lot of protein clusters. I want to perform an enrichment analysis of their functional annotations, against reference datasets or list of genes I select.

More precisely: a method yields cluster of proteins. I want to decide, for each cluster (which is a set of proteins identifiers), if it holds meaning regarding the proteins it contains, by comparing the annotations found in the cluster and the annotations found in common or specific datasets.

Initially, I used [DAVID](https://david.ncifcrf.gov), which compute the GO annotations from the protein list, then perform the enrichment analysis against common datasets.

However, DAVID suffer of the following drawbacks:

* since I didn't find any other way to use it, I'm limited by the web interface and its limitations (number of genes, url size, number of request/day).
* automation over the web interface is a hacky script.

The team behind seems to offer a way to run DAVID in-house (allowing, hopefully, to relax the limitations), but I can't find any way to download the database from their website.

What are the alternative ways to get enrichment analysis over proteins in a reliable and automated way ?

**Tags:** go, go-enrichment
> **Comments:**
> **username_1**: This paper on the obsolescence of some enrichment analysis tools might be a good starting point to pick one (note that DAVID has been updated since): https://www.nature.com/nmeth/journal/v13/n9/full/nmeth.3963.html  
> **username_2**: What is the biological question? Why do you want to compare the functional annotations of your proteins against reference datasets or your list of genes? (I have usually found the opposite: I have a list of genes and I need to know what functions/pathways/process are they involved)  
> **username_0**: The question is *do a cluster expose an enrichment in functional annotations*. The method studied yields many clusters, and i want to decide if these clusters hold meaning regarding the proteins it contains, by comparing the annotations found in the cluster and the annotations found in common or specific datasets.  
> **username_2**: To make it even clearer, the clusters you mean you have a list of interacting proteins (in a complex or in a pathway) or that some tools grouped your proteins in a cluster? Could you [edit] the question to include the information in the body of your question?  
> **username_0**: A cluster is a set of proteins. There is no assumption about their interaction. I updated the question accordingly.  
> **username_2**: And the annotations you refer, what are they about? Sorry by these questions, but as you explain more is easier for me to think about an answer that fits you  
> **username_0**: The proteins -> annotations mapping was initially performed by DAVID. I think each database would have its own way to perform that mapping. I do not _want_ to perform that step myself, but, as for the enrichment analysis itself, i will do it myself with some scripting only if its necessary. AFAIK, considered annotations was GO annotations. I updated the question. There is no problem ; i understand the value of your questions.  

---

## 2 answers

### Answer by username_2 on 2017-08-23. Score: 3 | Accepted answer

DAVID depend on a couple of databases from the Gene Ontology Consortium, Reactome, KEGG,... most of them are accessible via Bioconductor. To perform an enrichment analysis you can have a look at the tutorial of the several [packages in Bioconductor](http://bioconductor.org/packages/release/BiocViews.html#___GeneSetEnrichment) that do this.

Some of the most important for analyzing enrichment in GO terms are [topGO](http://bioconductor.org/packages/topGO), [goseq](http://bioconductor.org/packages/goseq), [GOstats](http://bioconductor.org/packages/GOstats). I would also recommend [GOSemSim](http://bioconductor.org/packages/GOSemSim) if you want to compare between GO to focus on a specific GO terms.

Other important packages are the [fgsea](http://bioconductor.org/packages/fgsea) to test any kind of gene set (which is similar to the one hosted by the Broad Institute), [gsva](http://bioconductor.org/packages/gsva) for enrichment analysis by sample, [limma](http://bioconductor.org/packages/limma) has some functions for functional enrichment too. [Piano](http://bioconductor.org/packages/piano), [GSCA](http://bioconductor.org/packages/GSCA), [SPIA](http://bioconductor.org/packages/SPIA) are also worth mentioning.

Bioconductor has "standard" data sets of the expressions of some cells, like [airway](http://bioconductor.org/packages/airway) and [ALL](http://bioconductor.org/packages/ALL) frequently used in vignettes. They are not reference data sets because there isn't a reference expression for a cell of an organisms. It depends on the type of cell, the experiment, the conditions...


---

### Answer by username_3 on 2017-08-21. Score: 3

I would recommend R instead of sticking to websites.

There are many tools for enrichment analysis. I like to use [GOseq](https://bioconductor.org/packages/release/bioc/html/goseq.html), which is initially made for RNAseq data, but can also be used for proteins (I have used it for proteomics). You can use the length of the protein instead of transcript length (to correct for length bias), or you can exclude the length information by just using the hypergeometric method.

See [manual](https://bioconductor.org/packages/release/bioc/vignettes/goseq/inst/doc/goseq.pdf) for code.

Subsequently you can use [gogadget](https://sourceforge.net/projects/gogadget/), a tool I made for visualization of GOseq results with a heatmap or cytoscape network.

Additionally, you might wanna take a look at [clusterProfiler](https://bioconductor.org/packages/release/bioc/html/clusterProfiler.html). With this package you can do enrichment analysis for many clusters in parallel.

> **Comments:**
> **username_4**: Under what circumstances is it appropriate to correct for bias using the length of the protein?  
> **username_3**: What I understand from the correction of bias in GOseq, is that if there is no bias a correction would not harm the analysis (because there is nothing to correct for). See previous discussion on [Bioconductor](https://support.bioconductor.org/p/77260/). However, I do the hypergeometric test often, because the researchers (biologists) I work with prefer a test that they understand. The hypergeometric (Fisher exact) test is something many biologists understand.  
> **username_2**: @cmungall This would be a good question on its own. Please consider asking it  

---

