我正在使用 SciPy的
levy_stable
分布做一些事情。文档说:
那么,我理解
levy_stable.pdf(x, alpha, beta, loc, scale)
与y = (x-loc) / scale
及levy_stable.pdf(y, alpha, beta) / scale
等价。
levy_stable.pdf(x, alpha=1, beta=1, loc=0, scale=10)
应该是 levy_stable.pdf(x, alpha=1, beta=1, loc=0, scale=1)
的拉伸版本,但不会有位移。然而,我得到了这个:
请注意,在scale=1
时,最大值为负值,但在scale>=5
时,最大值为正值,这意味着它已经发生了偏移。为什么会这样?是一个错误还是我漏掉了什么?在其他更简单的分布中,比如norm
,loc
和scale
参数按照其名称所指示的方式进行平移和拉伸分布。实际上,对于the moyal
distribution,它应该是对另一个分布的近似,它的行为也符合预期:
生成这些图表的代码如下:from scipy.stats import levy_stable, moyal
import numpy
import plotly.express as px
import pandas
data = []
for loc in [0]:
for scale in [1,5,10]:
distributions = {
'levy_stable': levy_stable(alpha=1,beta=1,loc=loc,scale=scale),
'moyal': moyal(loc=loc,scale=scale),
}
for name,dist in distributions.items():
x = numpy.linspace(loc-5*scale,loc+30*scale,999)
df = pandas.DataFrame(
{
'x': x,
'x/scale': x/scale,
'y': dist.pdf(x),
}
)
df['loc'] = loc
df['scale'] = scale
df['distribution'] = name
data.append(df)
data = pandas.concat(data)
fig = px.line(
data,
x = 'x/scale',
y = 'y',
facet_row = 'scale',
color = 'distribution',
)
fig.update_yaxes(matches=None)
fig.write_html(f'deleteme/levy_stable_bug.html')
'S0'
参数化对我来说似乎没有改变,它完全一样。 - user171780parameterization
。如果你正在使用一个IDE或交互式shell,请尝试完全退出程序,并用一个普通的python
命令来运行你的代码。你正在使用哪个版本的SciPy?如果你不知道,你可以用import scipy; print(scipy.__version__)
来检查。 - Warren Weckesser