# parsimony and maximum likelihood tree comparison in R

Maximum Likelihood analysis compares the tips or the species based on their sequence similarity while Parsimony analysis compares the characteristic features among the species.

So far I did comparison of both the tree using dendextend. Is there any other methods or library to make the comparison more quantitative.Due to my limited understanding I have this in mind. Can i even compare these two methods?

• Yes you can definitely compare both methods by tree topology, personally I do this via boostrapping.
– M__
Jun 6, 2020 at 20:25
• as usual what is the R way of doing it?
– kcm
Jun 7, 2020 at 8:45
• How many taxa are there in your tree?
– M__
Jun 7, 2020 at 9:57
• Hi no that is fine ... it is just that ML takes a long time and the number of taxa is key to the computational effort .. okay I will look at phangorn and post the code to bootstrap it. Do you use R on a cluster and are you happy 'farming' a job, e.g. splitting it in two or three?
– M__
Jun 7, 2020 at 11:03
• Ok I'll post up the codes, I need to look at phangorn it certainly does bootstrapping, but mid-week if thats ok? You know deadlines, deadlines ... :-(
– M__
Jun 7, 2020 at 14:06

I don't use R to build trees, I use established subprocessing stripts in Python and ETE3. So I've not run this code, but I do understand the critical parts of the code.

The hard bit is bootstrapping a maximum likelihood tree, first is the ML model 1.

fitGTR <-optim.pml(fitGTR, model="GTR", optInv=TRUE, optGamma=TRUE, + rearrangement = "NNI", control = pml.control(trace = 0))


The above model is perfect, general time reversible model with a gamma correction and an estimate of the invariant sites. This is the most important part of tree estimation. The NNI for tree rearrangements is a good one. So THIS is the model you want. You can emperical test this, but these days we don't bother.

The information given for bootstrapping,

2.

BStree <- bootstrap.pml(x, bs = 500, trees = TRUE, multicore = FALSE,
mc.cores = NULL, ...)


The critical parameter is bs=500. By default it uses bs=100 which I don't think is enough. I would set multicore = TRUE to speed the calculation (it will speed it up alot) and I assume there must be a setting for the number of cores (?).

I assume you can then stack all the parameters from 1/ into code 2. So in other words the model you used in part 1. (GTR PINVAR and Gammma) is same model used in the bootstrapping.

This will produce a bootstrap file, probably of 500 bootstrapped ML trees, so you need to produce a consensus and represent the values on the optimal ML tree.

Thus you need to overlay the bootstrap onto the tree that is output in 1. This says fitGTR and I suspect that will be a tree file with a likelihood, you might need to set a tree output and that would be 'tree' in the code below. 3.

plotBS(tree, BStrees, type = "myroot", bs.col = "black",
bs.adj = NULL, p = 50, frame = "none", ...)


The type = myroot is your defined outgroup for the tree. This should be your nicely bootstrapped tree.

There was also this code in the help manual and I'm not sure what this is doing. I suspect it is just producing bootstrapped datasets, so its not needed here.

bootstrap.phyDat(x, FUN, bs = 100, multicore = FALSE,
mc.cores = NULL, jumble = TRUE, ...)


To do the same with parsimony then just replace pml for parsimony. Comparing 2 bootstrap trees is a node is robust when it scores >80%

• will use this one to run
– kcm
Jun 21, 2020 at 8:57

Can i even compare these two methods?

See if this paper helps: https://www.nature.com/articles/nature02917

• Welcome @HD2000 thanks for your comment, could you please summarise the content of your weblink here? I agrree it is a very thought provoking paper indeed, one that didn't stand the test of conventional practice but waooo
– M__
Jul 23, 2020 at 9:11