Speed function - time scale

21 views
Skip to first unread message

Alex Brunswick

unread,
Apr 27, 2026, 5:17:29 AMApr 27
to ctmm R user group
Hi ctmm community, likely a quick question here. I am hoping to calculate the average daily speed for some birds I have been tracking. 

I have run the speed function on GPS relocations for 5 birds, using their respective ctmm models and telemetry data. Code below.

The birds had relocation data for variable lengths of time (~1-3 months). 

However, the CI outputs were quite high for daily speed, so I am wondering what the timescale of the 'average' speed (CI) is (or can I manually set it?).

Is the CI output the average daily speed? Or is it the average speed over the whole time of sampling?

> speed <- Map(ctmm::speed,
             gttnov24_telemetry_cov_001,
             GTTnov24_ctmm_best_nocyc_002)

After reading the function's documentation I am just a bit confused, so I would greatly appreciate any guidance!

Alex Brunswick

unread,
Apr 27, 2026, 5:21:21 AMApr 27
to ctmm R user group
Also. The trackers were continuously recording on a 6-hourly duty cycle, but BOOST mode is also activated. Thus there are relocations every few minutes, with a general gap between 0444-0530 when the solar batteries ran out. 

The attached figure shows the sampling frequency and time scale of data for each bird.

GTT_data availability_001.png

Ismael V. Brack

unread,
Apr 27, 2026, 8:23:12 PMApr 27
to ctmm R user group
You can set:
myspeed <- speed(..., units=F)
It will return in meters per second. Then you can transform for whatever you want, for example:
"kilometers / day" %#% myspeed

Alex Brunswick

unread,
Apr 28, 2026, 12:13:07 AMApr 28
to Ismael V. Brack, ctmm R user group
Hi Ismael

Thank you very much for your help. 

However, I tried the ctmm unit conversion as you mentioned, and it provided an impossible answer. I'll provide more code below. 

Option 1: I don't set units

When I don't set any units, the results explicate that they are in km/day, although the values are higher than expected they are possible. I am surprised that the object says it is in km/day, because reading has suggested that the generic speed function will provide average speed over the whole sample period.
 
speed <- Map(ctmm::speed,
             gttnov24_telemetry_cov_001,
             GTTnov24_ctmm_best_nocyc_002, units = TRUE)

> print(speed$PNL$CI)

                                      Low              est                 high

speed (kilometers/day)     80.6263     81.16967     81.71393

Option 2: I set units

Setting units seems to provide impossible values (the birds have home range sizes of ~- but perhaps I did it wrong?

> pna.km.day <- "km / day" %#% speed$PNA$CI
> print(pna.km.day)                          

                         Low                 est                    high 

speed (kilometers/day)    5902.356         5946.69             5991.106         
[all impossible]

Perhaps did the units=TRUE turn the calculation into km/day?

Any help would be amazing!

Cheers

From: ctmm...@googlegroups.com <ctmm...@googlegroups.com> on behalf of Ismael V. Brack <ismae...@gmail.com>
Sent: Tuesday, April 28, 2026 8:23 AM
To: ctmm R user group <ctmm...@googlegroups.com>
Subject: [ctmm-user] Re: Speed function - time scale
 
--
You received this message because you are subscribed to the Google Groups "ctmm R user group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ctmm-user+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/ctmm-user/7edf760e-12bb-4f92-bf3e-c03528d635fan%40googlegroups.com.

Christen Fleming

unread,
Jun 6, 2026, 10:39:14 PMJun 6
to ctmm R user group
Hi Alex,

  1. Option 1 has units=TRUE which will yield automated units (likely km/day), but this won't necessarily be consistent across individuals.
  2. Option 2 will only work if you started with units=FALSE.
  3. If they are active only during the day/night, then the result will be the mean speed during that period and not the entire 24-hour cycle. "km/day" is just the units of the estimate and not a daily estimate. E.g., if they are only active during that 6-hour period, then their daily movement is 20 km. If they are only active for 12 hours, then their daily movement is 40 km. The function doesn't know the biology beyond the data provided.
  4. Have you tried running outlie() to see how big the errors are? If there is finely sampled data, you likely need an error model to use that, or you will get large speed estimates.

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