2015-09-04 25 views
11

Bir aylık veri kümesi verildiğinde, ayların dairesel olduğunu dikkate alarak "ortalama" ayı nasıl hesaplayabilirim?"dairesel" ortalama R

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

Bu sahte örnekte, ortalama Ocak veya Aralık'ta olmalıdır. Dairesel istatistikler için paketler olduğunu görüyorum, ama onların buradaki ihtiyaçlara uygun olup olmadığından emin değilim.

cevap

15

Ben

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

Şimdi, radyan aylardan dönüştürmek dairesel ortalamasını hesaplamak ve ay geri dönüştürmek düşünüyorum. Ben ... Ocak "0 radyan"/12:00 altında olduğunu sonuç -0,3457 olduğu

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

varsayarak buraya 1 çıkarılarak ediyorum. Sen isteyebilirsiniz:

(res1 + 12) %% 12 

Aralık ayına kadar yani partway 11,65 veren (biz 0 = Ocak, 11 hala beri = Aralık ölçeği)

Bunun doğru olduğunu ancak yok düşünmek çok dikkatli bir şekilde kontrol etti. Ne olursa olsun için

, CircStats::circ.mean fonksiyonu çok basittir - Bu tüm ihtiyaç vardır eğer paketi yükleme havai değer olmayabilir: den A.Webb akıllıcaymış alternatif @ birleştirilerek

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

yorumlar:

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

'+ 12, Arg (ortalama (exp (dönüşüm * (ay-1) * 1 i)))/dönüşüm %% 12', eşdeğer –

+0

akıllı bir formül O. Bu denklemin iki modlu veri için araçları belirlemek için kullanılabilir mi acaba? – Chris

+0

Bu konuyla ilgili wiki makalesinde, "Tüm açıların eşit olması durumunda ortaya çıkan yarıçap 1 olacaktır. Açılar daire üzerinde eşit olarak dağıtılırsa, sonuçta elde edilen yarıçap 0 olur ve dairesel bir ortalama yoktur." Bunu, ortalama gücün bir göstergesi olarak kullanmak için 'yarıçapı' nasıl hesaplayabiliriz? Kaynak: https://en.wikipedia.org/wiki/Mean_of_circular_quantities – Chris