Home range estimate 0, units is "area (square microns)", in error?

30 views
Skip to first unread message

Michael Roast

unread,
Jun 2, 2026, 6:00:12 AMJun 2
to ctmm R user group
I have a many individual animal tracks over different months of the year and I have estimated their home ranges on an individual by month basis. All individuals are more or less range resident but have slight seasonal or individual differences in home range size and location. 

There are too many to individually check variograms, and I have automated this, filtering individuals with months of little or poor data, and low estimated DOF. 

The weighted AKDE output appears meaningful in almost all cases except 39/1462 home ranges where the estimated area and confidence intervals are all 0 and the units is given as "area (square microns)". I *think* this is coming from processing the dataset collectively as a list, and needing to specify a collective extent and a lower grid resolution for computer processing reasons, when some individuals seem to have small homerange sizes that are less than the grid resolution? 

# Input data and generate variograms
plovers <- as.telemetry(df_move, timezone="Atlantic/Cape_verde")
SVF <- lapply(plovers, FUN = function(x) variogram(x))

# Next steps are in loops producing lists of objects along the ctmm workflow e.g.: 
GUESS <- list()
for(i in 1:length(plovers)){
  GUESS[[i]] <- ctmm.guess(plovers[[i]], variogram = SVF[[i]], interactive = FALSE)  
}


# Key lines in next loops
FITS[[i]] <- ctmm.select(plovers[[i]], GUESS[[i]], trace = 3, cores = -1)
wAKDEs[[i]] <- akde(plovers[[i]],FITS[[i]],weights=TRUE, grid=list(extent=EXT, dr=500, align.to.origin=TRUE))

# wAKDE estimates
SUMMARIES <- lapply(wAKDEs, FUN = function(x) summary(x))

# Element number 85 shows issue.
> SUMMARIES[[85]]
$DOF area bandwidth 461.9586 463.9999 $CI low est high area (square microns) 0 0 0 attr(,"class") [1] "area"


When I run animal track #85 separately and then generate the wAKDE independently with default grid, there is no problem. With low resolution the problem seems to be repeatable. With hi resolution (not default), the area estimate changes. 


vg <- variogram(plovers[[85]])
guess <- ctmm.guess(plovers[[85]], variogram = vg, interactive = FALSE)
fit <- ctmm.select(plovers[[85]], guess, trace = 3, cores = -1)
defAKDE <- akde(plovers[[85]], fit, weights=TRUE)
lowAKDE <- akde(plovers[[85]], fit, weights=TRUE, grid=list(extent=EXT, dr=500, align.to.origin=TRUE))
hiAKDE <- akde(plovers[[85]], fit, weights=TRUE, grid=list(extent=EXT, dr=50, align.to.origin=TRUE))


> summary(defAKDE) $DOF area bandwidth 461.9586 463.9999 $CI low est high area (hectares) 1.208742 1.327008 1.450715 attr(,"class") [1] "area" > summary(lowAKDE) $DOF area bandwidth 461.9586 463.9999 $CI low est high area (square microns) 0 0 0 attr(,"class") [1] "area" > summary(hiAKDE) $DOF area bandwidth 461.9586 463.9999 $CI low est high area (hectares) 1.805207 1.981833 2.166585 attr(,"class") [1] "area"

Ultimately, I am trying to compare homerange sizes of different individuals in different months, and generate a mean home range of all individuals in different months, so I need the homeranges to be comparable and computed collectively, but the grid size is a major limitation when computing the homeranges collectively. When using the mean(AKDE), are these individuals (like track #85) not contributing because they have estimate size 0? Can the home range sizes still be calculated at a variable resolution when calculated in  the akde() function collectively? I feel like I must be missing something that I can't compare many home ranges of different sizes because of computing and resolution issues? 

Thanks for any help you can offer on this and any suggestions to solve.

Christen Fleming

unread,
Jun 6, 2026, 11:20:34 PMJun 6
to ctmm R user group
Hi Michael,

You have a 1.3 hectare home range calculated on a grid with 25 hectare pixels. That's why its zero.

If you just want to compare home-range sizes in different months, they don't need to be in the same grid.

If you are averaging the months together, then it should be the case that the tiny month places all of its probability density in the one pixel, which is correct at the broader scale.

Best,
Chris

Michael Roast

unread,
Jun 9, 2026, 3:59:45 PMJun 9
to ctmm R user group
Hi Chris,

Thank you for your reply! That makes sense and at least the mean() function is still correctly considering the small home ranges at the broad scale on a low resolution grid. I think I just have to re-run the akde() for each home range with the default grid size to get more precise home range size estimates and accept that I can't use things like overlap() for all/any home range comparisons in the set.

Thank you,

Best,

Michael

Christen Fleming

unread,
Jun 9, 2026, 6:39:19 PMJun 9
to ctmm R user group
Hi Michael,

You can use overlap at the coarser scale and the results should come out accurately. The larger range's density is essentially constant throughout the smaller range, so the smaller range's density being in a single pixel shouldn't cause issues.

Best,
Chris

Christen Fleming

unread,
Jun 9, 2026, 8:57:42 PMJun 9
to ctmm R user group
I should add that the overlap between two small ranges will get a lot of numerical error, though, unless they are so far away that the Gaussian approximation is being invoked.

Best,
Chris
Reply all
Reply to author
Forward
0 new messages