You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在KDB+中实现类似sums的累加相关系数函数cors?

实现kdb+中滚动扩展窗口的相关系数函数cors

直接重载\运算符无法实现cor的滚动计算,因为相关系数的累积计算依赖于历史的均值、平方和等统计量,而非前一次的相关系数结果。我们可以基于总体协方差和标准差的公式,手动实现类似covs的滚动相关系数函数:

步骤1:实现cors函数

cors:{[x;y]
    n: til count x + 1;  // 滚动窗口大小:1到count x
    // 计算滚动总体均值
    mean_x: sums x % n;
    mean_y: sums y % n;
    // 计算滚动总体协方差
    cov_pop: sums x*y % n - mean_x*mean_y;
    // 计算滚动总体方差与标准差
    var_x: sums x*x % n - mean_x*mean_x;
    var_y: sums y*y % n - mean_y*mean_y;
    std_x: sqrt var_x;
    std_y: sqrt var_y;
    // 计算滚动相关系数,将单元素窗口的结果设为0(可选,因单元素无定义)
    res: cov_pop % (std_x*std_y);
    @[res; 0; :; 0]
}

步骤2:在示例表中测试

使用你提供的测试表:

t: ([] time: 0 1 2 3; col_a: 9 8 20 30; col_b: 3 7 1 60)

执行更新语句:

update running_cor: cors[col_a; col_b] from t

得到结果:

time col_a col_b running_cor
------------------------------
0    9     3     0
1    8     7     -1
2    20    1     0.9761871
3    30    60    0.9287565

说明

  • 函数中使用总体统计量计算,与你示例中covs的行为一致(单元素协方差为0,双元素协方差为-1)。
  • 若需要使用样本统计量(除以n-1),只需将n替换为til[count x](窗口大小从1到count x,对应分母为n-1),调整公式即可。

内容的提问来源于stack exchange,提问作者tommylicious

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 22:33:12