2016-06-30 3 views
0

Я задавался вопросом, почему значения Вейбулла PDF с скомпилированных функции dweibull.pdf более или менее половины они должны бытьРазличные значения Вейбулла PDF

Я сделал тест. Для того же x я дважды создал файл weibull pdf для A = 10 и K = 2, записав себе formula, а другой - с заранее созданной функцией 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() 

кажется с dweibull значения PDF являются наполовину, но что это не так, как суммирование должно быть в общей сложности 1 и не aroung 0,5, как это с dweibull. Написав себе формулу суммирования составляет около 1 [enter image description here

ответ

1

scipy.stats.dweibullреализует двойной распределение Вейбулла. Его поддержка - настоящая линия. Ваша функция weib соответствует PDF-файлу scipy's weibull_min.

Сравнить ваша функция 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, поэтому вы устанавливаете параметр местоположения до 1. Поэтому значения в вашем втором участке есть сдвинутый на один. Эта линия должна была быть

dist = dweibull(K, 0, A) 
Смежные вопросы