我有遵循高斯分布的数据。然而,数据仅对于一系列值 [xa,xb] 来说才是真正的高斯分布,因此我想使用scipy.stats.truncnorm拟合截断正态分布,同时使用我知道范围 [xa,xb] 的事实。我的目标是找到地点和规模。
我不明白如何在拟合中修复 xa 和 xb 。形状参数是“a”和“b”,但这些参数取决于位置和比例,这是我的未知数。而且,似乎无法对'a'和'b'进行初步猜测(它们只能用fa和fb冻结?)。当我做:
par = truncnorm.fit(r, a=a_guess, b=b_guess, scale= scale_guess, loc = loc_guess)
Run Code Online (Sandbox Code Playgroud)
我明白了
未知参数:{'a':0.0,'b':2.4444444444444446}。
而且,我得到的配合非常不稳定。这是一个例子:
from scipy.stats import truncnorm
import matplotlib.pyplot as plt
xa, xb = 30,250
loc, loc_guess = 50, 30
scale, scale_guess = 75, 90
a,b = (xa-loc)/scale, (xb-loc)/scale
fig, ax = plt.subplots(1, 1)
x = np.linspace(xa,xb,10000)
ax.plot(x, truncnorm.pdf(x, a, b, loc=loc, scale=scale),
'r-', lw=5, alpha=0.6, label='truncnorm pdf')
r = truncnorm.rvs(a, b, loc=loc, scale=scale, size=10000)
par = truncnorm.fit(r, …Run Code Online (Sandbox Code Playgroud)