拟合数据分布(scipy/fitter/等)

plicqrtu  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(220)

我有以下数据:

y = np.array([8.8,7.2,5.8,4.7,3.8,3.1,2.6,2.2,2.0,1.7,1.8,1.8,1.9,1.7,1.4,1.2,1.7,1.2,1.5])   
x = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])

我想用这个数据拟合一个分布。
我试过使用scipy和fitter,但是分布的拟合效果很差。
I got results akin to this example.
1.为什么上述例子中的分布看起来比真实数据低?
1.使用我的数据,我如何拟合一个合理的分布?任何工作的例子将不胜感激。

b91juud3

b91juud31#

我通过以下步骤解决了这个问题:
(1)沃伦的回答概括了我无法拟合PDF --“曲线下的面积”远大于1,它应该等于1。
(2)相反,我通过下面的代码将曲线拟合到我的数据:


# Create a function which can create your line of best fit. In my case it's a 5PL equation.

def func_5PL(x, d, a, c, b, g):
    return d + ((a-d)/((1+((x/c)**b))**g))

# Determine the coefficients for your equation.

popt_mock, _ = curve_fit(func_5PL, x, y)

# Plot the real data, along with the line of best fit.

plt.plot(x, func_5PL(x, *popt_mock), label='line of best fit')
plt.scatter(x, y, label='real data')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()

my data, when a curve it fit to it
(4)当我得到曲线时,我只是重新缩放它,使它的积分等于1(对于我感兴趣的x值范围)。

相关问题