小编Nob*_*ody的帖子

如何使用 skewnorm 生成具有指定偏斜的分布?

我正在尝试生成一个随机分布,在其中控制均值、SD、偏度和峰度。

生成分布后,我可以通过一些简单的数学计算来求解平均值和标准差。

峰度 我暂时将其搁置,因为它看起来太难了。

偏斜是今天的问题。

import scipy.stats

def convert_to_alpha(s):
    d=(np.pi/2*((abs(s)**(2/3))/(abs(s)**(2/3)+((4-np.pi)/2)**(2/3))))**0.5 
    a=((d)/((1-d**2)**.5))
    return(a)

for skewness_expected in (.5, .9, 1.3):
    alpha = convert_to_alpha(skewness_expected)
    r = stats.skewnorm.rvs(alpha,size=10000)
    print('Skewness expected:',skewness_expected)
    print('Skewness obtained:',stats.skew(r))
    print()

Skewness expected: 0.5
Skewness obtained: 0.47851348006629035

Skewness expected: 0.9
Skewness obtained: 0.8917020428586827

Skewness expected: 1.3
Skewness obtained: (1.2794406116842627+0.01780402125888404j)
Run Code Online (Sandbox Code Playgroud)

我知道计算出的偏度通常与所需的偏度不匹配 - 毕竟这是一个随机分布。但我很困惑如何获得偏度 > 1 的分布而不陷入复数范围。rvs 方法似乎无法处理它,因为只要偏度 > 1,参数 alpha 就是一个虚数。

我该如何修复它,以便生成偏度 > 1 的分布,但不会出现复数?

[感谢Warren Weckesser为我指明了维基百科,以便我编写 Convert_to_alpha 函数。]

statistics scipy

3
推荐指数
1
解决办法
5662
查看次数

标签 统计

scipy ×1

statistics ×1