我想知道为什么预置函数dweibull.pdf的威布尔pdf的值或多或少是它们应有的一半。
我做了个测试。对于同样的x,我为A=10和K=2创建了两次weibull pdf,一个是通过自己编写公式,另一个是使用预先构建的dweibull函数。
import numpy as np
from scipy.stats import exponweib,dweibull
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
K=2.0
A=10.0
x=np.arange(0.,20.,1)
#own function
def weib(data,a,k):
return (k / a) * (data / a)**(k - 1) * np.exp(-(data / a)**k)
pdf1=weib(x,A,K)
print sum(pdf1)
#prebuilt function
dist=dweibull(K,1,A)
pdf2=dist.pdf(x)
print sum(pdf2)
f=plt.figure()
suba=f.add_subplot(121)
suba.plot(x,pdf1)
suba.set_title('pdf dweibull')
subb=f.add_subplot(122)
subb.plot(x,pdf2)
subb.set_title('pdf own function')
f.show()对于威布尔来说,pdf值是一半,但这是错误的,因为求和应该是1,而不是0.5左右,就像对dweibull一样。通过给自己写公式,求和约为1。

发布于 2016-06-30 23:17:48
scipy.stats.dweibull实现了双Weibull分布。它的支持才是真正的路线。您的函数weib对应于weibull_min分布的PDF。
将函数weib与weibull_min.pdf进行比较
In [128]: from scipy.stats import weibull_min
In [129]: x = np.arange(0, 20, 1.0)
In [130]: K = 2.0
In [131]: A = 10.0你的执行情况:
In [132]: weib(x, A, K)
Out[132]:
array([ 0. , 0.019801 , 0.03843158, 0.05483587, 0.0681715 ,
0.07788008, 0.08372116, 0.0857677 , 0.08436679, 0.08007445,
0.07357589, 0.0656034 , 0.05686266, 0.04797508, 0.03944036,
0.03161977, 0.02473752, 0.01889591, 0.014099 , 0.0102797 ])scipy.stats.weibull_min.pdf
In [133]: weibull_min.pdf(x, K, scale=A)
Out[133]:
array([ 0. , 0.019801 , 0.03843158, 0.05483587, 0.0681715 ,
0.07788008, 0.08372116, 0.0857677 , 0.08436679, 0.08007445,
0.07357589, 0.0656034 , 0.05686266, 0.04797508, 0.03944036,
0.03161977, 0.02473752, 0.01889591, 0.014099 , 0.0102797 ])顺便说一句,在代码的这一行中有一个错误:
dist=dweibull(K,1,A)参数的顺序是shape, location, scale,所以要将location参数设置为1,这就是为什么第二幅图中的值被移动1的原因。那条线应该是
dist = dweibull(K, 0, A)https://stackoverflow.com/questions/38132647
复制相似问题