Description Usage Arguments Value Examples
Calculates the expected species diversity on an interval given a (possibly
time-dependent) exponential rate. Takes as the base rate (1) a constant, (2)
a function of time, (3) a function of time interacting with an environmental
variable, or (4) a vector of numbers describing rates as a step function.
Requires information regarding the maximum simulation time, and allows for
optional extra parameters to tweak the baseline rate. For more information
on the creation of the final rate, see make.rate
.
1 | var.rate.div(rate, t, n0 = 1, tMax = NULL, envRate = NULL, rateShifts = NULL)
|
rate |
The baseline function with which to make the rate. It can be a
|
t |
A time vector over which to consider the distribution. |
n0 |
The initial number of species is by default 1, but one can change to any nonnegative number. Note: |
tMax |
Ending time of simulation, in million years after the clade's
origin. Needed to ensure |
envRate |
A Note that, since simulation functions are run in forward-time (i.e. with
Acknowledgements: The strategy to transform a function of |
rateShifts |
A vector indicating the time of rate shifts in a step
function. The first element must be the first or last time point for the
simulation, i.e. |
A vector of the expected number of species per time point supplied
in t
, which can then be used to plot vs. t
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 | # let us first create a vector of times to use in these examples
time <- seq(0, 50, 0.1)
###
# we can start simple: create a constant rate
rate <- 0.1
# make the rate
r <- make.rate(0.5)
# plot it
plot(time, rep(r, length(time)), ylab = "Diversification rate",
xlab = "Time (Mya)", xlim = c(50, 0), type = 'l')
# get expected diversity
div <- var.rate.div(rate, time)
# plot it
plot(time, rev(div), ylab = "Expected number of species",
xlab = "Time (Mya)", xlim = c(50, 0), type = 'l')
###
# something a bit more complex: a linear rate
rate <- function(t) {
return(1 - 0.05*t)
}
# make the rate
r <- make.rate(rate)
# plot it
plot(time, rev(r(time)), ylab = "Diversification rate",
xlab = "Time (Mya)", xlim = c(50, 0), type = 'l')
# negative values are ok since this represents a diversification rate
# get expected diversity
div <- var.rate.div(rate, time)
# plot it
plot(time, rev(div), ylab = "Expected number of species",
xlab = "Time (Mya)", xlim = c(50, 0), type = 'l')
###
# remember: rate is the diversification rate!
# we can create speciation...
lambda <- function(t) {
return(0.5 - 0.01*t)
}
# ...and extinction...
mu <- function(t) {
return(0.01*t)
}
# ...and get rate as diversification
rate <- function(t) {
return(lambda(t) - mu(t))
}
# make the rate
r <- make.rate(rate)
# plot it
plot(time, rev(r(time)), ylab = "Diversification rate",
xlab = "Time (Mya)", xlim = c(50, 0), type = 'l')
# get expected diversity
div <- var.rate.div(rate, time)
# plot it
plot(time, rev(div), ylab = "Expected number of species",
xlab = "Time (Mya)", xlim = c(50, 0), type = 'l')
###
# we can use ifelse() to make a step function like this
rate <- function(t) {
return(ifelse(t < 2, 0.2,
ifelse(t < 3, 0.4,
ifelse(t < 5, -0.2, 0.5))))
}
# change time so things are faster
time <- seq(0, 10, 0.1)
# make the rate
r <- make.rate(rate)
# plot it
plot(time, rev(r(time)), ylab = "Diversification rate",
xlab = "Time (Mya)", xlim = c(10, 0), type = 'l')
# negative rates is ok since this represents a diversification rate
# get expected diversity
div <- var.rate.div(rate, time)
# plot it
plot(time, rev(div), ylab = "Expected number of species",
xlab = "Time (Mya)", xlim = c(10, 0), type = 'l')
# this method of creating a step function might be annoying, but when
# running thousands of simulations it will provide a much faster
# integration than when using our method of transforming
# a rates and a shifts vector into a function of time
###
# ...which we can do as follows
# rates vector
rateList <- c(0.2, 0.4, -0.2, 0.5)
# rate shifts vector
rateShifts <- c(0, 2, 3, 5)
# make the rate
r <- make.rate(rateList, tMax = 10, rateShifts = rateShifts)
# plot it
plot(time, rev(r(time)), ylab = "Diversification rate",
xlab = "Time (Mya)", xlim = c(10, 0), type = 'l')
# negative rates is ok since this represents a diversification rate
# get expected diversity
div <- var.rate.div(rateList, time, tMax = 10, rateShifts = rateShifts)
# plot it
plot(time, rev(div), ylab = "Expected number of species",
xlab = "Time (Mya)", xlim = c(10, 0), type = 'l')
###
# finally let us see what we can do with environmental variables
# get the temperature data
data(temp)
# diversification
rate <- function(t, env) {
return(0.2 + 2*exp(-0.25*env))
}
# make the rate
r <- make.rate(rate, tMax = tMax, envRate = temp)
# plot it
plot(time, rev(r(time)), ylab = "Diversification rate",
xlab = "Time (Mya)", xlim = c(10, 0), type = 'l')
# get expected diversity
div <- var.rate.div(rate, time, tMax = tMax, envRate = temp)
# plot it
plot(time, rev(div), ylab = "Expected number of species",
xlab = "Time (Mya)", xlim = c(10, 0), type = 'l')
###
# we can also have a function that depends on both time AND temperature
# diversification
rate <- function(t, env) {
return(0.02 * env - 0.01 * t)
}
# make the rate
r <- make.rate(rate, tMax = tMax, envRate = temp)
# plot it
plot(time, rev(r(time)), ylab = "Diversification rate",
xlab = "Time (Mya)", xlim = c(10, 0), type = 'l')
# get expected diversity
div <- var.rate.div(rate, time, tMax = tMax, envRate = temp)
# plot it
plot(time, rev(div), ylab = "Expected number of species",
xlab = "Time (Mya)", xlim = c(10, 0), type = 'l')
###
# as mentioned above, we could also use ifelse() to construct a step
# function that is modulated by temperature
# diversification
rate <- function(t, env) {
return(ifelse(t < 2, 0.1 + 0.01*env,
ifelse(t < 5, 0.2 - 0.05*env,
ifelse(t < 8, 0.1 + 0.1*env, 0.2))))
}
# make the rate
r <- make.rate(rate, tMax = tMax, envRate = temp)
# plot it
plot(time, rev(r(time)), ylab = "Diversification rate",
xlab = "Time (Mya)", xlim = c(10, 0), type = 'l')
# get expected diversity
div <- var.rate.div(rate, time, tMax = tMax, envRate = temp)
# plot it
plot(time, rev(div), ylab = "Expected number of species",
xlab = "Time (Mya)", xlim = c(10, 0), type = 'l')
# takes a bit long so we set it to not run, but the user
# should feel free to explore this and other scenarios
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.