我使用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... 在
我已经在数字上整合了分布,平均值与上面的“实际平均值”相匹配。在
你犯了个代数错误。你有
但是在右边,
stdev
应该是adjStdev
。在以下是您代码的修改版本:
^{pr2}$输出如下:
相关问题 更多 >
编程相关推荐