Calculate / estimate the environmental suitability for a given environmental value, based on a beta distribution, using the three "cardinal" values of the species for that environmental niche.
Arguments
- vmax
<numeric>
upper (i.e. maximum) tolerable value- vopt
<numeric>
optimal (i.e. preferred) value- vmin
<numeric>
lower (i.e. minimum) tolerable value- venv
<numeric>
environmental value for which to calculate the suitability
Details
The environmental suitability is calculated based on a beta distribution after a formula provided by Yin et al. (1995) and simplified by Yan and Hunt (1999) (see references paragraph) $$suitability = (\frac{V_{max} - V_{env}}{V_{max} - V_{opt}}) * (\frac{V_{env} - V_{min}}{V_{opt} - V_{min}})^{\frac{V_{opt} - V_{min}}{V_{max} - V_{opt}}}$$
Note
The original formula by Yin et al. was only intended to calculate the relative daily growth rate of plants in relation to temperature. The abstraction to use this to A) calculate a niche suitability; and B) use it on other environmental values than temperature might not be valid. However, the assumption that the environmental suitability for one niche dimension is highest at one optimal value and decreases towards the tolerable minimum and maximum values in a nonlinear fashion seems reasonable.
References
Yin, X., Kropff, M.J., McLaren, G., Visperas, R.M., (1995) A nonlinear model for crop development as a function of temperature, Agricultural and Forest Meteorology, Volume 77, Issues 1–2, Pages 1--16, doi:10.1016/0168-1923(95)02236-Q
Also, see equation 4 in: Weikai Yan, L.A. Hunt, (1999) An Equation for Modelling the Temperature Response of Plants using only the Cardinal Temperatures, Annals of Botany, Volume 84, Issue 5, Pages 607--614, ISSN 0305-7364, doi:10.1006/anbo.1999.0955
Examples
calculate_suitability(
vmax = 30,
vopt = 25,
vmin = 10,
venv = 1:40
)
#> [1] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
#> [7] 0.000000000 0.000000000 0.000000000 0.000000000 0.001125926 0.008533333
#> [13] 0.027200000 0.060681481 0.111111111 0.179200000 0.264237037 0.364088889
#> [19] 0.475200000 0.592592593 0.709866667 0.819200000 0.911348148 0.975644444
#> [25] 1.000000000 0.970903704 0.873422222 0.691200000 0.406459259 0.000000000
#> [31] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
#> [37] 0.000000000 0.000000000 0.000000000 0.000000000
calculate_suitability(
vmax = seq(30, 32, length.out = 40),
vopt = seq(20, 23, length.out = 40),
vmin = seq(9, 11, length.out = 40),
venv = 1:40
)
#> [1] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
#> [8] 0.0000000 0.0000000 0.0637462 0.1932336 0.3222710 0.4449278 0.5585313
#> [15] 0.6614255 0.7523980 0.8304607 0.8947469 0.9444555 0.9788188 0.9970819
#> [22] 0.9984890 0.9822737 0.9476518 0.8938155 0.8199290 0.7251248 0.6084998
#> [29] 0.4691125 0.3059800 0.1180754 0.0000000 0.0000000 0.0000000 0.0000000
#> [36] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
try(calculate_suitability(
vmax = 1,
vopt = seq(20, 23, length.out = 40),
vmin = seq(9, 11, length.out = 40),
venv = 1:40
))
#> Error : The sizes of venv, vmax, vopt and vmin are not equal.