I am trying to apply an analysis I've seen in a publication to our data, but I ran into problems when it came down to the specifics. The publication is open-access an can be found here for reference. The part I'm trying to replicate reads as follows in the Materials & Methods:
Using protein-coding sequences for 5886 Saccharomyces cerevisiae genes downloaded from the SGD database, we applied custom scripts to determine the gene-specific codon frequency in terms of the number of a particular codon per thousand codons in the open reading frame. Whether a gene was over- or under-represented with a specific codon relative to the genome average was determined by calculating a Z-score based on a hypergeometric distribution with a cut-off of p<0.01.
How can you calculate a Z-score based on a hypergeometric distribution? I know they have used Z-scores as they explain how they calculated them in the caption of Figure 2:
Z-scores were calculated as the difference between the frequency of each codon used by each transcript and the genome average, divided by the standard deviation[...]
In their supporting materials there are also tables listing the codon usage (in the normalised per 1000 codons format), a "hypergeometric distribution" p-value, and (based on that value) whether or not a codon was enriched. There's also table with Z-scores, but I'm not sure how this is connected to the p-values.
Does someone understand what happened here and can explain it to me?