population range estimation

220 views
Skip to first unread message

Christen Fleming

unread,
Aug 31, 2022, 12:47:23 PM8/31/22
to ctmm R user group
Conventionally, researchers have calculated population range estimates by taking the union of individual home-range coverage areas as the population coverage areas. Statistically, this is far from ideal and researchers know this, because they look at saturation curves of how the estimates depend on the sample size.

For a while now, ctmm has had the mean() function, which calculates the average of the individual home-range distributions, which is an improvement over merging the individual coverage areas, but this still isn't extrapolating out to the unknown population. Here is an example where the difference is very noticeable:
pkde.png
On the left is the mean of the (n=3 sample) individual distributions and on the right is the output of the new pkde() hierarchical kernel density estimation function, which places kernels of density on every sampled time, with a bandwidth optimized for population-range estimation, and accounting for autocorrelation and irregular sampling + a bias correction.

# code to reproduce the above plot
devtools::install_github("ctmm-initiative/ctmm")
library(ctmm)

data(buffalo)
DATA <- buffalo[4:6] # three northern buffalo

FITS <- list()
for(i in 1:length(DATA))
{
  GUESS <- ctmm.guess(DATA[[i]],interactive=FALSE)
  # using ctmm.fit here for speed, but you should almost always use ctmm.select
  FITS[[i]] <- ctmm.fit(DATA[[i]],GUESS,trace=2)
}

dt <- 2 %#% 'min' # from dt.plot
UDS <- akde(DATA,FITS,weights=TRUE,dt=dt,trace=TRUE)

MEAN <- mean(UDS) # distribution of the sample
PKDE <- pkde(DATA,UDS) # distribution of the population

EXT <- extent(list(MEAN,PKDE))
COL <- c('red','yellow','green')

par(mfrow=c(1,2))
plot(DATA,MEAN,col=COL,ext=EXT); title('mean()')
plot(DATA,PKDE,col=COL,ext=EXT); title('pkde()')

summary(MEAN)
summary(PKDE) # twice as large
Reply all
Reply to author
Forward
0 new messages