我试图使用Scipy.stats norm.fit()进行一些修改,以拟合对数正态分布的数据。我想验证使用Scipy.stats lognorm.fit()拟合数据的结果。结果出来只是类似,但它应该是相同的。(图片显示在下面的链接)
https://ibb.co/PxHWSNp
我使用norm.fit()来拟合对数正态分布数据的方法是,我在norm.fit()中引入log(x),然后将pdf除以x。我这样做的原因来自下面的两个公式。(对数正态分布pdf中唯一的区别是ln(x)和1/x项)有人能帮助我确定我做错了什么吗?
1.对数正态分布pdf:https://ibb.co/Zd9J17T
1.正态分布pdf:https://ibb.co/Mgvpv31
#x is set from the center of the leftmost bar to the center of the rightmost bar
x = np.linspace(left_boundary,right_boundary,1000)
#data1 is the original data
data2 = np.log(data1)
params1 = lognorm.fit(data1,method='MLE',loc=0)
plt.plot(x,lognorm.pdf(x,params1[0],params1[1],params1[2]),label='Log-Normal fitting using lognorm.fit()')
params2 = norm.fit(data2,method='MLE',loc=0)
# Here I bring in the log(x) and divide the pdf by x
plt.plot(x,norm.pdf(np.log(x),params2[0],params2[1])/x,label='Log-Normal fitting using norm.fit()')
字符串
我这么做的原因是为了检查我是否可以复制同样的方法来导出log-pearson 3分布拟合,因为我在任何库中都找不到log-pearson 3。
1条答案
按热度按时间uwopmtnx1#
目前,您正在将
loc=0
传递给lognorm.fit
。这提供了loc
参数的 * 猜测 *,但您希望使用floc=0
将其 * 固定 * 为零。这将使您在两次拟合之间获得给予精确的一致性。字符串
的数据