如何计算循环尺度上与参考点的差异?

How to calculate difference from a reference point on a cyclic scale?

当参数的尺度本质上是循环的时候,我一直在研究如何计算参数拟合的误差。

例如,参数 "A" 可以在 0 和 1 之间变化,表示一年的小数部分(即 0 = 1 月 1 日,0.25 = 4 月 1 日,0.5 = 7 月 1 日,0.75 = 10 月 1 日,以及1.0 = 1 月 1 日等)。

如何测量与参考点的差异。在这种情况下,我希望差异为 min/max +- 0.5。

这是一个参考点是 4 月 1 日的示例:

ref <- 0.25 # Apr 1st
val <- c(0.1, 0.3, 0.7, 0.95) # what is the difference from these values to ref
minval <- 0
maxval <- 1

# expected output
c(-0.15, 0.05, 0.45, -0.3)

这是一个想法:

((val-ref + .5) %% 1) - .5
# [1] -0.15  0.05  0.45 -0.30