From db323f3e13574cf700c62e5a2001d669f1152960 Mon Sep 17 00:00:00 2001 From: Andy Eschbacher Date: Tue, 25 Aug 2015 22:58:31 -0400 Subject: [PATCH] adding skewness --- scripts-available/CDB_Stats.sql | 39 +++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/scripts-available/CDB_Stats.sql b/scripts-available/CDB_Stats.sql index f0a47ba..b9b765b 100644 --- a/scripts-available/CDB_Stats.sql +++ b/scripts-available/CDB_Stats.sql @@ -1,18 +1,15 @@ -- --- Calculate the Pearson kurtosis of the input data +-- Calculate basic statistics of a given dataset -- --- @param in_array A numeric array of numbers to determine the best --- to determine the bin boundary +-- @param in_array A numeric array of numbers -- --- @param breaks The number of bins you want to find. --- --- --- Returns: upper edges of bins +-- Returns: statistical quantity chosen -- -- +-- Calculate Pearson's moment coefficient of kurtosis CREATE OR REPLACE FUNCTION CDB_Kurtosis ( in_array NUMERIC[] ) RETURNS NUMERIC as $$ -DECLARE +DECLARE a numeric; c numeric; s numeric; @@ -22,12 +19,32 @@ BEGIN 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' + 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; + +-- Calculate Pearson's moment coefficient of skewness +CREATE OR REPLACE FUNCTION CDB_Skewness ( in_array NUMERIC[] ) RETURNS NUMERIC as $$ +DECLARE + a numeric; + c numeric; + s numeric; + sk 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, 3)) / ( $2 * power($3, 3)) + FROM (SELECT unnest($4) e ) x' + INTO sk + USING a, c, s, in_array; + + RETURN sk; +END; +$$ language plpgsql IMMUTABLE;