This is my reading notes for Functional and Phylogenetic Ecology in R by Nathan Swenson. All credits go to Nathan.
This post will be updated later when I learn more about this topic.
Chapter 2: Reading and plotting tree.
Possible packages needed.
install.packages(c("picante", "phylobase", "phylotools", "ecodist", "FD", "adephylo", "geiger")) lapply(c("picante", "phylobase", "phylotools", "ecodist", "FD", "adephylo", "geiger"), library, character.only = T)
Get data at here.
library(ape) my.phylo = read.tree("data/my.phylo.newick.file.txt") # read.tree() my.phylo is.ultrametric(my.phylo) # is.ultrametric() plot(my.phylo, cex = 0.5) add.scale.bar(length = 0.1) plot.phylo(my.phylo, type = "fan") # plot.phylo() nodelabels(frame = "none", cex = 0.8) tiplabels()
my.subtrees = subtrees(my.phylo) # subtrees() to subset my.subtrees[] # subtreeplot(my.phylo) plot(my.subtrees[]) drop.tree = drop.tip(my.phylo, c("e", "j")) # drop.tip() to prun tree plot(drop.tree) # extract.clade(my.phylo, interactive = T)
my.poly.phylo = read.tree("data/example.poly.txt") my.poly.phylo plot(my.poly.phylo) my.di.phylo = multi2di(my.poly.phylo) # multi2di() my.di.phylo plot(my.di.phylo)
multi2di() solves the polynomy by randomly add a zero length branch within the polynomy.
branching.times() returns branch times for all internodes, ordered from root to tips.
Phylo distance between pairs of terminal taxa
p.dist.mat = cophenetic(my.phylo) vcv(my.phylo)
cophenetic()returns a phylogenetic distance species by species matrix. Values in the matrix are the sum of the branch lengths separating each pair of species.
vcv()returns a species by species matrix also. But it is a phylogenetic variance-covariance (VCV) matrix. Diagonal values are the distance from the root to the tip; off-diagonal values are the amount of shared branch length between pairs of species. Or you can think it as a correlation matrix. The larger the values, the closer the species.
Simulating phylogenies in R
There are two common methods. Consider the assumptions when choose simulation method.
- Randomly split the edges. Begin with a single branch that randomly splits into two daughter branches, and the daughter branches may then branch into two, and so on.
new.tree = rtree(n = 40, rooted = T) # can provide tip.label=c(sp, sp,...) plot(new.tree)
- Randomly cluster the tips.
new.ultra.tree = rcoal(40) plot(new.ultra.tree) write.tree(new.ultra.tree, "name.txt")