2016-06-30 1 views
0

Je me demandais pourquoi les valeurs de weibull pdf avec la dweibull.pdf fonction préconstruits sont plus ou moins la moitié, ils devraient êtrevaleurs différentes weibull pdf

Je l'ai fait un test. Pour le même x j'ai créé le pdf de Weibull pour A = 10 et K = 2 deux fois, un en écrivant moi-même le formula et l'autre avec la fonction prébuiltée de 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() 

Il semble avec dweibull les valeurs pdf sont la moitié, mais que cela est faux que la somme devrait être au total 1 et non aroung 0,5 comme il est avec dweibull. En écrivant moi-même la formule, la sommation est d'environ 1 [enter image description here

Répondre

1

scipy.stats.dweibulldouble distribution de Weibull. Son support est la vraie ligne. Votre fonction weib correspond au fichier PDF de la distribution weibull_min de scipy.

Comparez votre fonction 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 

Votre mise en œuvre:

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 ]) 

Soit dit en passant, il y a une erreur dans cette ligne de votre code:

dist=dweibull(K,1,A) 

L'ordre des paramètres est shape, location, scale, de sorte que vous définissez le paramètre de localisation à 1. Voilà pourquoi les valeurs dans votre deuxième parcelle sont décalé d'un. Cette ligne aurait dû être

dist = dweibull(K, 0, A)