The most common way of performing GO enrichment (hypergeometric tests on selected subsets of genes) is straightforward enough, but I'm finding a lot of papers which propose alternate methods which take into account the hierarchy of GO terms or gene scores:
I don't quite understand the math behind each methods, and obviously each paper claims that their method is better than the previous ones. I used the topGO package to test a couple, and the enrichment lists I generate show little similarity.
Could anyone provide practical guidelines on which method(s) would give the most relevant biological results? One caveat is that I am integrating this analysis within a larger automated pipeline, so automated tools are out.
Mine is a very empirical & practical opinion: I quite like DAVID as it is flexible and produces a very readable output. The R package RDAVIDWebService allows querying david via R and it's very handy (but note the limitations imposed by david about number of jobs that a single user can submit). Also, david has been used very extensively so it's very well tried & tested.
In general, I find the results from GO analyses to be so open to interpretation that I'm less concerned about finding the very best algorithm, I prefer to favour a practical approach. Neverthless, I should say that for RNA-seq data you might want to control for gene length (see http://genomebiology.com/2010/11/2/R14 and the GOSeq package).
I would suggest you download a specific GO database and use spreadsheet such as Excel to calculate your own hypergeometric p-values. Some online tools seem to use 'total GO space' and the GO class (BP, MF, CC) irrespective of the organism. I also think some tools although separate organism but mix all these three GOs to test for p-value. If you have control on these, you are sure of what are you looking at.
Here is another one to make your life more harder: ermineJ
I've come to really like ermineJ