Author: Hannah J. Calich, Jorge Rodríguez, Víctor Eguíluz & Ana M. M. Sequeira

# PhysMove: Intraspecific Movements

#### Hannah J. Calich, Jorge Rodríguez, Víctor Eguíluz & Ana M. M. Sequeira

#### Last updated: 2026-07-25

## Index

1. Introduction and data preparation
2. Movement patterns
3. Space-use patterns
4. Intraspecific movements

## Intraspecific movements

PhysMove includes three metrics for quantifying intraspecific movement patterns that are based on four functions, including:

- Track dispersion: `gyrationRad()` and `plotPDF()`
- Track entropy: `entropy()` and `plotPDF()`
- Track predictability: `predictability()` and `plotPDF()`

## Track dispersion

The `gyrationRad()` function calculates the dispersion (i.e., the gyration radius) of each track in a dataset (Figure V16).

`gyrationRad()` requires a data frame with telemetry data (see data formatting) and includes two optional parameters:

- `map`: create a map (`map=TRUE`, by default), and
- `mapCol`: change the colour of the points, which indicate average track location, and circles, which indicate how far each animal dispersed (`mapCol=c("Black", "Red")`, by default).

`gyrationRad()` outputs a data frame of the results that were used to create the map, including:

- ref: the reference ID for each track,
- avg long and avg lat: the average longitude and latitude coordinates in degrees for each track, and
- rG (km): the gyration radius in kilometres for each track

    # Calculate the dispersion of each track in the 'tracks' dataset
    GR <- gyrationRad(tracks)

Figure V16 Map illustrating dispersion patterns for `'tracks'` dataset using `gyrationRad()` default parameters. Black points represent the mean location of each track and red circles represent how far each track dispersed (i.e., each track’s gyration radius).

    # Summarize gyration radius results
    summary(GR)
    #>       ref        avg_long          avg_lat            rG_(km)
    #>  Min.   : 1   Min.   :-0.4659   Min.   :-1.48078   Min.   : 61.10
    #>  1st Qu.: 7   1st Qu.: 0.4374   1st Qu.:-0.49511   1st Qu.: 90.54
    #>  Median :13   Median : 1.1271   Median : 0.04625   Median :104.13
    #>  Mean   :13   Mean   : 1.2665   Mean   : 0.09926   Mean   :105.41
    #>  3rd Qu.:19   3rd Qu.: 1.7190   3rd Qu.: 0.71868   3rd Qu.:126.31
    #>  Max.   :25   Max.   : 3.5944   Max.   : 1.78492   Max.   :168.22

### Probability density function of gyration radius results

A pdf of the results from `gyrationRad()` can be plotted with the `plotPDF()` function when the `desc` parameter is set to “gyrationRad” (Figure V17).

    # Create a pdf plot of gyration radius values
    pdf.gr <- plotPDF((GR$`rG_(km)`), desc="gyrationRad")

Figure V17 Probability density function (pdf) plot of gyration radius values for the `'tracks'` dataset determined with `gyrationRad()` default parameters. Plot created using `plotPDF()` with `desc="gyrationRad"`.

Back to top

## Track entropy

The `entropy()` function calculates track randomness based on the fraction of data points from each track within each grid cell (Figure V18). The resulting entropy scores are then normalised so results can be compared between individuals. Note that if a track only visits a single grid cell, normalised entropy cannot be calculated and will return NaN; these values are excluded from visualisations.

`entropy()` requires a data frame with telemetry data (see data formatting) and includes two optional parameters:

- `gridCell`: change grid cell size in degrees (`gridCell=0.25`, by default), and
- `histPlot`: output a histogram (`histPlot=TRUE`, by default).

`entropy()` outputs a data frame with four columns, including:

- ref: reference ID for each track,
- normalisedEntropy: normalised entropy scores,
- indivEntropy: individual entropy scores (before normalisation), and
- cellsVisited: number of cells visited by each track.

    # Calculate track entropy using default parameters
    Ent <- entropy(tracks)

Figure V18 Histogram of normalised entropy scores for `'tracks'` dataset created using `entropy()` default parameters.

    # Summarise entropy results
    summary(Ent)
    #>       ref     normalisedEntropy  indivEntropy    cellsVisited
    #>  Min.   : 1   Min.   :0.8637    Min.   :2.942   Min.   :27.00
    #>  1st Qu.: 7   1st Qu.:0.8984    1st Qu.:3.277   1st Qu.:39.00
    #>  Median :13   Median :0.9142    Median :3.708   Median :59.00
    #>  Mean   :13   Mean   :0.9082    Mean   :3.621   Mean   :57.32
    #>  3rd Qu.:19   3rd Qu.:0.9202    3rd Qu.:3.889   3rd Qu.:71.00
    #>  Max.   :25   Max.   :0.9256    Max.   :4.189   Max.   :94.00

### Probability density function of entropy results

A pdf of the results from `entropy()` can be plotted with the `plotPDF()` function when the `desc` parameter is set to “entropy” (Figure V19).

    # Create a pdf plot of the entropy scores
    pdf.ent <- plotPDF(Ent$normalisedEntropy, desc="entropy")

Figure V19 Probability density function (pdf) plot of normalised entropy scores for `'tracks'` dataset determined with `entropy()` default parameters. Plot created using `plotPDF()` with `desc="entropy"`.

Back to top

## Track predictability

The `predictability()` function calculates the limit of predictability for each track based on their individual entropy scores (Figure V20).

`predictability()` requires a data frame with telemetry data (see data formatting) and a data frame of results output from `entropy()`, and includes two optional parameters:

- `startVal`: Optional starting value used to find a root value for the limit of predictability equation. If NULL (default), the starting value is automatically determined from the normalised entropy for each individual. The function will iteratively decrease the starting value by 0.01 until an acceptable root within (0,1) is found.
- `histPlot`: output a histogram (`histPlot=TRUE`, by default).

`predictability()` outputs a data frame of results with two columns, including:

- ref: reference ID for each track, and
- predictability: predictability scores for each track.

    # Track predictability using predictability() default parameters and the output from entropy()
    Pred <- predictability(tracks, Ent)

Figure V20 Histogram of predictability scores for `'tracks'` dataset determined using `predictability()` default parameters and entropy scores from `entropy()`.

    # Summarize predictability scores
    summary(Pred)
    #>       ref     predictability
    #>  Min.   : 1   Min.   :0.1798
    #>  1st Qu.: 7   1st Qu.:0.1992
    #>  Median :13   Median :0.2058
    #>  Mean   :13   Mean   :0.2217
    #>  3rd Qu.:19   3rd Qu.:0.2420
    #>  Max.   :25   Max.   :0.3002

### Probability density function of predictability results

A pdf of the results from `predictability()` can be plotted with the `plotPDF()` function when the `desc` parameter is set to “predictability” (Figure V21).

    # Create a pdf plot of the predictability scores
    pdf.pred <- plotPDF(Pred$predictability, desc="predictability")

Figure V21 Probability density function (pdf) plot of predictability scores for `'tracks'` dataset determined with `predictability()` default parameters and results from `entropy()`. Plot created using `plotPDF()` with `desc="predictability"`.

Back to top

## References & Recommended resources

Burnham, K.P. & Anderson, D.R. (2004) Multimodel Inference: Understanding AIC and BIC in Model Selection. Sociological Methods & Research, 33, 261-304.

Calich, H.J. et al. (2021) Comprehensive analytical approaches reveal species-specific search strategies in sympatric apex predatory sharks. Ecography, 44, 1544-1556.

Farage, C. et al. (2021) Identifying flow modules in ecological networks using Infomap. Methods in Ecology and Evolution, 12, 778–786.

Méndez, V., et al. (2013). Stochastic Foundations in Movement Ecology: Anomalous Diffusion, Front Propagation and Random Searches. Berlin, Heidelberg, Germany, Springer Berlin / Heidelberg.

Rodríguez, J.P. et al. (2017) Big data analyses reveal patterns and drivers of the movements of southern elephant seals. Scientific Reports, 7, 1-10.

Viswanathan, G. M., et al. (2011). The Physics of Foraging: An Introduction to Biological Encounters and Random Searches. Cambridge, Cambridge University Press.

Wickham, H. (2016) ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag, New York.