Returns a body-mass / locomotor-mode prediction of the maximum
burst speed an animal of the given mass and mode is physically
capable of, using the general scaling law of Hirt et al. (2017).
Intended as a principled default for the v_max cap used by
mt_clean_track and mt_peel_speed when
the user does not have a species-specific number.
Usage
v_phys_estimate(
mass,
mode = c("flying", "running", "swimming"),
ci_level = 0.95
)Arguments
- mass
Numeric scalar. Body mass in kilograms (kg). Must be positive. A warning is issued when
masslies outside the range of the Hirt et al. (2017) dataset (3e-8 to 1.084e5 kg).- mode
Character. One of
"flying","running","swimming".- ci_level
Numeric in (0, 1). Confidence level for the parameter-uncertainty interval reported as the
"ci"attribute. Default 0.95.
Value
A length-1 numeric vector containing the central prediction in m/s. Attached attributes:
ciLength-2 numeric, lower and upper bound of the parameter-uncertainty interval at
ci_level, in m/s.kmhLength-1 numeric, central prediction in km/h (the original Hirt unit).
massThe supplied body mass.
modeThe supplied locomotor mode.
referenceA string citing Hirt et al. (2017).
Pass directly to mt_clean_track via the
v_max argument; numeric coercion strips the attributes
and yields the central estimate. mt_clean_track() also
accepts the (mass, mode) pair directly and runs the
estimator internally; that is the recommended path.
Details
The Hirt et al. (2017) model is a time-dependent saturation of a power-law scaling of theoretical maximum speed with body mass: $$v_{max} = a M^{b} \, (1 - e^{-h M^{i}})$$ where the first factor is the theoretical aerobic ceiling and the saturation term captures the finite anaerobic energy budget that limits large animals to a fraction of that ceiling. The fitted parameters per locomotion mode are taken directly from Supplementary Table 4 of Hirt et al. (2017) (M in kg, output v in km/h, internally converted to m/s):
| mode | a | b | h | i |
| flying | 142.8 +- 16.7 | 0.24 +- 0.01 | 2.4 +- 1.4 | -0.72 +- 0.26 |
| running | 25.5 +- 0.84 | 0.26 +- 0.006 | 22 +- 7.6 | -0.6 +- 0.05 |
| swimming | 11.2 +- 0.91 | 0.36 +- 0.02 | 19.5 +- 13.6 | -0.56 +- 0.07 |
Reported predictive accuracy R^2 = 0.893 across 622 data points from 474 species spanning 3e-8 to 1.084e5 kg.
Scope and caveats.
Hirt et al. excluded vertical (gravity-assisted) speeds from their dataset. This is the right scope for
move2utils, which operates on horizontally projected GPS / Argos / satellite tracking data. A peregrine stoop at 89 m/s in 3D projects to a much smaller horizontal step speed and falls under the model's prediction. For 3D-tracked diving / stooping data, the user should override with species-specific aerodynamic literature.The model's data are predominantly maximum anaerobic burst speeds – the impossibility ceiling, not the cruise speed. This is the right semantic for
v_max: outliers are transitions an animal cannot physically perform.Locomotor specialists (cheetah ~29 m/s, pronghorn antelope ~26 m/s, sailfish in water) sit in the upper tail of the residual distribution and can exceed the central prediction. When a published species-specific maximum is available, use it directly instead of the allometric default.
The returned prediction interval is propagated from the fitted parameter standard errors via the delta method. It describes parameter uncertainty in the model fit, not the species-to-species residual scatter; the latter implies a further roughly factor-of-2 spread documented in the original paper as the model R^2 = 0.893.
References
Hirt, M. R., Jetz, W., Rall, B. C., Brose, U. (2017). A general scaling law reveals why the largest animals are not the fastest. Nature Ecology & Evolution 1, 1116-1122. doi:10.1038/s41559-017-0241-4
Examples
## golden eagle, ~5 kg
v_phys_estimate(5, "flying")
#> v_max (allometric, Hirt et al. 2017): 30.89 m/s (111.19 km/h)
#> 95% parameter CI: [0.90, 60.88] m/s
#> inputs: mass = 5 kg, mode = flying
#> source: Hirt et al. (2017) Nat. Ecol. Evol., doi:10.1038/s41559-017-0241-4
## red fox, ~6 kg
v_phys_estimate(6, "running")
#> v_max (allometric, Hirt et al. 2017): 11.28 m/s (40.61 km/h)
#> 95% parameter CI: [10.51, 12.05] m/s
#> inputs: mass = 6 kg, mode = running
#> source: Hirt et al. (2017) Nat. Ecol. Evol., doi:10.1038/s41559-017-0241-4
## bottlenose dolphin, ~250 kg
v_phys_estimate(250, "swimming")
#> v_max (allometric, Hirt et al. 2017): 13.34 m/s (48.03 km/h)
#> 95% parameter CI: [0.00, 26.79] m/s
#> inputs: mass = 250 kg, mode = swimming
#> source: Hirt et al. (2017) Nat. Ecol. Evol., doi:10.1038/s41559-017-0241-4
if (FALSE) { # \dontrun{
## use as the principled v_max default
clean <- mt_clean_track(track,
v_max = v_phys_estimate(mass = 5,
mode = "flying"))
## equivalent and more idiomatic: pass (mass, mode) directly
clean <- mt_clean_track(track, mass = 5, mode = "flying")
} # }