Assignment: unrooted trees

We often don’t root phylogenetic trees. This reduces the number of possible trees and is described by the equation:

Text: (2n-5)!/[2n-3*(n-3)!]

Rendered:

\(\frac{(2*n-5)!}{2^{n-3} * (n-3)!}\)

Assignment part 1

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 changes

# change the code below to work for an un-rooted tree
tree_count <- function(n = 3){
  
  # change the numerator if need
  numerator   <- factorial(2*n-5)
  
  # change the denominator if needed
  denominator <- 2^(n-3)*factorial(n-3)
  trees  <- numerator / denominator 
  print(trees)
  
}

tree_count(n = 10)
## [1] 2027025

Assignment part 2

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"){
  
  if(type == "rooted"){
    # conditional statement
  if(n < 2){
    warning("This function is only valid for 2 or more taxa.")
  }
  
  # the math
  numerator   <- factorial(2*n-3)
  denominator <- 2^(n-2)*factorial(n-2)
  trees  <- numerator / denominator 
  
  # print the output
  print(trees)
  }
  
  if(type == "unrooted"){
    if(n < 2){
    warning("This function is only valid for 2 or more taxa.")
  }
  # change the numerator if need
  numerator   <- factorial(2*n-5)
  # change the denominator if needed
  denominator <- 2^(n-3)*factorial(n-3)
  trees  <- numerator / denominator 
  print(trees)
  # re-set the formatting
  options(scipen = 0,digits = 7)
  }
  
}

tree_count(n = 11, type = "unrooted")
## [1] 34459425
tree_count(n = 11, type = "rooted")
## [1] 654729075

For this assignment, render to RRubps, submit the link, and submit a screen grab that contains