使用SQL 计算一组数据的峰度、偏度 公式依据excel的KURT函数和SKEW函数
因为工作原因,要把excel的KURT和SKEW函数在Oracle实现出来并统计,在网上找了半天没有答案。。只能自己动手啦。。
峰度(KURT )
excel官方的函数说明地址:https://support.microsoft.com/zh-cn/office/kurt-%e5%87%bd%e6%95%b0-bc3a265c-5da4-4dcb-b7fd-c237789095ab?ui=zh-cn&rs=zh-cn&ad=cn
先附上excel里函数的说明:
函数备注 参数可以是数字,或者是包含数字的名称、数组或引用。
如果数组或引用参数包含文本、逻辑值或空白单元格,则这些值将被忽略;但包含零值的单元格将计算在内。
如果数据点少于 4 个,或样本标准偏差等于 0,函数 KURT 返回错误值 #DIV/0!。
峰值的计算公式:
Oracle实现:
--创建样本数据临时表
create table testfd(
val number(5)
);
插入样本数据
--算峰度
select round(sum(power((val -
(select avg(val) from testfd)),
4)) / power(stddev(val), 4) * (count(*)*(count(*)+1) / ((count(*)-1) * (count(*)-2) * (count(*) -3) ) )
- (3*power((count(*)-1),2) / ((count(*)-2 ) *(count(*)-3)) ) /*/ (count(*) - 1) - 3*/,
2) as fd
from testfd
官网示例结果:
运算结果:
偏度(SKEW)
excel官方的函数说明地址:https://support.microsoft.com/zh-cn/office/skew-%e5%87%bd%e6%95%b0-bdf49d86-b1ef-4804-a046-28eaea69c9fa?ui=zh-cn&rs=zh-cn&ad=cn
excel里函数的说明:
1.参数可以是数字或者是包含数字的名称、数组或引用。
2.逻辑值和直接键入到参数列表中代表数字的文本被计算在内。
3.如果数组或引用参数包含文本、逻辑值或空白单元格,则这些值将被忽略;但包含零值的单元格将计算在内。
4.如果参数为错误值或为不能转换为数字的文本,将会导致错误。
5.如果数据点少于三个,或者样本标准偏差为零,则 SKEW 返回 #DIV/0! 错误值。
6.偏斜度公式的定义如下:
Oracle实现:
--偏度
select round(sum(power((val -
(select avg(val) from testfd)),
3)) / power(stddev(val), 3) * ( count(*)/((count(*)-1) * (count(*)-2)) )
,2) as fd
from testfd
官网示例结果:
运算结果: