11
給定一個月的數據集,考慮到月份是循環的,我該如何計算「平均」月份?「圓」表示在R
months = c(1,1,1,2,3,5,7,9,11,12,12,12)
mean(months)
## [1] 6.333333
在這個虛擬示例中,平均值應該在1月或12月。我發現有一些統計數據包,但我不確定它們是否適合我的需求。
給定一個月的數據集,考慮到月份是循環的,我該如何計算「平均」月份?「圓」表示在R
months = c(1,1,1,2,3,5,7,9,11,12,12,12)
mean(months)
## [1] 6.333333
在這個虛擬示例中,平均值應該在1月或12月。我發現有一些統計數據包,但我不確定它們是否適合我的需求。
我覺得
months <- c(1,1,1,2,3,5,7,9,11,12,12,12)
library("CircStats")
conv <- 2*pi/12 ## months -> radians
現在從個月轉換爲弧度,計算平均圓形,並將其轉換回個月。假設1月在「0弧度」/ 12點位置,我在這裏減去1 ...
(res1 <- circ.mean(conv*(months-1))/conv)
結果是-0.3457。你可能會想:
(res1 + 12) %% 12
這給11.65,即中途月(因爲我們仍然在0 =月,11月=規模)
我認爲這是正確的,但還沒有仔細檢查它。
對於它的價值,該CircStats::circ.mean
功能很簡單 - 它可能不值得載入包的開銷,如果這是你所需要的:
function (x)
{
sinr <- sum(sin(x))
cosr <- sum(cos(x))
circmean <- atan2(sinr, cosr)
circmean
}
納入@ A.Webb的從聰明替代註釋:
m <- mean(exp(conv*(months-1)*1i))
12+Arg(m)/conv%%12 ## 'direction', i.e. average month
Mod(m) ## 'intensity'
'12 +精氨酸(平均值(EXP(CONV *(月-1)* 1i)中))/轉換%% 12',等效 –
這是一個聰明的公式。我想知道這個方程可以用來確定雙峯數據的方法嗎? – Chris
在這篇關於這個主題的wiki文章中,它寫道:「如果所有角度都相等,則所得到的半徑將爲1,如果角度均勻分佈在圓上,則所得到的半徑將爲0,並且不存在循環平均值。我們如何計算「半徑」作爲平均強度的指標?來源:https://en.wikipedia.org/wiki/Mean_of_circular_quantities – Chris