
To install on Linux systems it may be required to type, interminal:
sudo apt install libgeos-devsudo apt install libproj-devsudo apt install libgdal-devthen manually installrgeos andrgdal inR/RStudio. However be advised these packages are being depreciated inlate-2023.
Thecropsavedimage parameter in the plotraster functioncrops the output image, removing excess whitespace, and usesmagick::image_trim.magick requires systempreinstall.
deb: libmagick++-dev (Debian, Ubuntu)rpm: ImageMagick-c++-devel (Fedora, CentOS, RHEL)csw:imagemagick_dev (Solaris)brew: imagemagick@6 (MacOS)Also see each script’s Details section in the manual pages, as thesefrequently contain tips or common bugfixes.
An animal’s home range can be defined as the area traversed by ananimal within which it engages in normal activities e.g., foraging,mating (Burt,1943). The most basic home range estimation method is the minimumconvex polygon (MCP), which draws a polygon enclosing all relocations(Mohr, 1947).However, due to subjectivity of the home range definition, a new termwas coined: the utilization distribution (UD;Winkle, 1975).
The UD is an improvement upon the MCP-derived home range estimationbecause this definition not only quantifies the size of a trackedanimal’s home range, but also the intensity with which sub-areas withinthe home range are used (Worton,1989). The kernel utilization distribution (KUD) is the first methodthat incorporated UDs for home range estimation. This method applies abivariate kernel function over each location fix, after which resultingvalues are averaged. However, the KUD assumes no spatial and temporalautocorrelation in the data, which is of course unrealistic in thecontext of animal movement data that are inherently spatially andtemporarily autocorrelated.

Horneet al. (2007) describe the use of movement models that incorporateBrownian motion (Brownian bridge moment model, BBMM), which offers amore sophisticated way to estimate space use. The traditional BBMMintegrates the temporal component of tracking data by explicitlymodeling movements between consecutive relocations. This is achieved byaccounting for both the order of subsequent relocations as well as thetravel time between them. The BBMM reconstructs the movement path bycomputing biased random walk iterations, creating a probability densitydistribution or “bridge” between two consecutive relocations where theanimal could have been when it was not detected.

A minimal time difference among relocations is then suggestive of astraight-line movement, and therefore the variance in Brownian motion(the associated error of the movement path) would be small; conversely,a larger time difference is suggestive of a tortuous movement path,which would result in a larger Brownian motion variance of thebridge.

Kranstauber et al. (2012) later introduced the dynamic BBMM (dBBMM),which improves upon the traditional BBMM in its calculation ofutilization distribution (UD) statistics. While the Brownian motionvariance in the BBMM is static i.e., constant throughout the movementtrack, the dBBMM allows this variance to vary to allow for changes in inbehaviour along the movement trajectory (e.g., foraging, travelling,resting, etc.). The result is improved performance in predicting animallocations. The dBBMM is also better equipped in dealing with irregularsampling of tracks, and would therefore be applied more appropriately totelemetry data for which you can anticipate gaps in detection (e.g., dueto tags requiring to breach the ocean surface to transmit their locationto a satellite (‘Smart Position Only Tag’ or SPOT), which depends on theanimal’s behaviour, or tag-equipped aquatic animals leaving a fixedacoustic receiver array, or a tag’s line of sight with a satellite beingobstructed by physical structures, etc.).
The dBBMM is calculated using the ‘move’ package. While this packageis great for calculating UDs, the package can only calculate a model andoutput a UD for a single individual. Grouping individuals together tocreate a group-level/aggregated UD is not realistic, because thebrownian.bridge.dyn() function requires a chronological movement path asinput; grouping multiple individuals together would imply thatindividuals can teleport. This package that builds on the move packageby being able to handle multiple individuals simultaneously, andaggregates individual UDs in a single group-level UD, offeringsignificant advancements in the investigation of group-/population levelspace use estimation of telemetered animals. Of additional benefit isthe ability to incorporate heterogeneous survey design e.g. unbalancednumbers of receivers across multiple arrays. All functions are designedto maximally automate the typical methodological pipeline, offloadingthe workload and technical skill required to (e.g.) scale and reprojectmultiple movement tracks to an optimal shared projection and extent, andplot output maps containing various disparate elements.
We strongly recommend that you download papers:
Kranstauber,B., Kays, R., LaPoint, S. D., Wikelski, M. and Safi, K. (2012) A dynamicBrownian bridge movement model to estimate utilization distributions forheterogeneous animal movement. Journal of Animal Ecology.
Kranstauber,B., M. Smolla & A. K. Scharf. (2019) Move: visualizing and analyzinganimal track data. R package version 4.2.4 (at 2023-08-15).
van ZinnicqBergmann, M. P. M., Guttridge, T. L., Smukall, M. J., Adams, V. M.,Bond, M. E., Burke, P. J., Fuentes, M. M. P. B., Heinrich, D. D. U.,Huveneers, C., Gruber, S. H., and Papastamatiou, Y. P. (2022) Usingmovement models and systematic conservation planning to inform marineprotected area design for a multi-species predator community. BiologicalConservation.
Strickland,B. A., Gastrich, K., Beauchamp, J. S., Mazzotti, F. J. and Heithaus, M.R. (2021) Effects of hydrology on the movements of a large-bodiedpredator in a managed freshwater marsh. Hydrobiologia
Also it’s imperative you read the R help files for each functionbefore you use them. In RStudio: Packages tab, scroll to movegroup,click its name, the click the function to see its man (manual) page.Read the whole thing. Function man pages can also be accessed from theconsole by typing?function.
Visualizing and Quantifying Space Use Data for Groups of Animals
Automates dynamic Brownian bridge movement model calculation forutilization distribution (UD) estimation for multiple individualssimultaneously, using functions in the ‘move’ package. The authors areindebted to the move package authors Bart Kraunstauber, Marco Smolla,and Anne K Scharf, and to Sarah Becker for seed code which inspired thedevelopment of the movegroup::movegroup function.
The movegroup function takes a dataframe of positions, datetimes, andIDs, e.g. from marine species, such as sharks or turtles being trackedby satellite or acoustic tags. These data are filtered to removeindividuals with too few data to process, a group-level basemap rasteris created upon which to calculate and later plot dBBMM utilisationdistribution hotspots, then each individual has a movement trackcalculated using the move package, data gaps are assessed and the tracksplit into multiple segments if gaps are too long, those segments have adynamic Brownian Bridge Movement Model and variance calculated on themagain using the move package, then the 50 and 95% utilisationdistribution volume areas are calculated. Finally the outputs are savedon a per-unique-ID basis.
For this and all functions, see the function’s help for specifics onthe function parameters, as well as errors and their origins.
Running the function is as simple as:
data("TracksCleaned")mysavedir<-"/your/directory/here/"movegroup(data = TracksCleaned,ID ="Shark",Datetime ="Datetime",Lat ="Lat",Lon ="Lon",savedir = mysavedir)However please appraise yourself of the meaning of the variousparameters as they pertain to your data, most notably movement errordistance (see moveLocErrorCalc below), and variously buffpct,rasterExtent, rasterResolution, centre for sizing your data and rasters,which has implications for later plotting. It might be that you need toadjust these elements after later seeing the resulting plots fromplotraster, or if an overly large raster has caused acrash.
Scales Individual Utilization Distribution Rasters and Volume AreaEstimates
Scales individual-level utilization distribution (UD) rasters from 0to 1 to facilitate interpretation as relative intensity of utilization(as opposed to absolute), making comparisons across individuals andinterpretations at the group level more straightforward. Subsequently,scaled individual-level rasters are aggregated to create a singlegroup-level UD raster. Seehttps://github.com/SimonDedman/movegroup/ for issues,feedback, and development suggestions. There is an option to account forbias in acoustic receiver array spatial representation (seeDetails).
The process employed by the function is:
Scale rasters: Individual-level UD rasters are scaled from 0 to 1by dividing each raster by the maximum probability density valueoccurring within the raster set.
Aggregate into a group-level raster: Scaled individual-levelrasters are summed to create a single group-level UD raster.
Re-scale to 0 to 1: The group-level raster is divided by its ownmaximum value.
Weight raster (optional): The scaled group-level UD raster isdivided by the specified weighting factor(s). Note that this is onlyuseful if you want to account for an unbalanced listening station (e.g.,acoustic receivers) array and have split up the study site and receiversin regions, and have runmovegroup for each regionaldataset separately. Seevan Zinnicq Bergmannet al. 2022 for example. If not applicable, leave as1,the default.
Standardize raster: Standardize the potentially weighted andscaled group-level UD raster so that its values sum to 1.
Export as geographical (latlon) CRS file: Change crs to latlonfor plotting and calculation purposes, save file, continue.
Estimate 50 and 95pct contour volume areas: For each scaledindividual-level UD raster, estimate 50 and 95pct contour volume areas,as well as their mean and standard deviation. Additionally, the 50 and95pct volume area is estimated for the group-level UD raster.
Export the projected-CRS group-level raster.
Having run themovegroup function above,scaleraster is run with:
scaleraster(path = mysavedir)To weigh by number of positions per ID, fewer locations = lowerweighting value = higher final values after dividing by weighting. Thisscales all IDs up to match the group max.
Weighting<- TracksCleaned|> dplyr::group_by(Shark)|> dplyr::summarise(N =n())|> dplyr::filter(N>23)|> dplyr::mutate(N = N/max(N,na.rm =TRUE))|> dplyr::pull(N)scaleraster(path = mysavedir,weighting = Weighting)Combines Region-Specific Group-Level UD Rasters into a SingleRaster
Extends the spatial extent of each area-specific group-level rasterto the spatial extent shared by all rasters. This will only be requiredif you have multiple individuals (e.g. different sharks) divided amongsta few discrete areas (e.g. around different islands) and the effort(e.g. receiver coverage) is different among islands. Not required formultiple individuals all within the same region or sampling regime.
To loopmovegroup andscaleraster throughtide subsets:
tide<-c("H","M","L")for (iin tide) {dir.create(paste0(mysavedir, i))movegroup(data = TracksCleaned[TracksCleaned$T.Ph== i, ],ID ="Shark",Datetime ="Datetime",Lat ="Lat",Lon ="Lon",savedir =paste0(mysavedir, i,"/"))scaleraster(path =paste0(mysavedir, i),crsloc =paste0(mysavedir, i))}alignraster(folderroots =paste0(mysavedir, tide),foldernames = tide,savefolder =paste0(mysavedir,"Aligned"))Plots a Group-Level Utilization Distribution
Plots 50 and 95pct contours of a group-level utilization distributionraster on a spatial map background. Contains functionality to alsovisualize geographic locations of individual listening stations (e.g.,acoustic receivers) as well as the entire surface UD.
This function plots the outputs ofscaleraster, andindividualmovegroup rasters if desired.
For plottitle, you can use the term ‘home range’ when an animal canbe detected wherever it goes i.e. using GPS, satellite or acoustictelemetry whereby it is known that acoustic receivers cover the entirehome range of the study species. This term is problematic when appliedto a passive acoustic telemetry setting where an array ofnon-overlapping receivers are used to assess local space use patternsi.e. the home range is bigger than the coverage by the acousticarray.
See the function’s help for specifics on the function parameters, aswell as errors and their origins.
To get Google map basemaps:
(fromhere):
Having run the movegroup and scaleraster function examples:
plotraster(x =paste0(mysavedir,"Scaled/All_Rasters_Scaled_Weighted_UDScaled.asc"),mapsource ="stamen",maptype ="terrain",savedir =paste0(mysavedir,"Plot"),xlatlon =paste0(mysavedir,"Scaled/All_Rasters_Scaled_Weighted_LatLon.asc"),locationpoints = TracksCleaned|> dplyr::rename(lat ="Lat",lon ="Lon"),pointsincontourssave =paste0(mysavedir,"Scaled/pointsincontours.csv"))If you’ve setup your Google maps API, you can expect graphics suchas:

moveLocError Calculator for ARGOS or State Space Models Resulting in95percent LatLon Confidence Intervals
Builds a dataframe of original locations plus rowmeans of meandistance of location extremities lon975, lat; lon025, lat; lon, lat975;lon, lat025 from the centre point lon, lat.
movegroup’smoveLocError parameter allows avector of error distances corresponding to the same-length vector ofpositions supplied in your dataset. For acoustic data, the error islikely static, in which case one can use a single value which isrepeated for all positions. For satellite data, each position can have adifferent error based on changing strength of satellite uplinkconnection, number of satellites for triangulation, etc. If you havepositions possibly filtered byargosfilter::sdafilter andwith state space models applied using theaniMotum package(a process you can follow thanks to scripts1&2by Vital Heim), this function converts those 95% confidence intervallatitude and longitude locations into a mean error distance perposition.
You can install the released version of movegroup fromCRAN with:
install.packages("movegroup")And the development version fromGitHub with:
# install.packages("devtools")remotes::install_github("SimonDedman/movegroup")See GitHub issues sectionhttps://github.com/SimonDedman/movegroup/issues Feelfree to contribute to this!