2015-09-04 4 views
11

Учитывая набор данных месяцев, как рассчитать «средний» месяц, учитывая, что месяцы являются круговыми?Среднее значение «круговое» в R

months = c(1,1,1,2,3,5,7,9,11,12,12,12) 
mean(months) 
## [1] 6.333333 

В этом примере макета должно быть в январе или декабре. Я вижу, что есть пакеты для круговой статистики, но я не уверен, соответствуют ли они моим потребностям.

ответ

15

Я думаю

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' 
+1

'12 + Arg (средний (ехр (ко * (месяцы-1) * 1i)))/ко %% 12', что то же самое –

+0

Это умная формула. Интересно, может ли это уравнение использоваться для определения средств для бимодальных данных? – Chris

+0

В статье wiki об этой теме написано: «Полученный радиус будет равным 1, если все углы равны. Если углы равномерно распределены по окружности, то результирующий радиус будет равен 0, а круглое среднее не будет». Как мы вычисляем «радиус», чтобы использовать это как показатель силы среднего? Источник: https://en.wikipedia.org/wiki/Mean_of_circular_quantities – Chris

Смежные вопросы