2016-06-30 12 views
0

ich mich gefragt, warum die Werte von Weibull pdf mit der vorgebauten Funktion dweibull.pdf sind mehr oder weniger die Hälfte sollten sie seinUnterschiedliche Werte Weibull pdf

ich einen Test gemacht haben. Für das gleiche x habe ich das Weibull-PDF für A = 10 und K = 2 zweimal erstellt, einmal indem ich mir die formula und die andere mit der vordefinierten Funktion von dweibull geschrieben habe.

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

Es scheint mit dweibull die pdf-Werte die Hälfte sind aber, dass dies falsch ist wie die Summe insgesamt 1 und nicht aroung 0,5 sein sollte, wie es mit dweibull ist. Durch das Schreiben selbst die Formel ist die Summe um 1 [enter image description here

Antwort

1

scipy.stats.dweibull implementiert die Doppel Weibull-Verteilung. Seine Unterstützung ist die echte Linie. Ihre Funktion weib entspricht der PDF von scipys weibull_min Verteilung.

Vergleichen Sie die Funktion 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 

Ihre Implementierung:

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

By the way, gibt es einen Fehler in dieser Zeile des Codes:

dist=dweibull(K,1,A) 

Die Reihenfolge der Parameter ist shape, location, scale, so dass Sie den Speicherort für Parameter auf 1 setzen Deshalb sind die Werte in der zweiten Handlung sind um eins verschoben. Diese Linie sollte

dist = dweibull(K, 0, A) 
sein