Я думаю
months <- c(1,1,1,2,3,5,7,9,11,12,12,12)
library("CircStats")
conv <- 2*pi/12 ## months -> radians
Теперь конвертировать месяцев в радианы, вычислить среднее круговое, и конвертировать обратно в месяцы. Я вычитание-здесь при условии, что январь является «0 радиана»/12 часов ...
(res1 <- circ.mean(conv*(months-1))/conv)
Результатом является -0,3457. Вы можете:
(res1 + 12) %% 12
, который дает 11,65, т.е. частично по декабрь (так как мы все еще на 0 = январь, 11 = шкала декабря)
Я думаю это правильно, но не проверил его слишком тщательно.
Для чего это стоит, функция CircStats::circ.mean
очень проста - это может быть не стоит над головой загрузки пакета, если это все, что вам нужно:
function (x)
{
sinr <- sum(sin(x))
cosr <- sum(cos(x))
circmean <- atan2(sinr, cosr)
circmean
}
ВКЛЮЧАЮЩИМ @ умной альтернативы A.Webb в от комментарии:
m <- mean(exp(conv*(months-1)*1i))
12+Arg(m)/conv%%12 ## 'direction', i.e. average month
Mod(m) ## 'intensity'
'12 + Arg (средний (ехр (ко * (месяцы-1) * 1i)))/ко %% 12', что то же самое –
Это умная формула. Интересно, может ли это уравнение использоваться для определения средств для бимодальных данных? – Chris
В статье wiki об этой теме написано: «Полученный радиус будет равным 1, если все углы равны. Если углы равномерно распределены по окружности, то результирующий радиус будет равен 0, а круглое среднее не будет». Как мы вычисляем «радиус», чтобы использовать это как показатель силы среднего? Источник: https://en.wikipedia.org/wiki/Mean_of_circular_quantities – Chris