为啥 Johnson-SU 分布在 scipy.stats 中没有给出正偏度?

Posted

技术标签:

【中文标题】为啥 Johnson-SU 分布在 scipy.stats 中没有给出正偏度?【英文标题】:Why doesn't Johnson-SU distribution give positive skewness in scipy.stats?为什么 Johnson-SU 分布在 scipy.stats 中没有给出正偏度? 【发布时间】:2021-04-10 13:06:19 【问题描述】:

下面的代码映射了Johnson-SU distribution(johnsonsu)的对应参数(a,b,loc,scale)生成的统计矩(均值、方差、偏度、超峰度) )。

对于下面我的代码中指定的循环值范围,没有参数配置会导致正偏度,只有负偏度,即使应该可以将 Johnson-SU 分布参数化为正偏度。

import numpy as np
import pandas as pd
from scipy.stats import johnsonsu

moments = ['mu','sd','sk','ku']
X = []
for a in np.arange(0.5,5,.5):
    for b in np.arange(0.5,5,.5):
        for c in np.arange(-0.5,0.5,.25): #loc
            for d in [1]: #scale
                mvsk = johnsonsu.stats(a,b,c,d,moments='mvsk')
                mvsk = [mvsk[i].tolist() for i in range(len(mvsk))]
                X.append([a,b,c,d]+mvsk)
X = pd.DataFrame(np.asarray(X), columns=['a','b','c','d']+moments)   

for m in moments:
    print(m, X[[m]].min().round(3).values[0], X[[m]].max().round(3).values[0])

打印的最小和最大时刻是:

mu -29937.57 0.136
sd 0.053 48036174150.987
sk -414.36 -0.078
ku 0.221 41173.869

对于ablocscale 参数,还有什么比我在下面指定的更好的范围来探索? documentation 只说ab 必须是肯定的,没有关于locscale 必须限制的内容。

【问题讨论】:

问题的本质似乎是统计的而不是编程相关的,所以我认为应该移到 Cross Validated SE。关于问题本身,我想您可以通过在生成的值前面加上减号来获得相反的偏度。但是,这并不能说明ab 对应的参数是什么。但也许你可以对它们进行逆向工程? Johnson SU 分布应该产生正偏度,因此这是一个编程问题,因为没有人将参数映射到相应的时刻。 johnsonsu 函数是进行此映射的唯一方法,关于现有 Cross val 帖子中尚未讨论(没有解决方案)的统计理论没有什么可讨论的 您问的是什么参数组合会产生正偏度,而不是如何实现(您已经实现了)。因此,统计问题显然存在。但是,如果确实存在编程问题,那么编程问题是什么?您能否提供指向您引用的交叉验证帖子的链接? 什么参数组合产生正偏度? 【参考方案1】:

在查看***文章和源代码时,在我看来参数a 可以改变偏度。尝试a 的负值。文档中说a 必须大于零,但在查看公式和代码时,这似乎是文档中的一个错误,实际上a 可以小于或等于零。

我已经在上面尝试了您的程序,将a 的范围替换为np.arange(-2.5, 2.5, .5)。它运行没有错误(尽管在结果中有关于不精确的警告,这些警告也存在于原始文件中)并报告:

mu -202.147 548.542
sd 0.052 16114617.207
sk -414.352 402.646
ku 0.213 41173.867

附言。我已将此作为错误报告给 Scipy 项目:https://github.com/scipy/scipy/issues/13353

【讨论】:

文档说“对于所有 x, a, b > 0, ...”。这可以解释为暗示a > 0,但我认为这不是意图。 是的,我明白你的意思了。无论如何,澄清它不会有什么坏处。 @RobertDodier 谢谢,很好。不确定您是否知道有关此相关问题的任何信息stats.stackexchange.com/questions/502648/…

以上是关于为啥 Johnson-SU 分布在 scipy.stats 中没有给出正偏度?的主要内容,如果未能解决你的问题,请参考以下文章

伽马分布为啥叫伽马

为啥我们选择 Beta 分布作为假设的先验?

为啥说分布式事务不再适用于微服务架构

为啥 c++11 随机分布是可变的?

为啥 Hibernate 不支持分布式事务? [关闭]

为啥有些网站分布在 www2、www3 子域,而有些网站却没有它来管理扩展?