2015-07-29 1 views
0

Я пытался оценить PDF с 1-D, используя gaussian_kde. Однако, когда я рисую pdf, используя stats.norm.pdf, это дает мне отличный результат. Пожалуйста, поправьте меня, если я ошибаюсь, я думаю, что они должны дать совершенно аналогичный результат. Вот мой код.Должен ли stats.norm.pdf получить тот же результат, что и stats.gaussian_kde в Python?

 npeaks = 9 
     mean = np.array([0.2, 0.3, 0.38, 0.55, 0.65,0.7,0.75,0.8,0.82]) #peak locations 
     support = np.arange(0,1.01,0.01) 
     std = 0.03 
     pkfun = sum(stats.norm.pdf(support, loc=mean[i], scale=std) for i in range(0,npeaks)) 

     df = pd.DataFrame(support) 
     X = df.iloc[:,0] 

     min_x, max_x = X.min(), X.max() 

     plt.figure(1) 
     plt.plot(support,pkfun) 

     kernel = stats.gaussian_kde(X) 

     grid = 100j 
     X= np.mgrid[min_x:max_x:grid] 

     Z = np.reshape(kernel(X), X.shape) 
     # plot KDE 
     plt.figure(2) 
     plt.plot(X, Z) 
     plt.show() 

Кроме того, когда я получаю первую производную stats.gaussian_kde был далек от исходного сигнала. Однако результат первой производной от stats.norm.pdf имеет смысл. Итак, я предполагаю, что у меня может быть ошибка в моем коде выше.

Значение X = np.mgrid [min_x: max_x: сетки]:

[ 

0.   0.01010101 0.02020202 0.03030303 0.04040404 0.05050505 
    0.06060606 0.07070707 0.08080808 0.09090909 0.1010101 0.11111111 
    0.12121212 0.13131313 0.14141414 0.15151515 0.16161616 0.17171717 
    0.18181818 0.19191919 0.2020202 0.21212121 0.22222222 0.23232323 
    0.24242424 0.25252525 0.26262626 0.27272727 0.28282828 0.29292929 
    0.3030303 0.31313131 0.32323232 0.33333333 0.34343434 0.35353535 
    0.36363636 0.37373737 0.38383838 0.39393939 0.4040404 0.41414141 
    0.42424242 0.43434343 0.44444444 0.45454545 0.46464646 0.47474747 
    0.48484848 0.49494949 0.50505051 0.51515152 0.52525253 0.53535354 
    0.54545455 0.55555556 0.56565657 0.57575758 0.58585859 0.5959596 
    0.60606061 0.61616162 0.62626263 0.63636364 0.64646465 0.65656566 
    0.66666667 0.67676768 0.68686869 0.6969697 0.70707071 0.71717172 
    0.72727273 0.73737374 0.74747475 0.75757576 0.76767677 0.77777778 
    0.78787879 0.7979798 0.80808081 0.81818182 0.82828283 0.83838384 
    0.84848485 0.85858586 0.86868687 0.87878788 0.88888889 0.8989899 
    0.90909091 0.91919192 0.92929293 0.93939394 0.94949495 0.95959596 
    0.96969697 0.97979798 0.98989899 1.  ] 

Значение X = df.iloc [: 0]:

[ 0. 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 
    0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 
    0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 
    0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 
    0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 
    0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 
    0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 
    0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 
    0.96 0.97 0.98 0.99 1. ] 
+0

Можете ли вы разместить свои данные ('X')? – chrisb

+0

Я обновил сообщение с помощью значения X – Yasmin

+0

Не могли бы вы вкратце объяснить, какова ваша цель сравнения? – Geeocode

ответ

0

В приведенной ниже строке вы делаете PDF-вычисления в каждой точке пика по 100 точкам данных с помощью std = 0,03. Таким образом, вы получите матрицу с массивом с 100 элементов в строке то summerize его поэлементно, результат: enter image description here

Таким образом, вы получаете график с 9 узким -из std = 0,03 - U-образной формы , Вы уверены, что это была ваша цель в этой строке?

Это никогда не будет получить подобный график, как оценка ядра базы исходных данных, результат: enter image description here

pkfun = сумма (stats.norm.pdf (поддержка, LOC = средняя [I ], scale = std) для i в диапазон (0, npeaks))