We often don’t root phylogenetic trees. This reduces the number of possible trees and is described by the equation:
Text: unrooted: (2n-5)!/[2n-3*(n-3)!]
(2n-5)!/[2^(n-3)*(n-3)!]
rooted: (2n-3)!/(2^(n-2))(n-2)!
Rendered:
\(\frac{(2*n-5)!}{2^{n-3} * (n-3)!}\)
Modify the function used in the “number of phylogenetic trees” tutorial to work for unrooted trees.
Compare your results to http://carrot.mcb.uconn.edu/mcb396_41/tree_number.html
You can use the simplest form of the function which doesn’t have any additional argument, eg
The function is here; make the necessary changeas
# change the code below to work for an un-rooted tree
tree_count <- function(n = 3){
#eqn: (2n-5)!/[2n-3*(n-3)!]
numerator <- factorial(2*n-5)
denominator <- (2^(n-3))*(factorial(n-3))
trees <- numerator / denominator
print(trees)
}
Create a function that will work for rooted OR unrooted trees. Do this by adding an additional argument like
type = “rooted”
and conditional additional statements like
if(type == "rooted){ #do this }
if(type == "unrooted){ #do something else }
Again, you can use the simplest form of the argument.
tree_count <- function(n=3, type="rooted")
{
#unrooted input
if (type=="unrooted")
{#(2n-5)!/[2n-3*(n-3)!]
numerator <- factorial(2*n-5)
denominator <- (2^(n-3))*(factorial(n-3))
trees <- numerator / denominator
}
#rooted input
if (type=="rooted")
{
#(2n-3)!/(2^(n-2))(n-2)!
numerator <- factorial(2*n-3)
denominator <- 2^(n-2)*factorial(n-2)
trees <- numerator / denominator
}
return(trees)
}
rooted<-tree_count(11, type="rooted")
unrooted<-tree_count(11, type="unrooted")
rooted<-paste("rooted: ",rooted)
unrooted<-paste("unrooted: ",unrooted)
rooted
## [1] "rooted: 654729075"
unrooted
## [1] "unrooted: 34459425"
For this assignment, render to RRubps, submit the link, and submit a screen grab that contains