home range for group of indeviduals

502 views
Skip to first unread message

Sasha Pekarsky

unread,
Feb 7, 2021, 8:22:57 AM2/7/21
to ctmm R user group
Hi Chris,

Thank you for development of the great tool and for the detailed and informative workflow in your methods paper. 

I'm new to the tool and have several questions regarding how to make the home ranges comparable between individuals. The data is on a central place forager bird (crane), returning to the roost every night. However, I'm interested only in day locations and thus the data is filtered to contain only points outside of the roost. the data is also subsampled to have sampling intervals between 15 and 30 minutes, but have occasional gaps of up to 2 hours due to battery problems (and a larger intentional gap during the night) 
 
(1) I'm a bit confused regarding the initial movement model. For the best of my understanding it can be done manually using  variogram.fit or automatically using ctmm.guess? after getting the initial model the model selection is performed based on the original model? It seems that the automatic and the manually fitted original models are very similar and also the OUF and OU based on model selection. Do I need to do that stage for every individual or using the ctmm.guess is enough (example 1 attached)?

(2)  In some cases the home range is changing during the period (example 2). In this case it is not a real range shift, but the animal using fields located farther from the roost, and I would like to calculate the home range for the entire period. Can it be done? If yes, the model should fit the lower or higher distances?

(3) The movement range is different between individuals and also the number of tracking days (viograms for all). Are the home ranges would be comparable? do I need to adjust somehow the grid size? 

(4) Do I need to use optimal weighting (because I have some sampling differences) when calculating the akde (weights=TRUE) or will it create a bias because the gap during the night 

Many thanks gain,
Sasha


exmaple1_Fitting_ctmm.PNG
viograms_all.PNG
example2.PNG

Christen Fleming

unread,
Feb 7, 2021, 5:10:32 PM2/7/21
to ctmm R user group
Thanks Sasha,
  1. ctmm.guess is a newer function that calls variogram.fit and there is usually no reason any longer to call variogram.fit directly. I will update the documentation to reflect that. Either function can be used interactively (by default with interactive=TRUE) or non-interactively (with interactive=FALSE). I recommend doing things interactively until you get the feel of what's going on and then automating everything (and checking assumptions afterwards). The output of ctmm.select (which calls ctmm.fit) should almost always be what you use at the end of the day. variogram.fit alone has no way of estimating uncertainty, and ctmm.fit alone has no way of estimating the relative performance of the model.
  2. If it's a sudden and substantial expansion, you might consider segmenting the data, making two range estimates and then averaging the two with mean(), or considering them separately.
  3. I'm not sure what you are asking here?
  4. If you do 15 minute intervals one day and 30 minute intervals another day, then you would want weights to fix that. With the amount of data I see in your variograms, I doubt there would be much added benefit to weighting for just random intervals between 15 and 30 minutes, which isn't as big of a problem as having structure in the schedule, unless the sample size is small. If the daily data starts and stops at the nest, then, yes, weights would bias the estimate to over-weight the nest. You might try and see what happens.
Best,
Chris

Grus Hula

unread,
Feb 9, 2021, 5:22:38 AM2/9/21
to ctmm R user group
Hi Chris,   

Thank you for such a quick answer.
Just to make clear, after the initial manual stage, if I want to automating things I would do something like that:

for (i in 1:length(Name)) {
  Animal <- yourAnimals[[Name[i]]]
  SVF <- variogram(Animal)
  GUESS_Auto <- ctmm.guess(Animal,
                           variogram = SVF,
                           interactive = FALSE)
  fitted.mods <- ctmm.select(Animal,CTMM=GUESS_Auto,IC = "AICc",verbose=TRUE,cores=2)
  
# extract the best model 
  best_model <- fitted.mods [[1]]
  UD <- akde(Animal,best_model) 
}

Is this correct?
In that case the best model is selected and it is not always the OUF (I added a plot with the best fitted model used for home range calculation). In some cases it is OU but with not a large difference in the AIC between the two. Should I use the best model or rather choose the OUF?

viograms_all_withBestModel.PNG

Regarding question 3, sorry for the confusion. I am talking about the fact the the bandwidth is different between individuals and I was wondering if it has an influence on the ability to compare the home ranges of different birds or is it irrelevant. 

Many thanks again,
Sasha

Christen Fleming

unread,
Feb 11, 2021, 1:12:27 PM2/11/21
to ctmm R user group
Hi Sasha,

Yes and yes. You should generally use a selected model over the most complex model, unless there is a strong reason otherwise.

Best,
Chris

Grus Hula

unread,
Feb 15, 2021, 5:35:49 AM2/15/21
to ctmm R user group
Thank you for your answer. Just some clarification to make sure:

My end goal is to (a) compare the home range sizes between individuals and seasons and (b) to look the proportion of overlap between the homepages and a certain protected area polygon.

for goal (a), do I need to set an identical grid resolution of Utilization Distribution for all birds?
Using something like this: 
dr <- c(x,y)
UD <- akde(Animal,best_model, grid=dr) 
If yes, How do I determine the relevant grid size? Choosing the smallest/largest grid size that is used by the automated function? 
How do I extract it is it the "bandwidth" or "h" as shown below and what are the units? 

$DOF
area            bandwidth 
176.0836   395.7753 

UD$h 
x                   y 
0.3880728  0.3880728

For goal (b) I guess that I would need to extract the estimated homerage using:
BirdArea <- SpatialPolygonsDataFrame.UD(UD,level.UD=0.5,level=0.95) 
But it gives me 3 polygons; the "min", "est" and "max", how can I extract only the "est"?
est_BirdArea <- ?  
library(raster)
inter<- intersect(protected_polygon,  est_BirdArea )

Best wishes,
Sasha

Christen Fleming

unread,
Feb 15, 2021, 2:35:29 PM2/15/21
to ctmm R user group
Hi Sasha

For (a) you don't need a common or consistent grid. I'm actually covering this on the Friday webinar.

For (b) it depends on what you want to calculate. I have some collaborators exporting the probability mass function (PMF) raster and calculating the probability mass in certain areas by adding the PMF values in those polygons. That sum gives you the predicted fraction of time spent in those areas.

Best,
Chris

Sasha Pekarsky

unread,
Feb 15, 2021, 3:32:52 PM2/15/21
to ctmm R user group
Hi Chris,

I just want to calculate the percent overlap between the 95% UD polygon and the protected area polygon. Is it wrong to interpret the ctmm akde results as polygon and they need to be analyzed as probability raster?

Thank you,
Sasha

Christen Fleming

unread,
Feb 15, 2021, 3:52:14 PM2/15/21
to ctmm R user group
Hi Sasha,

I would think more about what you want the result of the calculation to mean. If you export he PMF raster and sum the values in the protected area, then you get the predicted proportion of time spent in that area. If you export a 95% contour and geometrically overlap that with an area, then what does that calculation mean?

Best,
Chris

Sasha Pekarsky

unread,
Feb 16, 2021, 7:12:14 AM2/16/21
to ctmm R user group
Thank you, it's working perfectly and is very intuitive!

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