我基于我的数据集创建了一个直方图。我想为这个直方图创建一个威布尔拟合。我使用了scipy和stats. weibull函数,但不幸的是,它不起作用。
你知道在这种情况下如何使用统计威布尔吗?
下面是代码:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
data = 'Figures/Histogram/Histogram.xlsx'
hist= pd.read_excel('Histogram/Histogram.xlsx')
# x= hist['DeltaT_value']
x= hist['DeltaT_-250_2017']
X=x[(x>0)]
plt.figure(figsize=(15,4))
plt.hist(X, bins= np.arange (0,1500,25), color='#0504aa', edgecolor ='red', rwidth= 0.8)
plt.ylabel('Number of EL')
plt.xlabel('Delta T (years CE) between EL')
plt.xlim(0, 401)
plt.xticks(np.arange(0,401,25))
plt.yticks(np.arange(0,2.2,1))`
# Weibull
####
shape, loc, scale = stats.weibull_min.fit(X)
x = np.linspace(stats.weibull_min.ppf(0.01, shape, loc=loc, scale=scale), stats.weibull_min.ppf(0.99, shape, loc=loc, scale=scale), 100)
plt.plot(x, stats.weibull_min.pdf(x, shape, loc=loc, scale=scale), 'r-', lw=5, alpha=0.6, label='weibull')
我试过这个:
shape, loc, scale = stats.weibull_min.fit(X)
x = np.linspace(stats.weibull_min.ppf(0.01, shape, loc=loc, scale=scale), stats.weibull_min.ppf(0.99, shape, loc=loc, scale=scale), 100)
plt.plot(x, stats.weibull_min.pdf(x, shape, loc=loc, scale=scale), 'r-', lw=5, alpha=0.6, label='weibull')
不幸的是,似乎在直方图的顶部创建了另一个图,而不是拟合。
2条答案
按热度按时间xn1cxnb41#
经过一段时间的努力,我找到了一个解决办法:
Robert Dodier对我最初的帖子的评论非常有趣,我将尝试看看如何在原始数据集上使用“对数似然函数”,而不是在直方图上拟合。这是我第一次使用对数似然函数。如果有人有什么建议,我很乐意接受。
谢谢。
o2rvlv0m2#
尽管我现在正在考虑对原始数据使用对数似然函数,但我仍然试图拟合得到的直方图的分布。
使用我之前发布的代码,我最终得到了这个(威布尔拟合):
我想伽马拟合会更好...所以我正在测试其他几种拟合。
下面是几个发行版的新代码,我愿意接受任何改进此代码的建议: