2015-09-04 33 views
11

Biorąc zestaw danych miesięcy, jak obliczyć "średni" miesiąc, biorąc pod uwagę, że miesiące są okrągłe?"okrągły" oznacza w R

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

W tym manekina przykład, średnia powinna być w styczniu lub grudniu. Widzę, że istnieją pakiety dla statystyk kołowych, ale nie jestem pewien, czy odpowiadają moim potrzebom.

Odpowiedz

15

myślę

months <- c(1,1,1,2,3,5,7,9,11,12,12,12) 
library("CircStats") 
conv <- 2*pi/12 ## months -> radians 

Teraz przekonwertować z miesięcy na radiany, obliczyć średnią okrągłą i przekształcić z powrotem do kilku miesięcy. Jestem tutaj odjęcie 1 stycznia to przy założeniu, że na „0” radianach/godzina 12 ...

(res1 <- circ.mean(conv*(months-1))/conv) 

wynik jest -0,3457. Może chcesz:

(res1 + 12) %% 12 

co daje 11,65, tj partway do grudnia (ponieważ nadal jesteśmy na 0 = styczeń, 11 = skala grudnia)

myślę to prawda, ale nie sprawdziłem to zbyt ostrożnie.

Na co warto, funkcja CircStats::circ.mean jest bardzo prosta - to nie może być warte narzut ładowania pakietu, jeśli to wszystko, czego potrzebujesz:

function (x) 
{ 
    sinr <- sum(sin(x)) 
    cosr <- sum(cos(x)) 
    circmean <- atan2(sinr, cosr) 
    circmean 
} 

Zawierające @ A.Webb za sprytny alternatywa od komentarze:

m <- mean(exp(conv*(months-1)*1i)) 
12+Arg(m)/conv%%12 ## 'direction', i.e. average month 
Mod(m)    ## 'intensity' 
+1

'12 + Arg (średnie (exp (conv * (miesiąc-1) * 1i)))/konwersji %% 12', równoważnie –

+0

to sprytna formuła. Zastanawiam się, czy to równanie może być użyte do określenia środków dla danych bimodalnych? – Chris

+0

W artykule wiki na ten temat napisano: "Otrzymany promień będzie wynosił 1, jeśli wszystkie kąty są równe.Jeśli kąty są równomiernie rozłożone na okręgu, wynikowy promień będzie wynosił 0 i nie ma okrągłego środka." Jak obliczyć "promień", aby użyć tego jako wskaźnika siły średniej? Źródło: https://en.wikipedia.org/wiki/Mean_of_circular_quantities – Chris