The*_*tor 5 python statistics scipy
我在stackoverflow中看到了几个关于如何适应的问题log-normal distribution.我还需要知道两个澄清.
我有一个样本数据,其对数遵循正态分布.所以我可以使用scipy.stats.lognorm.fit(即a log-normal distribution)拟合数据
适合工作正常,也给我标准偏差.这是我的一段代码与结果.
sample = np.log10(data) #taking the log10 of the data
scatter,loc,mean = stats.lognorm.fit(sample) #Gives the paramters of the fit
x_fit = np.linspace(13.0,15.0,100)
pdf_fitted = stats.lognorm.pdf(x_fit,scatter,loc,mean) #Gives the PDF
print "scatter for data is %s" %scatter
print "mean of data is %s" %mean
Run Code Online (Sandbox Code Playgroud)
结果
scatter for data is 0.186415047243
mean for data is 1.15731050926
Run Code Online (Sandbox Code Playgroud)
From the image you can clearly see that the mean is around 14.2, but what I get is 1.15??!! 为什么会这样? clearly the log(mean) is also not near 14.2!!
在这篇文章,并在这个问题中,提到的log(mean)是实际的平均值.
但是你可以从我上面的代码中看到,我所获得的合适是使用了它sample = log(data),它似乎也很合适.但是,当我尝试
sample = data
pdf_fitted = stats.lognorm.pdf(x_fit,scatter,loc,np.log10(mean))
Run Code Online (Sandbox Code Playgroud)
适合似乎不起作用.
1)为什么平均值不是14.2?
2)如何绘制显示1西格玛置信区域的填充/绘制垂直线?
你说
我有一个样本数据,其对数遵循正态分布.
假设data是包含样本的数组.要使用此数据将此数据拟合到对数正态分布scipy.stats.lognorm,请使用:
s, loc, scale = stats.lognorm.fit(data, floc=0)
Run Code Online (Sandbox Code Playgroud)
现在假设mu和sigma是潜在正态分布的均值和标准差.要从这个拟合中获得这些值的估计值,请使用:
estimated_mu = np.log(scale)
estimated_sigma = s
Run Code Online (Sandbox Code Playgroud)
(这些不是对样本的均值和标准差的估计data.请参阅维基百科页面,了解有关mu和sigma的对数正态分布的均值和方差的公式.)
要组合直方图和PDF,您可以使用,例如,
import matplotlib.pyplot as plt.
plt.hist(data, bins=50, normed=True, color='c', alpha=0.75)
xmin = data.min()
xmax = data.max()
x = np.linspace(xmin, xmax, 100)
pdf = stats.lognorm.pdf(x, s, scale=scale)
plt.plot(x, pdf, 'k')
Run Code Online (Sandbox Code Playgroud)
如果要查看数据日志,可以执行以下操作.请注意,此处使用正态分布的PDF .
logdata = np.log(data)
plt.hist(logdata, bins=40, normed=True, color='c', alpha=0.75)
xmin = logdata.min()
xmax = logdata.max()
x = np.linspace(xmin, xmax, 100)
pdf = stats.norm.pdf(x, loc=estimated_mu, scale=estimated_sigma)
plt.plot(x, pdf, 'k')
Run Code Online (Sandbox Code Playgroud)
顺便说一下,stats.lognorm适合的另一种方法是log(data)
使用stats.norm.fit:
logdata = np.log(data)
estimated_mu, estimated_sigma = stats.norm.fit(logdata)
Run Code Online (Sandbox Code Playgroud)
相关问题:
| 归档时间: |
|
| 查看次数: |
6332 次 |
| 最近记录: |