Skip to contents

Multispecies interactions

Multispecies data can be used with spatsoc to estimate interspecific interactions, eg. predator-prey dyanmics.

Given two datasets of movement data, simply bind them together and use the group_* functions as usual.

predator <- fread(system.file("extdata", "DT_predator.csv", package = "spatsoc"))
prey <- fread(system.file("extdata", "DT_prey.csv", package = "spatsoc"))

DT <- rbindlist(list(predator, prey))

# Set the datetime as a POSIxct
DT[, datetime := as.POSIXct(datetime)]


# Temporal grouping
group_times(DT, datetime = 'datetime', threshold = '10 minutes')
#>           ID        X       Y            datetime population     type minutes
#>       <char>    <num>   <num>              <POSc>      <int>   <char>   <int>
#>    1:      B 708315.6 5460839 2016-11-30 14:00:45          1 predator       0
#>    2:      A 709764.2 5458231 2017-01-05 10:00:54          1 predator       0
#>    3:      B 709472.3 5460132 2016-12-03 08:00:42          1 predator       0
#>    4:      A 713630.5 5456393 2017-01-27 02:01:16          1 predator       0
#>    5:      B 707303.2 5461003 2016-12-17 18:00:54          1 predator       0
#>   ---                                                                        
#> 5824:      G 708660.2 5459275 2017-02-28 14:00:44          1     prey       0
#> 5825:      G 708669.4 5459276 2017-02-28 16:00:42          1     prey       0
#> 5826:      G 708212.0 5458998 2017-02-28 18:00:53          1     prey       0
#> 5827:      G 708153.2 5458953 2017-02-28 20:00:12          1     prey       0
#> 5828:      G 708307.6 5459182 2017-02-28 22:00:46          1     prey       0
#>       timegroup
#>           <int>
#>    1:         1
#>    2:         2
#>    3:         3
#>    4:         4
#>    5:         5
#>   ---          
#> 5824:      1422
#> 5825:      1423
#> 5826:      1424
#> 5827:      1425
#> 5828:      1440

# Spatial grouping
group_pts(DT, threshold = 50, id = 'ID', coords = c('X', 'Y'), timegroup = 'timegroup')
#>           ID        X       Y            datetime population     type minutes
#>       <char>    <num>   <num>              <POSc>      <int>   <char>   <int>
#>    1:      B 708315.6 5460839 2016-11-30 14:00:45          1 predator       0
#>    2:      A 709764.2 5458231 2017-01-05 10:00:54          1 predator       0
#>    3:      B 709472.3 5460132 2016-12-03 08:00:42          1 predator       0
#>    4:      A 713630.5 5456393 2017-01-27 02:01:16          1 predator       0
#>    5:      B 707303.2 5461003 2016-12-17 18:00:54          1 predator       0
#>   ---                                                                        
#> 5824:      G 708660.2 5459275 2017-02-28 14:00:44          1     prey       0
#> 5825:      G 708669.4 5459276 2017-02-28 16:00:42          1     prey       0
#> 5826:      G 708212.0 5458998 2017-02-28 18:00:53          1     prey       0
#> 5827:      G 708153.2 5458953 2017-02-28 20:00:12          1     prey       0
#> 5828:      G 708307.6 5459182 2017-02-28 22:00:46          1     prey       0
#>       timegroup group
#>           <int> <int>
#>    1:         1     1
#>    2:         2     2
#>    3:         3     3
#>    4:         4     4
#>    5:         5     5
#>   ---                
#> 5824:      1422  5467
#> 5825:      1423  5468
#> 5826:      1424  5469
#> 5827:      1425  5470
#> 5828:      1440  5471


# Calculate the number of types within each group
DT[, n_type := uniqueN(type), by = group]
DT[, interact := n_type > 1]

# Prey's perspective
sub_prey <- DT[type == 'prey']
sub_prey[, mean(interact)]
#> [1] 0.01169693



# Plot --------------------------------------------------------------------
# If we subset only where there are interactions
sub_interact <- DT[(interact)]

# Base R plot
plot(sub_prey$X, sub_prey$Y, col = 'grey', pch = 21)
points(sub_interact$X, sub_interact$Y, col = factor(sub_interact$type))