如何计算相关矩阵?

时间:2013-11-13 15:55:58

标签: kdb

我有一个包含a, b, c列的表格。我能否以某种方式使用函数形式计算cor[a;a]cor[a;b]cor[a;c]的相关矩阵?

?[table; (); 0b; (`aa`ab`ac)!((cor; `a; `a); (cor; `a; `b);(cor; `a; `b));

如何生成最后一个参数的列表?     (cor; a; b)

2 个答案:

答案 0 :(得分:2)

q)show t:([]a:5?1.0;b:5?1.0;c:5?1.0)
a          b         c
------------------------------
0.389056   0.949975  0.6919531
0.391543   0.439081  0.4707883
0.08123546 0.5759051 0.6346716
0.9367503  0.5919004 0.9672398
0.2782122  0.8481567 0.2306385

q)u cor/:\:u:flip t
 | a          b          c
-| --------------------------------
a| 1          -0.1328262 0.6671159
b| -0.1328262 1          -0.1830702
c| 0.6671159  -0.1830702 1

答案 1 :(得分:0)

所以手动输入表格:

q)t:([] a:10?10; b:10?10; c:10?10)
q)?[t;();0b;`aa`ab`ac!((cor;`a;`a);(cor;`a;`b);(cor;`a;`c))]
   aa ab         ac
   -----------------------
   1  -0.2530506 0.7966834

如果您想生成最后一个参数,假设您希望第一列的所有排列与所有列组合:

q)a:{(`$raze'[string x])!(cor),/:x}{x[0],/:x}cols t;
q)?[t;();0b;a]
   aa ab         ac
   -----------------------
   1  -0.2530506 0.7966834

如果您想要所有列排列:

q)a:{(`$raze'[string x])!(cor),/:x}{x cross x}cols t
q)?[t;();0b;a]
   aa ab         ac        ba         bb bc        ca        cb        cc
   ----------------------------------------------------------------------
   1  -0.2530506 0.7966834 -0.2530506 1  -0.268787 0.7966834 -0.268787 1