KDB+/Q 中加权列的 95% 置信区间

95% Confidence Interval for a weighted column in KDB+/Q

我有一个如下所示的 table,其中每一行对应一个执行:

table:([]name:`account1`account1`account1`account2`account2`account1`account1`account1`account1`account2;
Pnl:13.7,13.2,74.1,57.8,29.9,15.9,7.8,-50.4,2.3,-16.2;
markouts:.01,.002,-.003,-.02,.004,.001,-.008,.04,.011,.09;
notional:1370,6600,-24700,-2890,7475,15900,-975,-1260,210,-180)

我想为 `account1 创建 Pnl 的 95% 置信区间。问题是,Pnl 是标价和名义价值的乘积,所以它是加权的,平均值不是简单的平均值。我很确定标准偏差计算也会与正常情况有所不同。

有没有办法在 KDB 中仍然这样做?我不太确定该怎么做。非常感谢任何建议!

统计不是我的强项,但大部分都可以通过标准计算的一些关键字来完成:

q)select { avg[x] + -1 1*  1.960*sdev[x]%sqrt count x } Pnl by name from table
name    | Pnl
--------| ------------------
account1| -15.90856 37.76571
account2| -18.45611 66.12278

https://code.kx.com/q/ref/avg/#avg

https://code.kx.com/q/ref/sqrt/

https://code.kx.com/q/ref/dev/#sdev

如 kx 参考所示,sdev 计算如下,您可以将其用作基础来创建适合您的计算 want/expect。

{sqrt var[x]*count[x]%-1+count x}

做加权平均还有wavg:

https://code.kx.com/q/ref/avg/#wavg

编辑:假设这可以通过代入加权计算来实现,这里是我汇总的加权 sdev wsdev:

table:update weight:2 6 3 5 2 4 5 6 7 3 from table;

wsdev:{[w;v] sqrt (sum ( (v-wavg[w;v]) xexp 2) *w)%-1+sum w }

// substituting avg and sdev above
w95CI:{[w;v] wavg[w;v] + -1 1*  1.960*wsdev[w;v]%sqrt count v };

select w95CI[weight;Pnl] by name from table

name    | Pnl
--------| ------------------
account1| -19.70731 28.47701
account2| -8.201463 68.24146