fitscipy 0.9.0中的方法中有一个错误,已在更高版本的scipy中修复。
以下脚本的输出应为:
Explicit formula: mu = 4.99203450, sig = 0.81691086Fit log(x) to norm: mu = 4.99203450, sig = 0.81691086Fit x to lognorm: mu = 4.99203468, sig = 0.81691081
但是使用scipy 0.9.0,它是
Explicit formula: mu = 4.99203450, sig = 0.81691086Fit log(x) to norm: mu = 4.99203450, sig = 0.81691086Fit x to lognorm: mu = 4.23197270, sig = 1.11581240
以下测试脚本显示了获得相同结果的三种方法:
import numpy as npfrom scipy import statsdef lognfit(x, ddof=0): x = np.asarray(x) logx = np.log(x) mu = logx.mean() sig = logx.std(ddof=ddof) return mu, sig# A simple data set for easy reproducibilityx = np.array([50., 50, 100, 200, 200, 300, 500])# Explicit formulamy_mu, my_sig = lognfit(x)# Fit a normal distribution to log(x)norm_mu, norm_sig = stats.norm.fit(np.log(x))# Fit the lognormal distributionlognorm_sig, _, lognorm_expmu = stats.lognorm.fit(x, floc=0)print "Explicit formula: mu = %10.8f, sig = %10.8f" % (my_mu, my_sig)print "Fit log(x) to norm: mu = %10.8f, sig = %10.8f" % (norm_mu, norm_sig)print "Fit x to lognorm: mu = %10.8f, sig = %10.8f" % (np.log(lognorm_expmu), lognorm_sig)
ddof=1在std中带有选项。开发。计算以使用无偏方差估计:
In [104]: xOut[104]: array([ 50., 50., 100., 200., 200., 300., 500.])In [105]: lognfit(x, ddof=1)Out[105]: (4.9920345004312647, 0.88236457185021866)
在matlab的lognfit文档中有一条注释,其中指出不使用审查时,lognfit使用方差的无偏估计量的平方根来计算sigma。这相当于在上面的代码中使用ddof
= 1。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)