2015-09-04 8 views
11

月のデータセットを考えると、月が円形であることを考慮して、「平均」月を計算するにはどうすればよいですか?「円」の意味R

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

このダミーの例では、平均値は1月または12月です。私は円形統計のパッケージがあることを知っていますが、ここで私のニーズに合っているかどうかはわかりません。

答えて

15

私は

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

は今、数ヶ月からラジアンに変換する円弧平均を計算し、数ヶ月に戻って変換すると思います。私は結果は-0.3457である

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

... 1月/ 12時「0ラジアン」であると仮定し、ここで1を引いています。あなたが必要になることがあります。

11.65を与える
(res1 + 12) %% 12 

、すなわち途中12月を通じて(私たちは0 = 1月、11 = 12月規模で残っているので)

を私はこれが正しいと思うが、持っていないあまりにも注意深くそれをチェックした何が価値があるために

CircStats::circ.mean機能は非常に簡単です - それは、これはあなたが必要とするすべてである場合、パッケージをロードするのオーバーヘッドの価値ではないかもしれません:

からA.Webbの巧妙な代替@取り入れ
function (x) 
{ 
    sinr <- sum(sin(x)) 
    cosr <- sum(cos(x)) 
    circmean <- atan2(sinr, cosr) 
    circmean 
} 

コメント:

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

'12 +のArg(平均(EXP(CONV×(数ヶ月-1)* 1I)))/ CONV %% 12'、等価 –

+0

巧妙な式です。私はその方程式が二峰性データのための手段を決定するために使用できるのだろうか? – Chris

+0

この記事に関するwikiの記事では、 "すべての角度が等しい場合、結果の半径は1になります。角度が円上に均一に分布している場合、結果の半径は0になり、円形の平均はありません。それを平均の強さの指標として使用するには、どのように '半径'を計算するのですか?出典:https://en.wikipedia.org/wiki/Mean_of_circular_quantities – Chris