Dear all,
I am looking for software or methods that I can use to check whether a pre-specified monophyletic group is present in the gene trees that I have (1000's of trees). Basically, I have the reference tree and I know which all labels forms a clade or monophyletic group. I can give this info and I would like to test whether the gene trees follows the same monophyletic grouping?
Is there a way to do that either using R (ape) or any protocol available.
Here is a sample tree with 4 clades
((((((A:0.00021,(B:0.00005,C:0.00005):0.00017):0.00008,
D:0.00029):0.00039,((E:0.00001,F:0.00001):0.00035,
J:0.00036):0.00032):0.00050,((H:0.00052,I:0.00052):0.00009,
J:0.00061):0.00057):0.00143,(K:0.00075,(L:0.00054,
M:0.00054):0.00021):0.00185):0.00102,N:0.00363);
2 answers
You can do it programmatically with the ETE toolkit. Check this example:
from ete2 import Tree
t = Tree("((((((a, e), i), o),h), u), ((f, g), j));")
print t
# /-a
# /-|
# /-| \-e
# | |
# /-| \-i
# | |
# /-| \-o
# | |
# /-| \-h
# | |
# | \-u
# --|
# | /-f
# | /-|
# \-| \-g
# |
# \-j
# all vowels are not monophyletic in the
# previous tree, but polyphyletic (a foreign label breaks its monophyly)
print t.check_monophyly(values=["a", "e", "i", "o", "u"], target_attr="name")
# however, the following set of vowels are monophyletic
print t.check_monophyly(values=["a", "e", "i", "o"], target_attr="name")
# A special case of polyphyly, called paraphyly, is also used to
# define certain type of grouping. See this wikipedia article for
# disambiguation: http://en.wikipedia.org/wiki/Paraphyly
print t.check_monophyly(values=["i", "o"], target_attr="name")
You can compare the likelihood of constrained (with your monophyletic group of interest fixed) versus unconstrained trees. There are papers using Bayesian (e.g., MrBayes + Bayes factor here) and maximum likelihood (e.g., RAxML + approximately unbiased test here) phylogeny frameworks.
ape has a function is.monophyletic, so it should do what you want as well.
Log in to answer this question.