英文:
Scaling and Shifting Scipy Distributions in Python
问题
我正在使用 scipy.stats.beta
来生成Beta分布的概率密度函数。
我想在区间[-1,1]上创建分布。对于 a, b = 0.5, 0.5
,人们会期望“U”形曲线以均值为0分布在[-1,1]。然而,当 std = 1
且 mean = 0
时,我得到了以下结果:
现在,如果我设置 mean = -1
和 std = 2
,那么我会接近所期望的结果:
为什么概率密度函数在使用标准差和均值输入时没有按预期进行缩放/居中?我可能没有理解分布函数的控制。
from scipy.stats import beta
import matplotlib.pyplot as plt
fig,ax = plt.subplots(nrows=1, ncols=1)
#x = np.linspace(beta.ppf(0.01, a, b),beta.ppf(0.99, a, b), 100)
x = np.arange(-1.0,1.0,0.01)
a, b = 0.5,0.5 #2.31, 0.627
mean = -1
std = 2
#mean, var, skew, kurt = beta.stats(a, b, moments='mvsk')
pdf = beta.pdf(x, a, b, loc=mean, scale=std)
ax.plot(x, pdf,'r-', lw=5, alpha=0.6, label='beta pdf')
mean = np.nanmean(pdf[np.isfinite(pdf)])
std = np.nanstd(pdf[np.isfinite(pdf)])
英文:
I am working with scipy.stats.beta
to generate a Beta distribution probability density function.
You can see the expected result for the standard interval of [0,1] here:
I would like to create the distribution on the interval [-1,1] instead. For a,b = 0.5, 0.5
one would expect the "u" shaped curve to distribute with the mean at 0 and ending at [-1,1]. However, with std = 1
and mean = 0
I get the following:
Now, if I set mean = -1
and std = 2
then I get close to what the desired result is:
Why is the PDF not scaling / centering as expected using the standard deviation and mean inputs? I must not be understanding the controls for the distribution function.
from scipy.stats import beta
import matplotlib.pyplot as plt
fig,ax = plt.subplots(nrows=1, ncols=1)
#x = np.linspace(beta.ppf(0.01, a, b),beta.ppf(0.99, a, b), 100)
x = np.arange(-1.0,1.0,0.01)
a, b = 0.5,0.5 #2.31, 0.627
mean = -1
std = 2
#mean, var, skew, kurt = beta.stats(a, b, moments='mvsk')
pdf = beta.pdf(x, a, b, loc=mean, scale=std)
ax.plot(x, pdf,'r-', lw=5, alpha=0.6, label='beta pdf')
mean = np.nanmean(pdf[np.isfinite(pdf)])
std = np.nanstd(pdf[np.isfinite(pdf)])
答案1
得分: 1
从文档中:
上面的概率密度定义采用了“标准化”形式。要进行偏移和/或缩放分布,请使用loc和scale参数。具体来说,
beta.pdf(x, a, b, loc, scale)
与y = (x - loc) / scale
完全等价。
所以当您使用 scale = 1
和 loc = 0
时,您实际上得到的是分布 beta.pdf(x, a, b)
,您可以验证这一点。
您得到第一个图形的原因是,您试图在包含零的 x
域上绘制Beta分布,而 Beta(0, 0.5, 0.5)
趋向于无穷大。
请注意,您在图的右侧看不到分布爆炸,因为您的 x.max() == 0.99
。
英文:
From the docs:
> The probability density above is defined in the “standardized” form. To shift and/or scale the distribution use the loc and scale parameters. Specifically, beta.pdf(x, a, b, loc, scale)
is identically equivalent to beta.pdf(y, a, b) / scale
with y = (x - loc) / scale
.
So when you are using scale = 1
and loc = 0
, you are simply getting the distribution beta.pdf(x, a, b)
, which you can really verify.
The reason why you get the first plot is that you are trying to plot a Beta distribution over an x
domain that contains zero and Beta(0, 0.5, 0.5)
tends to Infinity.
Note that you don't see the distribution exploding at the right side of your plot because your x.max() == 0.99
答案2
得分: 1
loc
和scale
参数 不是 分布的均值和标准差。它们是平移和缩放参数;参见,例如“位置-尺度家族”。对于贝塔分布,loc
是支持区间的左端,scale
是其长度。
英文:
The parameters loc
and scale
are not the mean and standard deviation of the distribution. They are translation and scaling parameters; see, e.g. "Location-scale family". For the beta distribution, loc
is the left end of the support interval, and scale
is its length.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论