With the wide-spread use of GPS technology to track animals in near real time, estimators of home range and movement have developed concurrently. Unlike the traditional point-based estimators (i.e., MCP, KDE with href/hplug-in) that only incorporate density of locations into home range estimation, newer estimators incorporate more data provided by GPS technology. While BBMM incorporates a temporal component and GPS error into estimates, dynamic Brownian Bridge Movement Models (dBBMM) incorporate temporal and behavioral characteristics of movement paths into estimation of home range (Kranstauber et al. 2012). However, estimating a movement path over the entire trajectory of data should be separated into behavorial movement patterns (i.e., resting, feeding) prior to estimating the variance of the Brownian motion (2 m). Overestimating the 2 m will cause an imprecision in estimation of the utilization distribution that dBBMM seeks to address (Kranstauber et al. 2012).

  1. Exercise 4.6 - Download and extract zip folder into your preferred location
  2. Set working directory to the extracted folder in R under File - Change dir...
  3. First we need to load the packages needed for the exercise

    library(adehabitatLT)
    library(move)
    library(circular)
    library(sp)
  4. Now open the script "MuleydBBMM.R" and run code directly from the script

    muleys <-read.csv("muleysexample.csv")
    str(muleys)

    #TIME DIFF ONLY NECESSARY AS A MEANS TO EXCLUDE POOR DATA LATER
    muleys$Date <- as.numeric(muleys$GPSFixTime)
    timediff <- diff(muleys$Date)*24*60
    muleys <-muleys[-1,]
    muleys$timediff <-as.numeric(abs(timediff))

  5. Make dates as.POSIXct so we can sort data later

    muleys$DT <-as.POSIXct(strptime(muleys$GPSFixTime, format='%Y.%m.%d %H:%M:%OS'))
    muleys$DT

  6. Sort data here to address error in code - must be done or move object will not be created! I am not sure why but if data is sorted properly in excel you may be able to ignore this step.

    muleys <- muleys[order(muleys$id,muleys$DT),]

    #EXCLUDE OUTLIERS AND POOR DATA FIXES

    newmuleys <-subset(muleys, muleys$Long > -110.90 & muleys$Lat > 37.80)
    muleys <- newmuleys
    newmuleys <-subset(muleys, muleys$Long < -107)
    muleys <- newmuleys

  7. Create a move object for all deer using the Move package

    loc <- move(x=muleys$X, y=muleys$Y, time=as.POSIXct(muleys$GPSFixTime, format="%Y.%m.%d %H:%M:%S"), proj=CRS("+proj=utm"),data=muleys, animal=muleys$id)
  8. Now create a dBBMM object

    d8_dbbmm <- brownian.bridge.dyn(object=ld8, location.error=22, window.size=19, margin=7, dimSize=100,time.step=180)

  9. Alternatively, create a Move object and run dBBMM for each deer individually for increased flexibility in plotting home range contours. Need to subset using muley$id column if proceeding with the code below this point.

    dataD8 <- subset(muleys, muleys$id == "D8")
    dataD8$id <- factor(dataD8$id)
    d8 <- move(x=dataD8$X, y=dataD8$Y, time=as.POSIXct(dataD8$GPSFixTime,
    format="%Y.%m.%d %H:%M:%S"), proj=CRS("+proj=utm +zone=12 +datum=NAD83"),
    data=dataD8, animal=dataD8$id)
    100
    d8_dbbmm <- brownian.bridge.dyn(object=d8, location.error=22, window.size=19,
    margin=7, dimSize=100,time.step=180)
    plot(d8_dbbmm)
    contour(d8_dbbmm, levels=c(.5,.9,.95,.99), add=TRUE)
    show(d8_dbbmm)

  10. Plot the movement of the animal

    par(mfcol=1:2)
    plot(loc2, , col=3, lwd=2, pch=20, xlab="location_east",
    ylab="location_north")

  11. Code in this exercise can be used to create ascii or shapefiles of resulting home range simiilar to code used in BBMM