From 49c4cea4e7736bde316e4c921689d6dbe2735d73 Mon Sep 17 00:00:00 2001 From: Andy Eschbacher Date: Tue, 25 Aug 2015 22:45:55 -0400 Subject: [PATCH] adding kurtosis --- scripts-available/CDB_Stats.sql | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 scripts-available/CDB_Stats.sql diff --git a/scripts-available/CDB_Stats.sql b/scripts-available/CDB_Stats.sql new file mode 100644 index 0000000..f0a47ba --- /dev/null +++ b/scripts-available/CDB_Stats.sql @@ -0,0 +1,33 @@ +-- +-- Calculate the Pearson kurtosis of the input data +-- +-- @param in_array A numeric array of numbers to determine the best +-- to determine the bin boundary +-- +-- @param breaks The number of bins you want to find. +-- +-- +-- Returns: upper edges of bins +-- +-- + +CREATE OR REPLACE FUNCTION CDB_Kurtosis ( in_array NUMERIC[] ) RETURNS NUMERIC as $$ +DECLARE + a numeric; + c numeric; + s numeric; + k numeric; +BEGIN + SELECT AVG(e), COUNT(e)::numeric, stddev(e) INTO a, c, s FROM ( SELECT unnest(in_array) e ) x; + + RAISE NOTICE 'avg: %, cnt: %, std: %', a, c, s; + + EXECUTE ' + SELECT sum(power($1 - e,4)) / ( $2 * power($3, 4)) + FROM (SELECT unnest($4) e ) x' + INTO k + USING a, c, s, in_array; + + RETURN k; +END; +$$ language plpgsql IMMUTABLE;