Penso
months <- c(1,1,1,2,3,5,7,9,11,12,12,12)
library("CircStats")
conv <- 2*pi/12 ## months -> radians
Ora convertire da mesi in radianti, calcolare la media circolare, e riconvertire mesi. Sto sottraendo 1 qui assumendo che Gennaio è a "0" radianti/ore 12 ...
(res1 <- circ.mean(conv*(months-1))/conv)
Il risultato è -0,3457. Si potrebbe desiderare:
(res1 + 12) %% 12
che dà 11.65, cioè parzialmente a dicembre (visto che siamo ancora sulla 0 = Gennaio, 11 = scala dicembre)
ho che questo è giusto, ma non hanno controllato troppo attentamente.
Per quello che vale, la funzione CircStats::circ.mean
è molto semplice - potrebbe non valere la pena il sovraccarico di caricamento del pacchetto, se questo è tutto ciò che serve:
function (x)
{
sinr <- sum(sin(x))
cosr <- sum(cos(x))
circmean <- atan2(sinr, cosr)
circmean
}
Incorporando @ alternativa intelligente di A.Webb da i commenti:
m <- mean(exp(conv*(months-1)*1i))
12+Arg(m)/conv%%12 ## 'direction', i.e. average month
Mod(m) ## 'intensity'
'12 + Arg (media (exp (conv * (mesi-1) * 1i)))/conv %% 12', equivalentemente –
Questa è una formula intelligente. Mi chiedo se questa equazione possa essere usata per determinare i mezzi per i dati bimodali? – Chris
Nell'articolo wiki su questo argomento è scritto "Il raggio risultante sarà 1 se tutti gli angoli sono uguali: se gli angoli sono distribuiti uniformemente sul cerchio, il raggio risultante sarà 0, e non c'è media circolare". Come calcoliamo il "raggio" per usarlo come indicatore della forza della media? Fonte: https://en.wikipedia.org/wiki/Mean_of_circular_quantities – Chris