0
如何有效計算q中面板數據間的相關性?如何計算kdb/q中的橫截面相關性
假設我有一個表:
我可以計算出每2個符號之間收益率的相關性([] date:(...);sym:(...);return:(...))
一種方法是蠻力的方式只會是重複的符號的每個組合,使用科爾函數並將其添加到表中。有沒有辦法做到這一點,而不使用每個符號組合的'每個'?
如何有效計算q中面板數據間的相關性?如何計算kdb/q中的橫截面相關性
假設我有一個表:
我可以計算出每2個符號之間收益率的相關性([] date:(...);sym:(...);return:(...))
一種方法是蠻力的方式只會是重複的符號的每個組合,使用科爾函數並將其添加到表中。有沒有辦法做到這一點,而不使用每個符號組合的'每個'?
表中必須有其他約束: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
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-SQL和adverb中,通常是最有效的迭代方式。