Revisitation() output interpretation

38 views
Skip to first unread message

Lorenzo Frangini

unread,
Dec 2, 2025, 12:33:42 PMDec 2
to ctmm R user group
Hi,

I need some clarifications on revisitation() output, since it seems really promising for my data.
I have some GPS collared jackals which revisited many times some spots, especially during night when they are active (during day they mainly rest). Since the GPS schedule is irregular for most of them (more points during night, one during day) or have large intervals when they are regular (one fix every 4 hours), working in ctmm seems the best way to analyze these data.

After error calibration on one individual, the best model is "OUF anisotropic error" which should be good for revisitation() since it asks for a correlated velocity model, if I understood well. 

When running this code

HR<-akde(animal,ctmm.FIT,weights = T) #ctmm.FIT is the best model rev<-revisitation(animal,HR)

I obtain a similar (but not equal) result of 'HR' (see image1 attatched). Now, for what I understood the output of revisistation() is a UD where the PDF should represent the estimates the distribution of revisitations.
If I try to convert 'rev' object to a raster file to explore raster values, these have "strage" values: in left panel of image2 you can see the plot of 'rev' with GPS locations, and it makes sense (more or less) because the blue palette highlights higher revisistation values (right?). But the right panel is the output of raster(rev) and it shows opposite results, with higher values for external pixels (where GPS locations did not occurred) and lower values where they cluster. Since I did not find so much documentation on revisitation(), and it appears very appealing for my analysis, any help for interpretation (and/or mistake/misinterpretation I did) would be great!

Best
Lorenzo
image1.jpeg
image2.jpeg

Christen Fleming

unread,
Dec 2, 2025, 4:53:37 PMDec 2
to ctmm R user group
Hi Lorenzo,

Revisitation and utilization distributions will be the same when the process is stationary, so they will only appear substantially different if there are specific locations in the home range where the behavior changes substantially, like an open field that is always crossed very quickly or a den where the individual sleeps, which revisitation will upweight and downweight respectively.

The output values are of the CDF, which is the default. You can change this to the PDF or PMF.

Best,
Chris

Lorenzo Frangini

unread,
Dec 4, 2025, 12:36:56 PM (13 days ago) Dec 4
to ctmm R user group
Hi Chris,

thank you, really appreciated, and now it is much more clear.

My aim is to compare the landcover composition of some revisited areas (e.g., resting areas vs [potential] foraging areas), due to the strong temporal partitioning of jackal activity since during the day they rest and during the night they roam/prey (we know from accelerometer and camera trap data). To do so I need to highlight revisited areas or areas with higher probabilities of being revisited (with revisitatio()).

I have some more questions, hoping to be clear:

1. how strong may be the bias when using revisitation() if the best model is not a correlated velocity model (CVM)? I mean: some individuals show a strong revisitation ratio, but the best model fit is an OU model, therefore revisitation() cannot be used but it seems 
2. Regardless of CVMs, when using revisitation() on individuals with and others without CVM, the probability surfaces (PMF or PDF) depict maximum values really low (e.g., 0.000022), but I cannot understand why. May be they correct, since a scenario similar to the one you mentioned (open fields crossed or den locations) occur?
3. I think the main problem could be the fix rate, irregular and coarse (3 fix during night at 4 hour interval, and one during day) or regular and coarse (4 or 6 hour intervals), which may not enable to capture all the movement processes (even though this should be "corrected" through ctmm, shouldn't it?). Therefore, my idea was to predict and regularize the sampling rate at 2 hour interval, conditional to GPS locations, to see if revisitation results change or at least to use 'recurse' package (which asks for regular sampling rates). However the main problem is linked to the different behavioural states (day= resting, night= moving). If I try to use the function simulate or predict in ctmm, predicted paths during daily-consecutive-close locations may not be ecologically realistic since they depict 'loop' shapes, when I'd expect low movement. Do you have any tip or (even alternative) suggestion? Maybe a ctmm with behavioural switches could be good (I remember you mentioned during animove lectures https://doi.org/10.1111/2041-210X.13154), but I suppose it is difficoult to implement without an existing function in ctmm.

I'm sorry for the long message but as you can see my data are quite 'tricky' to use but at the same time they show interesting things. If you want I can also send you by private message some data.

Best,
Lorenzo

Christen Fleming

unread,
Dec 4, 2025, 4:22:09 PM (13 days ago) Dec 4
to ctmm R user group
Hi Lorenzo,

1. Without a continuous-velocity model selected, revisitation() should report a warning message and return a utilization distribution instead. The bias depends on how spatially dependent any non-stationarity is. There is no bias if the process is stationary.
2. The PDF integrates to 1 and the PMF sums to 1, so the values will not be large in any case. What were you intending to calculate?
3. You could try separate day and night estimates, and then mean() them together weighted by their mean revistation rates from the rates slot. 

Best,
Chris

Mallory S. Lambert

unread,
Dec 9, 2025, 2:46:32 PM (8 days ago) Dec 9
to ctmm R user group
Hello,

I have a similar/follow-up question here. I generated a PKDE and am confused because, when I convert it to a raster and plot(raster), the scale numbers go from 0.2-0.8, with large numbers indicating areas of low use and small numbers indicating areas of high use. In the past, when I have created AKDEs or BBMMs, large numbers typically indicate areas of high use. 

Hopefully, I am making sense. I just want to confirm that my PKDE was generated correctly and that smaller numbers indicate high-use areas.

Thanks very much,
Mal

image (4).png

Christen Fleming

unread,
Dec 10, 2025, 11:39:20 AM (8 days ago) Dec 10
to ctmm R user group
Hi Mal,

The default DF="CDF" exports the cumulative distribution function which corresponds to the percentage coverage areas and not the probability density (DF="PDF") or probability mass (DF="PMF").

I have added this to the FAQ.

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