【问题标题】:How can I calculate correlation dynamically in kdb如何在 kdb 中动态计算相关性
【发布时间】:2021-03-26 13:27:42
【问题描述】:

我有一个收益表,我想计算每 n 行的相关性,但我不知道该怎么做。为了更清楚地说明,我的表 t 是

sym1 sym2 sym3 sym4
3 4 5 1
0 -1 6 4
-3 10 8 9
-4 19 -1 6

如何计算 sym1 和 sym2/sym3/sym4 之间的相关性,分别是第 1-3 行、第 2-4 行等?

目前我只能指定列然后计算,但我正在尝试找到一种方法来修复 sym1 并遍历 sym2-4。这是我当前的代码

(cor).'flip flip each {(til x)xprev\:y}[3;]each (sym1;sym2) from t

【问题讨论】:

  • 这段代码对你有用吗?对我来说似乎没有。
  • 它仅在我计算列 sym1 和 sym2 之间的相关性时有效,并且我需要删除前 2 行。
  • 您能否举例说明您要将cor 应用于哪些值?例如,如果你想找到 sym1 和 sym2 之间的相关性,是否相当于 (t`sym1)cor t`sym2, IE 3 0 -3 -4 cor 4 -1 10 19
  • 对于sym1 & sym2,第一个相关是(3 0 -3) cor (4 -1 10),然后是(0 -3 -4) cor(-1 10 19),基本上每次我计算了 3 行的相关性。这同样适用于 sym1&sym3、sym1&sym4。提前谢谢你!

标签: kdb


【解决方案1】:

这里有一个可能对你有用的解决方案。

q)update s1s2:(cor).'flip{-3#'reverse{-1_x}\[x;y]}[-1+count i]each(sym1;sym2)from t
sym1 sym2 sym3 sym4 s1s2
------------------------------
3    4    5    1
0    -1   6    4    1
-3   10   8    9    -0.5447048
-4   19   -1   6    -0.9751578

这只是在列之间发现的一种相关性,即sym1sym2。前两个结果可以丢弃,因为它们没有相关所需的 3 个值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 2011-10-09
    • 2021-07-22
    • 1970-01-01
    相关资源
    最近更新 更多