kernel 1.1.0

Abstract Reactive Streams
Documentation
\d .stat

/ percentile
pctile:{[p;x]x iasc[x] -1+ceiling p*count x}

/ 12 uniforms
u12:{-6f+sum x cut (12*x)?1f}

skew:{avg[x*x2]%sqrt m2*m2*m2:avg x2:x*x-:avg x}
kurt:{-3f+avg[x2*x2]%x*x:avg x2:x*x-:avg x}

/ box-muller
bm:{
 if[count[x] mod 2;'`length];
 x:2 0N#x;
 r:sqrt -2f*log first x;
 theta:2f*acos[-1f]*last x;
 x: r*cos theta;
 x,:r*sin theta;
 x}

/ geometric brownian motion
/ (s)igma, (r)ate, (t)ime, z:uniform random
/ user multiplies by (S)pot
gbm:{[s;r;t;z]exp (t*r-.5*s*s)+z*s*sqrt t}

/ inter quartile range
iqr:{(-) . pctile[.75 .25;x]}

/ auto correlation
ac:{x%first x:x{(y#x)$neg[y]#x}/:c-til c:count x-:avg x}

/ horner's method
/ x:coefficients, y:data
horner:{{z+y*x}[y]/[x]}

/ exponentially weighted moving average
/ x:decay rate, y:data
ewma:{first[y](1f-x)\x*y}

/ central region - normal inverse
cnorminv:{
 a:-25.44106049637 41.39119773534 -18.61500062529 2.50662823884;
 b: 3.13082909833 -21.06224101826 23.08336743743
   -8.47351093090 1;
 x*:horner[a;s]%horner[b] s:x*x-:.5;
 x}

/ tail region - normal inverse
tnorminv:{
 a:0.0000003960315187 0.0000002888167364 0.0000321767881768
   0.0003951896511919 0.0038405729373609 0.0276438810333863
   0.1607979714918209 0.9761690190917186 0.3374754822726147;
 x:horner[a] log neg log 1f-x;
 x}

/ beasley-springer-moro normal inverse approximation
norminv:{
 i:x<.5;
 x:?[i;1f-x;x];
 x:?[x<.92;cnorminv x;tnorminv x];
 x:?[i;neg x;x];
 x}

/ open high low close
ohlc:{`o`h`l`c!(first;max;min;last)@\:x}

/ count, min, max, median, standard deviation of x
summary:{`n`mn`mx`md`dv!(count;min;max;med;sdev)@\:x}

/ error function
erf:{
 a: 1.061405429 -1.453152027 1.421413741
   -0.284496736  0.254829592;
 t:1f%1f+0.3275911*abs x;
 t:1f-t*horner[a;t]*exp neg x*x;
 x:t*1 -1f x<0f;
 x}

/ cumulative normal 
cnorm:{.5*1f+erf x%sqrt 2f}

/ newton-raphson
/ (e)rror tolerance, (f)unction
nr:{[e;f;x]$[e>abs d:first[r]%last r:f x;x;x-d]}

/ function inversion
/ (r)oot-finding (f)unction, (f)unction
invert:{[rf;f;y;x]rf[(neg y;0f)+f@]x}