Hi all,

I have been using R to create and manipulate phylogenetic trees for a while, but I was wondering what the differences are between the rooting functions in different packages, `ape::root`, `ggtree::reroot` and `phytools::reroot`.

I have attached an example. Every tree looks slightly different, and the tree created by `ggtree::reroot` seems best to me. Could anyone explain the differences?

    tree <- read.tree(text = "(t6:0.3806255851,(t7:0.5440872659,(t5:0.6203179485,t1:0.7089423968):0.3421749519):0.2618428892,((t4:0.5886056426,t3:0.8614832051):0.09094934678,(t8:0.6766210056,t2:0.1412485428):0.4451906278):0.2356684168);")
    
    par(mfcol=c(2,2), mar=c(0.5,0.5,1.3,0.5))
    
    plot(tree)
    nodelabels()
    title("original")
    
    tree1 <- ape::root(tree, node = 11)
    plot(tree1)
    nodelabels()
    title("ape::root")
    
    tree2 <- ggtree::reroot(tree, 11)
    plot(tree2)
    nodelabels()
    title("ggtree::reroot")
    
    tree3 <- phytools::reroot(tree, 11)
    plot(tree3)
    nodelabels()
    title("phytools::reroot")

![Example][1]

Any explanation would be greatly appreciated.


Best wishes,

Michael


  [1]: https://i.imgur.com/WM5XPgf.png
Just to clarify, the reason the tree from ggtree 'looks' better is because it is still bifurcating - but a bifurcating tree rooted at an internal node should contain a trifurcation at the root (as do the trees from phytools & ape). To obtain a bifurcating tree from rerooting an existing bifurcating tree we must position the root along an edge - but an edge is defined by two nodes, not one. Furthermore, we also need to specify where on the edge the rerooting must take place. In phytools this can be done using the argument *position*, or by selecting it interactively by setting interactive=TRUE (in which case we can click on the position along the edge where we would like the tree to be rooted).