如何在KDB中计算30天滚动窗口?求解键表ar与mr的滚动相关系数
思路判断
用wj(窗口连接)做自连接实现滚动相关系数计算是完全正确的思路,你未实现成功大概率是窗口参数、表排序或聚合函数配置有误。
操作步骤
1. 前置校验
首先确保你的原始表已按时间列t升序排序,这是窗口连接计算的基础:
// 假设你的原始表名为factor_tbl sorted_tbl = sort(factor_tbl, t)
2. 定义30天滚动窗口
如果是自然日窗口,直接用内置的时间偏移量定义即可:rolling_window = -30d : 0d
上述窗口表示统计当前行时间往前30天(包含当前行)的所有数据,如果不需要包含当前行,可调整为
-30d : -1ms
3. 窗口连接计算滚动相关系数
调用wj函数做自连接聚合,用cor函数计算两列相关系数:
// 示例中加了样本量判断,要求窗口内至少有20条有效数据才输出相关系数,避免样本过少导致的结果失真 result = wj(rolling_window, <iif(count(ar)>=20, cor(ar, mr), NULL) as ar_cor_mr>, sorted_tbl, sorted_tbl, `t)
常见异常排查
- 若返回全空值:检查窗口方向是否写反,不要写成
0d:-30d - 若结果不符合预期:检查原始表是否按
t严格升序,是否存在重复时间行
内容的提问来源于stack exchange,提问作者cjm2671
相关产品推荐
相关产品推荐

