峰度函数玩得不好 [英] Kurtosis function not playing nice

查看:11
本文介绍了峰度函数玩得不好的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在玩Snowflake,当使用KURTOSIS函数时,我得到被零除的错误:-(

如果有1个以上不同的值(以及4个以上的值),则函数可以完美工作:

select 
    kurtosis(bob) 
from 
    (select seq4() bob from table(generator(rowcount => 10)));

,但当所有值都相同时失败。在本例中为1:

select 
    kurtosis(bob) 
from 
   (select 1 bob from table(generator(rowcount => 10))); 

除了在每次评估前执行不同的计数或HLL测试外,还有谁能提出解决方案吗?

我确实看到这个article关于 pandas 滚动偏度和峰度的讨论在所有等值的样本上都失败了,但在Snowflake甚至是白日梦之前,这已经是近10年前的事了。

SKEW函数具有相同的问题。

我的临时解决方案是:

select 
    DECODE(HLL(bob),1,0,SKEW(bob::FLOAT)) yucky_solution
from 
   (select 1 bob from table(generator(rowcount => 10))); 

推荐答案

我认为这反映了kurtosis函数的工作方式(与雪花无关)。

我在Wolfram Alpha和这个在线峰度计算器上进行了测试:https://www.socscistatistics.com/tests/skewness/default.aspx

从0到9的数字与Snowflake的值相同:

但有10个相同的数字返回NaN值:


从数学上讲,这是峰度的公式:

这是通过用标准差潜水得到的。一系列相同数字的标准差是0--因此除以0是错误的。


因此,避免异常的SQL方法是首先计算stddev:

select 
    iff(stddev(bob)=0, null, kurtosis(bob))
from 
   (select 1 bob from table(generator(rowcount => 10))); 

-- null

这篇关于峰度函数玩得不好的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆