View source: R/multiOptimaIntrinsic.R
multiOptimaIntrinsic | R Documentation |
This model describes an evolutionary process where multiple optima exist. Lineages are attracted to an optima in their vicinity (this is handled as a stochastic process where which attract affects which population at a given point in time is weighted with respect to the proximity of a given population's trait value to the given optima), but as a lineage approaches the attractor that controls it, it may experience less directional evolution in the direction of the optima, and overall show more variation. This framework allows for the model to describe the evolution with respect to multiple optima simultaneously, without needing to treat individual transitions between optima (or macroevolutionary 'regimes') as a separate parameter. Thus, the optima exist within a single evolutionary regime, with only a scaling parameter present that allows more or less frequent transitions between optima by altering the impact of proximity to optima.
multiOptimaIntrinsic(params, states, timefrompresent)
params |
A vector containing input parameters for the given model (see Description below on what parameters). |
states |
Vector of current trait values for a taxon. May be multiple for some models, but generally expected to be
only a single value. Multivariate |
timefrompresent |
The amount of time from the present - generally ignored except for time-dependent models. |
multiOptimaIntrinsic
describes a model of intrinsic character evolution with
multiple regimes. New character values are generated after one time step via a discrete-time OU
process with a particular optima assigned to a particular regime, and each time-step
a lineage has some finite probability of switching to a new regime, and being drawn to that regime's optima.
The chance of a lineage being drawn to a particular optima is based on proximity to
that optima, but the chance of switching to another regime is never completely negligible.
The strength of the draw to the optima, the attraction strength, 'alpha', is the same for all regimes (all optima).
This model has n input parameters:
multiOptimaIntrinsic
with params = sigma
(rate of dispersion),
alpha
(strength of attraction to an optima),
rho
(an exponent scaling the weighting of distance to optima –
this parameter will control the probability of a lineage switching optima),
and, finally, n (two or more) theta
values, which are the
optima for the different macroevolutionary adaptive regimes.
Our biological interpretation for this model is a scenario in which optima represent fixed phenotypic trait values, conveying maximum adaptive benefit relative to neighboring values in trait space. The proximity of a population to an optima makes it more likely to fall under the influence of that regime, and thus experience directional selection in the direction of that optima. However, as there are multiple optima, a lineage might be influenced by multiple nearby optima over its evolutionary history, rather than simply the closest trait optimum. Lineages equidistant between multiple optima should be equally likely to be drawn to any specific optima, and populations in general should experience the influence of nearby optima inversely relative to their distance from the optima. Thus, a lineage very close to an optimum would show a large variance in its trait values as it circles the adaptive plateau, with infrequent but sudden, far-spanning movements toward a different optimum.
A vector of values representing character displacement of that lineage over a single time step.
David W. Bapst
An alternative approach in TreEvo
to estimating a macroevolutionary landscape with multiple optima
is the Fokker-Planck-Kolmogorov (FPK) model, which can be fit with landscapeFPK_Intrinsic
.
This model does not assume a set number of optima nor that they have similar attractor strength, but
parameters may be difficult to interpret in isolation, and fitting this model may be slower with TreEvo
due to necessary linear algebra transformations.
Other intrinsic models are described at intrinsicModels
.
# three optima model, with strong attraction
set.seed(1)
params<-c(
sigma=0.1,
alpha=0.7,
rho=1,
theta=c(-20,20,50)
)
multiOptimaIntrinsic(params=params, states=0, timefrompresent=NA)
# simulate n time-steps, repeat many times, plot results
repeatSimSteps<-function(params,trait=0,nSteps){
for(i in 1:nSteps){
# add to original trait value to get new trait value
trait<-trait+multiOptimaIntrinsic(
params=params, states=trait, timefrompresent=NA)
}
trait
}
repSim<-replicate(300,repeatSimSteps(params,trait=0,100))
hist(repSim,main="Simulated Trait Values",breaks=20)
# same model above, with more switching between optima
set.seed(1)
params<-c(
sigma=0.1,
alpha=0.7,
rho=0.5,
theta=c(-20,20,50)
)
multiOptimaIntrinsic(params=params, states=0, timefrompresent=NA)
# simulate n time-steps, repeat many times, plot results
repeatSimSteps<-function(params,trait=0,nSteps){
for(i in 1:nSteps){
# add to original trait value to get new trait value
trait<-trait+multiOptimaIntrinsic(
params=params, states=trait, timefrompresent=NA)
}
trait
}
repSim<-replicate(300,repeatSimSteps(params,trait=0,100))
hist(repSim,main="Simulated Trait Values",breaks=20)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.