问题 R中的“圆形”表示


给定一个月的数据集,我如何计算“平均”月份,同时考虑到月份是循环的?

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

在这个虚拟的例子中,平均值应该是1月或12月。我看到有循环统计的软件包,但我不确定它们是否适合我的需求。


11473
2017-09-04 18: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,即12月中途(因为我们仍然是0 = 1月,11 = 12月比例)

一世 认为 这是对的,但没有仔细检查。

对于它的价值, 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'

15
2017-09-04 18:22



12+Arg(mean(exp(conv*(months-1)*1i)))/conv%%12,等价 - A. Webb
这是一个聪明的公式。我想知道这个等式是否可用于确定双峰数据的均值? - Chris
在关于这个主题的维基文章中写道:如果所有角度相等,结果半径将为1.如果角度均匀分布在圆上,则得到的半径将为0,并且没有圆形均值。我们如何计算“半径”来将其作为均值强度的指标?资源: en.wikipedia.org/wiki/Mean_of_circular_quantities - Chris
@Chris Just Mod 代替 Arg: Mod(mean(exp(conv*(months-1)*1i))) - A. Webb
en.wikipedia.org/wiki/Argument_(complex_analysis) - Chris


答案:


我认为

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,即12月中途(因为我们仍然是0 = 1月,11 = 12月比例)

一世 认为 这是对的,但没有仔细检查。

对于它的价值, 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'

15
2017-09-04 18:22



12+Arg(mean(exp(conv*(months-1)*1i)))/conv%%12,等价 - A. Webb
这是一个聪明的公式。我想知道这个等式是否可用于确定双峰数据的均值? - Chris
在关于这个主题的维基文章中写道:如果所有角度相等,结果半径将为1.如果角度均匀分布在圆上,则得到的半径将为0,并且没有圆形均值。我们如何计算“半径”来将其作为均值强度的指标?资源: en.wikipedia.org/wiki/Mean_of_circular_quantities - Chris
@Chris Just Mod 代替 Arg: Mod(mean(exp(conv*(months-1)*1i))) - A. Webb
en.wikipedia.org/wiki/Argument_(complex_analysis) - Chris