Skip to contents

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.

Usage

calculate_suitability(vmax, vopt, vmin, venv)

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

Value

<numeric> environmental 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.