2016-03-08 2 views
1

Включая код, который я написал ниже. По какой-то причине верхняя граница 0,804 по сравнению с начальным распределением чрезмерно сбраживается. Это происходит для обоих распределений, которые я использую.Почему scipy.stats.rv_continuous выбирает верхнюю границу слишком много раз?

Это обычная проблема для rv_continuous или я что-то упускаю?

import matplotlib.pyplot as plt 
import scipy.stats as st 

class Disk_pdf(st.rv_continuous): 
    def _pdf(self,x): 
     return (x*(1-np.exp((x-0.804)/0.2539)))/((1+x)*(x**2+0.0256**2)**0.5) 

Disk_cv = Disk_pdf(a=0,b=0.804,name='Disk_pdf') 
Disk_dist = Disk_cv.rvs(size = 10000) 
plt.figure() 
plt.hist(Disk_dist,100) 




class Bulge_pdf(st.rv_continuous): 
    def _pdf(self,x): 
     return x*np.exp(-2.368*x-6.691*x**2) 
Bulge_cv = Bulge_pdf(a=0,b=0.804,name='Bulge_pdf') 

Bulge_dist = Bulge_cv.rvs(size = 10000) 
plt.figure() 
plt.hist(Bulge_dist,100) 

Изображения начальных распределений и гистограмм, созданных с использованием rv_continuous, доступны ниже. У меня есть два изображения гистограмм, один из которых увеличен, чтобы показать, что распределение захватывается методом, отличным от верхней границы выборки. На другом изображении показана гистограмма по шкале y, которая показывает, насколько плохая проблема с выборкой.

Initial Disk galaxies' distribution and histograms made using rv_continuous which have over sampled upper bound.

Initial Bulge dominated galaxies' distribution and histograms made using rv_continuous which have over sampled upper bound.

ответ

1

ФПВ должны быть нормализованы, и ваш, кажется, не быть:

In [6]: from scipy.integrate import quad 

In [7]: quad(Disk_cv.pdf, 0, 0.804) 
Out[7]: (0.41121809643549406, 4.005573481922018e-09) 
+0

Brilliant спасибо за помощь. У меня был немного тупой момент, и я думал, что уже включил константу нормализации в PDF. Мой код работает отлично, теперь я включил нормализацию. Спасибо! – nium14

Смежные вопросы