How to run enrichment analysis of protein functional annotation? 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, 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 ?
I would recommend R instead of sticking to websites.

There are many tools for enrichment analysis. I like to use GOseq, 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 for code.

Subsequently you can use 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. With this package you can do enrichment analysis for many clusters in parallel.