首页 文章

如何计算kdb / q的横截面相关性

提问于
浏览
0

如何有效地计算q中面板数据的相关性?

我们假设我有一张 table :

([] date:(...);sym:(...);return:(...))

我可以计算每2个符号之间的回报相关性的一种方法是对每个符号组合进行迭代的强力方式,使用corr函数并将其添加到表中 . 有没有办法在不使用每个符号组合的'each'的情况下执行此操作?

1 回答

  • 1

    表上必须有其他约束: cor 需要相同长度的参数 .

    q)s:`aapl`ibm`goog  / symbols
    q)show t:asc flip`dat`sym`ret!flip(((`date$.z.z)+til 5)cross s),' 15?1000
    dat        sym  ret
    -------------------
    2017.10.11 aapl 709
    2017.10.11 goog 369
    2017.10.11 ibm  988
    2017.10.12 aapl 224
    2017.10.12 goog 586
    2017.10.12 ibm  192
    2017.10.13 aapl 490
    2017.10.13 goog 55
    2017.10.13 ibm  465
    2017.10.14 aapl 51
    2017.10.14 goog 4
    2017.10.14 ibm  150
    2017.10.15 aapl 890
    2017.10.15 goog 99
    2017.10.15 ibm  558
    

    这里我们按时间顺序排列表,每个日期/符号对都有一个返回值 . 使用select with a by clause获取带符号作为键的字典 .

    q)show d:select ret by sym from t
    sym | ret
    ----| -------------------
    aapl| 709 224 490 51  890
    goog| 369 586 55  4   99
    ibm | 988 192 465 150 558
    

    生成所有符号对:

    q)show p:raze s{x,/:y except x}\:s
    ibm  aapl
    ibm  goog
    aapl ibm
    aapl goog
    goog ibm
    goog aapl
    

    现在使用coreach-left关联每对:

    q)([pr:p]co:p{y[x 0;`ret] cor y[x 1;`ret]}\:d)
    pr       | co    
    ---------| -----------
    ibm  aapl| 0.7845974
    ibm  goog| 0.1039863
    aapl ibm | 0.7845974
    aapl goog| -0.05331357
    goog ibm | 0.1039863
    goog aapl| -0.05331357
    

    它仍然是一种“强力”解决方案 - 它将每对符号相关联 - 但迭代在Q-SQLadverb中,通常是最有效的迭代方式 .

相关问题