Take the 2-minute tour ×
Biology Stack Exchange is a question and answer site for biology researchers, academics, and students. It's 100% free, no registration required.

Are there any tools to do phylogenetic analysis of gene enrichment? This is, I have a list of genes from an experiment performed in several species, with a z-score that can be described as "enrichment" associated to each gene in each species. It's not gene expression, it's enrichment of a certain marker n the gene. I would like to compare these lists, that are not fully overlapping, across the phylogeny of the species, to see significant changes in the trend of enrichment at the gene level, or at the branch level. What tools could I use for this?

Species1 Z-score
Gene1    0.532
Gene2    0.531
...

Species2 Z-score
Gene1    0.51
Gene3    0.505
...
share|improve this question
1  
Out of interested, what is the marker you are using to score each species enrichment? –  Luke Jun 1 '12 at 13:17
    
It's TF motif predictions over small windows of genomic regions. –  149781-32509185 Jun 1 '12 at 13:27
    
OK, and I take it you have tried hierarchical clustering? Certainly where I would start –  Luke Jun 1 '12 at 13:58
    
I forgot, before post, but here is an example of Directed Acyclic Graph (DAG) for over-representation analysis brainchronicle.blogspot.mx/2012/05/… –  friveroll Jun 14 '12 at 1:47

2 Answers 2

Phylogenetically analyzing genes that are not present in every species may present you with some problems, but it is completely feasible to simultaneously analyze the relatedness of the species (based on your enrichment score), and the relatedness of the scores themselves.

Forgive me if this is too 'simple' an analysis, but you have not said what you have tried.

My choice of approach would be to use R (open source stats package) to generate a heatmap of your matrix of data. There are plenty of options for the method of clustering, but the defaults tend to produce quite a nice heatplot, with hierarchical cluster analysis performed on both dimensions of the data (you can specify only 1, or even none, if you prefer). I have used the following code to simulate some data to generate the below heatmap;

# generate 10x10 matrix using random data
x <- as.matrix(data.frame(rnorm(10),rnorm(10),rnorm(10),rnorm(10),rnorm(10),rnorm(10),rnorm(10),rnorm(10),rnorm(10),rnorm(10)))
# use heatmap function on the data. "labRow" and "labCol" simply remove the labels.
heatmap(x, xlab="Genes", ylab="Species", labRow="", labCol="")

Heatmap generated using R


Because it is randomly generated data there are no patterns really, but if you were to stick you real data in there it would look better no doubt. (In an actual analysis you will want to leave the labels on, I was just simplifying the plot). The function can handle missing values, so you could put all the genes you want to analyze in there, even if not all species have them.

Using this method you could see the most closely related species by gene enrichment, and also which are the most closely related genes (in terms of enrichment for your TF).

share|improve this answer

From your example

Species1 Z-score
Gene1    0.532
Gene2    0.531
...

Species2 Z-score
Gene1    0.51
Gene3    0.505

You need to get a matrix for all the Z-scores from your species, like this

Genes    Species1    Species2
Gene1    0.532         0.51
Gene2    0.531         NA
Gene3    NA            0.505         

And then, you can easly calculate the distance matrix for your enrichment set, to do phylogenetic analysis with R

For example

genes <- c(paste(rep("gene",10), seq(1,10,1), sep=""))
Species <- c(rep(rnorm(10, 0.5 ,0.3), 10))
Species.name <- c(paste(rep("Species", 10), seq(1,10,1), sep=""))

gene.matrix <- data.frame(Species1=Species[1:10], Species2=Species[11:20], 
                          Species3=Species[21:30], Species4=Species[31:40],
                          Species5=Species[41:50], Species6=Species[51:60],
                          Species7=Species[61:70], Species8=Species[71:80],
                          Species9=Species[81:90], Species10=Species[91:100],
                          row.names=genes)

d.gene.matrix <- dist(gene.matrix, method = "euclidean")

tree <- hclust(d.gene.matrix)
plot(tree)

    > gene.matrix
         Species1   Species2   Species3   Species4   Species5   Species6   Species7
gene1  0.97128393 0.97128393 0.97128393 0.97128393 0.97128393 0.97128393 0.97128393
gene2  0.85378459 0.85378459 0.85378459 0.85378459 0.85378459 0.85378459 0.85378459
gene3  0.85152911 0.85152911 0.85152911 0.85152911 0.85152911 0.85152911 0.85152911
gene4  0.52703866 0.52703866 0.52703866 0.52703866 0.52703866 0.52703866 0.52703866
gene5  0.49145958 0.49145958 0.49145958 0.49145958 0.49145958 0.49145958 0.49145958
gene6  0.70815764 0.70815764 0.70815764 0.70815764 0.70815764 0.70815764 0.70815764
gene7  0.66739808 0.66739808 0.66739808 0.66739808 0.66739808 0.66739808 0.66739808
gene8  0.47487837 0.47487837 0.47487837 0.47487837 0.47487837 0.47487837 0.47487837
gene9  0.13635000 0.13635000 0.13635000 0.13635000 0.13635000 0.13635000 0.13635000
gene10 0.07511424 0.07511424 0.07511424 0.07511424 0.07511424 0.07511424 0.07511424
         Species8   Species9  Species10
gene1  0.97128393 0.97128393 0.97128393
gene2  0.85378459 0.85378459 0.85378459
gene3  0.85152911 0.85152911 0.85152911
gene4  0.52703866 0.52703866 0.52703866
gene5  0.49145958 0.49145958 0.49145958
gene6  0.70815764 0.70815764 0.70815764
gene7  0.66739808 0.66739808 0.66739808
gene8  0.47487837 0.47487837 0.47487837
gene9  0.13635000 0.13635000 0.13635000
gene10 0.07511424 0.07511424 0.07511424

enter image description here

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.