scipy skewnorm意味着不匹配理论?

2024-10-06 06:58:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用scipy skewnorm创建一个具有loc和scale的倾斜分布。在

我调整传递给scipy.stats.skewnorm基于Adelchi Azzalini的页面(Here is link),使用该页面底部关于“平均值”和“增量”的部分。在

我使用的代码是:

import math
import scipy.stats

skew = -2
mean = 0.05
stdev = 0.05

delta = skew / math.sqrt(1. + math.pow(skew, 2.))
adjMean = mean - stdev * math.sqrt(2. / math.pi) * delta
adjStdev = math.sqrt(math.pow(stdev, 2.) / (1. - 2. * math.pow(delta, 2.) / math.pi))

print 'target mean={:.4f} actual mean={:.4f}'.format(mean, float(scipy.stats.skewnorm.stats(skew, loc=adjMean, scale=adjStdev, moments='mvsk')[0]))
print 'target stdev={:.4f} actual stdev={:.4f}'.format(stdev, math.sqrt(float(scipy.stats.skewnorm.stats(skew, loc=adjMean, scale=adjStdev, moments='mvsk')[1])))

不过,当我运行它时,我并没有得到我期望的平均值,而stdev正是我所期望的:

^{pr2}$

我觉得我错过了一些关于skewnorm或者scipy.stats.skewnorm... 在

我已经在数字上整合了分布,平均值与上面的“实际平均值”相匹配。在


Tags: statsmathscipysqrtmeanloc平均值delta
1条回答
网友
1楼 · 发布于 2024-10-06 06:58:54

你犯了个代数错误。你有

adjMean = mean - stdev * math.sqrt(2. / math.pi) * delta

但是在右边,stdev应该是adjStdev。在

以下是您代码的修改版本:

^{pr2}$

输出如下:

target mean=1.5000 actual mean=1.5000
target stdev=3.0000 actual stdev=3.0000

相关问题 更多 >