我正试图确定排名的波动性。
更具体地说,在X数据点上排名可以是1到16(数据点的数量最多变化为30)。
我希望能够衡量这种波动性,然后以某种方式将其映射到百分比。
我不是一个数学极客,所以请不要向我吐出复杂的公式:)
我只想以最简单的方式对此进行编码。
答案 0 :(得分:3)
我认为最简单的第一遍是标准偏差超过X数据点。
答案 1 :(得分:2)
我认为Standard Deviation正是您所寻找的。有一些公式需要处理,但计算起来并不难。
答案 2 :(得分:2)
此链接可能有助于解释如何以简单的术语计算标准偏差:How To Calculate Standard Deviation
答案 3 :(得分:1)
如果你想要一些非常简单的东西,你可以将连续等级之间的绝对差异的平均值作为波动率。这具有递归的额外好处。我们这个用于初始化:
double sum=0;
for (int i=1; i<N; i++)
{
sum += abs(ranks[i]-ranks[i-1]);
}
double volatility = sum/N;
然后,如果在时间N + 1处有新的等级可用时更新波动率,则引入参数K,其中K确定您的波动率度量适应波动率变化的速度。较高的K意味着较慢的适应性,因此K可以作为“衰减时间”或某些东西:
double K=14 //higher = slower change in volatility over time.
double newvolatility;
newvolatility = (oldvolatility * (K-1) + abs(rank[N+1] - rank[N]))/K;
这也称为moving average(在这种情况下,排名的绝对差异)。
答案 4 :(得分:1)
鉴于你有一个小样本集(你说最多30个数据点)并且标准偏差很容易受到异常值的影响,我建议使用interquartile range作为波动率的度量。这是一个微不足道的计算,可以对您的小样本集上的数据进行有意义的表示。