kdb中的线性回归

时间:2016-10-31 19:47:20

标签: regression kdb

这是我构建线性回归的方法,但是当我包含两列以上时,我的代码不起作用。

// Load relevant columns into memory
//
t:?[`data;enlist(=;`date;dat);0b;(ind,dep)!ind,dep];


X:9h$enlist[count[t]#1],t ind;
beta:inv[X mmu flip X] mmu X mmu 9h$t dep;

res:(`yInt,ind)!beta;

ind是符号中的独立字段名称,dep是符号中的依赖字段名称。这部分inv[X mmu flip X]不起作用。如果我为ind包含两个以上的字段,则会有一行空白,我无法执行inv。我不确定如何为自变量包含更多列/字段。

3 个答案:

答案 0 :(得分:4)

经过小修改,您的代码对我有用:

  / Generate some random data
  n:10;t:([]x1:n?1f;x2:n?1f;x3:n?1f)
  / Compute y = 1 + 2*x1 + 3*x2 + 4*x3 + small random noise 
  update y:1+(2*x1)+(3*x2)+(4*x3)+n?1e-3 from `t;
  / Define ind and dep
  ind:`x1`x2`x3
  dep:enlist`y
  / Build the design matrix
  X:enlist[count[t]#1f],t ind
  / Compute the regression parameters
  inv[X mmu flip X] mmu X mmu flip t dep
1.00052
1.99973
2.999979
4.000045

唯一可能棘手的部分是记住登记和转置dep

根据您的说明,您的数据可能会出现问题。它包含NaN或您的ind变量不是独立的。

答案 1 :(得分:1)

我发现了一个关于线性回归的谷歌小组问题:
https://groups.google.com/forum/#!topic/personal-kdbplus/CRf-kOx-v4I

他们在这篇文章中提到了使用lsq命令:
http://code.kx.com/q/ref/matrixes/#lsq

另一个答案给出了示例代码,希望此信息可以帮助您解决问题。

答案 2 :(得分:0)

您能提供与您合作的数据的子集吗?通常,inv失败意味着我在你的矩阵中有一些空值。在尝试查找矩阵的逆矩阵之前,可以使用0f^来修复此问题。 (用浮点数填充矩阵的空元素。)

http://code.kx.com/q/ref/lists/#fill

快速举例:

inv 3 cut 1.1 2.2 3.1 4.5 0n 0n 1.2 7 8f 

返回:

(0n 0n 0n;0n 0n 0n;0n 0n 0n)

...而

inv 0f^3 cut 1.1 2.2 3.1 4.5 0n 0n 1.2 7 8f

返回:

(0 0.2222222 -0;-1.9512195 0.2753388 0.7560976;1.7073171 -0.2742547 -0.5365854)