Neil Brocklehurst
  • Home
  • Research
  • Methods
    • RAC Beta Diversity
    • Defining Bioregions
    • Forbes' Metric
    • Biogeography Simulation
    • Diversity Simulation
    • Tooth-row Evolution Simulation
    • Pelycosaur Phylogeny
    • Analysis of Constraint
  • Publications
  • Contact
  • Home
  • Research
  • Methods
    • RAC Beta Diversity
    • Defining Bioregions
    • Forbes' Metric
    • Biogeography Simulation
    • Diversity Simulation
    • Tooth-row Evolution Simulation
    • Pelycosaur Phylogeny
    • Analysis of Constraint
  • Publications
  • Contact

Simulating the Evolution of a Tooth Row

This method was described in Brocklehurst, N., Haridy, Y. 2020. Do meristic characters used in phylogenetic analysis evolve in an ordered manner? Systematic Biology (In Press). See this paper for references and more detail on the concepts

Evolution is complicated. I know there are a lot of people who think it isn't, and who decide that all it takes is 20 minutes on Google to become an expert. But it is actually really complicated. And sometimes even the people who study it forget just how complicated it can be.
Take, for example, ordered characters in phylogenetic analysis. For those of you unfamiliar, most commonly used methods of deciding evolutionary relationships  using morphology work by tracking changes in discrete characters over a set of trees. Fewer changes mean a better tree (there are nuances and some more complex methods available, but they are underlain by these principles).  The discrete characters used can be simple yes/no answers e.g. the astragalus (an ankle bone): absent or present? But in other cases they can be continuous characters that have just been discretised, like the number of teeth. And these bring their own sets of decisions to make, such as whether or not the character should be ordered
In phylogenetic analysis, most characters will be unordered: getting from  character state 0 to state 1 is just as easy (and is counted as just as many changes) as getting to state 2. An  ordered character requires a transition from state 0 to state 2 to go through state 1, taking two transitions. For example, to get from four teeth to six teeth you have to go through five teeth. And for a character like number of teeth you can see the logic behind this. Surely, to get from  four teeth to six is harder than to five, and our methods should reflect this! But remember: nothing is ever so simple in evolution.
The development of most traits is under the control of a genetic regulatory network that forms a hierarchy of control. Hit the hierarchy at a high enough level and larger changes can be make. Like, for example, supressing the development of the entire tooth row rather than knocking out each tooth one by one in an ordered manner. You can also within the tooth row have different regions evolving semi-independently from each other. Canines, incisors, molars, all will be under differing selection pressures, and may change size and be supressed independently. To what extent will this affect whether the trait actually evolved in an ordered manner?
In order to answer this question, myself and Yara Haridy designed a simulation to see how these factors affect whether a tooth row evolves in an ordered manner or not. The base line of the simulation is a tooth row evolving by adding or subtracting one tooth at a time. Then we have some modularity. The jaw is split into four regions which change size through time independently of the changing number of teeth. Finally we have our regulatory hierarchy: a set of on/off characters that supress the development of the teeth in single regions, single bones or the entire tooth row. 
Picture
       The simulation has been wrapped up in an R function that I'm going to show you all how to use now. Links to download  the functions are in the tutorial

1.     If not yet installed, install  the R package phytools


2.     Read in the phytools package


library(phytools)


3.     Download and read in the tooth.sim() function (download via the link)


4.     
Generate a random tree by a birth death process (may need to rerun this line a couple of times; sometimes, if extinction happens too soon, a tree with only 1 or a small number of taxa is produced)

tree<-pbtree(b=0.1,d=0.05,n=100,scale=100)

5.     Choose analysis parameters. The tooth.sim() function has seven arguments:

·        tree: object of class phylo; the phylogeny over which evolution of the character is simulated. Required

·        max.teeth: class numeric; the maximum number of teeth allowed. Required. Default 40

·        param.H.1: class numeric; instantaneous transition rate of level 1 of the developmental controls: toothlessness or not. Can be NULL if such transitions are not wanted. Default 0.002

·        param.H.2:  class numeric; instantaneous transition rate of level 2 of the developmental controls: presence or absence of teeth in each bone (Maxilla or premaxilla). Can be NULL if such transitions are not wanted. Default 0.002

·        param.H.3: class numeric; instantaneous transition rate of level 3 of the developmental controls: presence or absence of teeth in each dental region (incisor, caniniform, premolar or molar). Can be NULL if such transitions are not wanted. Default 0.002

·        param.T: class numeric; instantaneous transition rate of level 4 of the developmental controls: addition or subtraction of teeth one by one. Required. Default 0.002

·        param.R: class numeric; sigma2 (i.e. rate) parameter of the brownian motion models used to simulate changes in relative size of the regions (incisor, caniniform, premolar or molar). Can be NULL; if so the tooth row will evolve as a single unit with no regionality. Default 0.04


7.     Run a simulation. This example does not include any modularity. 
The object produced is a vector giving the number of teeth of each taxon


test<-tooth.sim(tree,max.teeth=40,param.H.1=NULL,param.H.2=NULL,param.H.3=NULL, param.T=0.5,param.R=NULL)
 
test


8.     Now run a second simulation, this time with regionality of the tooth row. The object produced this time is a matrix, giving for each taxon (rows) the number of teeth in each tooth region (columns).

test2<-tooth.sim(tree,max.teeth=40,param.H.1=0.002,param.H.2=0.002,param.H.3=0.002, param.T=0.5,param.R=0.04)
 
test2




Powered by Create your own unique website with customizable templates.