2015-09-04 12 views
11

Dato un set di dati di mesi, come si calcola il mese "medio", tenendo conto che i mesi sono circolari?"circolare" significa in R

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

In questo esempio fittizio, la media dovrebbe essere in gennaio o dicembre. Vedo che ci sono pacchetti per le statistiche circolari, ma non sono sicuro che soddisfino le mie esigenze qui.

risposta

15

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

'12 + Arg (media (exp (conv * (mesi-1) * 1i)))/conv %% 12', equivalentemente –

+0

Questa è una formula intelligente. Mi chiedo se questa equazione possa essere usata per determinare i mezzi per i dati bimodali? – Chris

+0

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