This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Alternative annotation tools for GO/KEGG enrichment

Good evening.

I am currently working on plant gene analysis. My goal is to obtain protein sequences for the genes within each module identified by WGCNA, annotate them, retrieve the corresponding GO and KEGG IDs, and perform enrichment analysis.

I previously used eggNOG-mapper for annotation, but I noticed that some sequences were left without assigned GO IDs, which I worry might compromise the accuracy of the enrichment analysis.

If anyone knows a better approach or best practice for this, I would greatly appreciate your advice.

Thank you very much

go kegg wgcna

2 answers

The missing annotations matter less than you'd think, provided your background is consistent. Enrichment compares your module against a universe, so if both come from the same eggNOG output then unannotated genes are simply absent from both sides and the test is still valid. What genuinely breaks it is testing annotated module genes against a whole-genome background, because then you're comparing against genes that never had a chance to be annotated in the first place.

Two things to get right on the universe:

  • it should be the genes that have annotation, not all genes;
  • it should be restricted to the genes that actually went into the WGCNA (i.e. after your expression filtering), not the full gene model set. Using the whole genome as background for a module test is probably a bigger source of false enrichment than your missing GO IDs.

For coverage, the usual approach is to combine rather than replace. InterProScan is the natural complement to eggNOG-mapper: it's domain-based rather than orthology-based, and InterPro2GO will pick up GO terms for proteins where eggNOG found no usable ortholog. PANNZER2 is also worth trying, it's specifically built for GO prediction in non-model organisms. Take the union of the three and you'll usually close most of the gap.

For KEGG specifically, eggNOG's KO assignments are serviceable but BlastKOALA / GhostKOALA come directly from KEGG and generally do better.

Since this is plants: if you have a reasonably close sequenced relative, orthology transfer often beats de novo annotation on coverage. Run OrthoFinder against Arabidopsis or rice and carry over the TAIR / RAP-DB annotations for confident one-to-one orthologs. Also have a look at Mercator4 / MapMan -- plant-specific functional bins, usually far more interpretable for plant biology than generic GO terms, and coverage on plant proteomes is good.

The one bias you can't engineer away: annotation transfer favours conserved genes, so lineage-specific and fast-evolving genes stay unannotated no matter which tool you use. If one of your modules happens to be enriched for exactly those, you will systematically undercall it. Better to state that as a limitation than to assume more tools will fix it.

Thank you very much for the insightful and practical advice! The explanation regarding the background universe (restricting to annotated and expression-filtered genes in WGCNA) was especially clear and cleared up a lot of my confusion.

I have one follow-up question regarding the strategy of combining multiple annotation tools (e.g., eggNOG-mapper, InterProScan, and PANNZER2).

Is it standard/methodologically acceptable to simply merge (take the union of) GO annotations generated by different tools? Since each tool relies on different algorithms (orthology vs. domain-based vs. machine learning) and might assign terms at different GO hierarchy depths, I am a bit concerned about introducing inconsistencies or redundancy into the enrichment test.

Thanks again for your support!

Union is defensible, and the depth inconsistency is less of a problem than it looks. Enrichment tools propagate terms up the DAG anyway, so a specific term from InterProScan and a general one from eggNOG end up consistent once ancestors are filled in.

Precision is the thing that actually bites. eggNOG-mapper and InterProScan are orthology and domain based and fairly conservative, PANNZER2 is looser by design. A union inherits the precision of its weakest member, and since your background comes out of the same pipeline that error lands on both sides of the test.

So rather than committing to one strategy up front, keep a record of which tool contributed each term, then rerun the enrichment on the eggNOG + InterProScan subset alone. Terms that survive both runs are solid. Terms that only show up in the union are being carried by the noisiest annotations, and that's worth a sentence in your methods either way.

That makes a lot of sense, thank you for the detailed breakdown! The explanation about how DAG propagation handles the depth difference was very reassuring. Your point about precision and noise is also spot on. I'll make sure to track the source of each GO annotation as you suggested, and run the enrichment analysis both on the conservative subset (eggNOG + InterProScan) and the full union. Comparing those results and reporting the overlap seems like a great way to handle this cleanly in the methods section.

Thanks again for the super practical advice!

We recommend GO annotations come from our Downloads pages. Have you checked if GO downloads are available for your organism through the steps outlined in our 2. All other organisms section?

We have recently (last month!) changed over our pipelines so we have more organisms available in our downloads table than ever before. We work closely with UniProt but also recommend the NCBI RefSeq GAF if it's available for you. I know GO annotations are not currently available at NCBI for archaea, bacteria or viruses, but I believe they are available for plants. Please check out our new downloads table if you haven't looked at it recently!

Although there are other pipelines that can be used to create GO annotations, for reproducibility of your work, accountability and accuracy, among other reasons, we strongly recommend using an official GO annotation set if available. We discourage using tools that do not provide GO release version info with every output to help reproduce the set and ensure the tool is using the most recent version of the Ontology.

Thank you for the suggestion and for pointing me to the updated downloads page!

Unfortunately, I checked the new table, but my target organism isn't listed yet. Since its genome was decoded only very recently, the lack of existing functional annotations has been one of the main hurdles for this project.

Because of this, I'm currently constructing a custom genome-wide annotation file myself to proceed with the enrichment analysis. I really appreciate the info, though—I'll definitely check the GO downloads first when working on other species in the future!

Log in to answer this question.