【发布时间】:2015-10-21 02:20:06
【问题描述】:
我试图使用gaussian_kde 估计一维 PDF。但是,当我使用stats.norm.pdf 绘制 pdf 时,它给了我不同的结果。如果我错了,请纠正我,我认为他们应该给出非常相似的结果。这是我的代码。
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:grid]:
[
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. ]
【问题讨论】:
-
您可以发布您的数据 (
X) 吗? -
我用 X 值更新了帖子
-
您能否简要说明您比较的目的是什么?
-
最初我想获得零交叉的数量并且我有 3D 数据,所以我使用 gaussian_kde 得到了估计的 pdf,然后我得到了一阶导数,我注意到无论我有什么数据,我得到了峰数=9。因此,我将上述示例作为相同想法的概念证明,因为我确切知道数据中的峰值数量,但在 3D 数据中我不知道。当我得到 stats.norm.pdf 输出的一阶导数时,结果类似于峰值数据的数量和 pdf 的形状。但是,无论数据输入如何,对 gaussian_kde 进行导数都会得到恒定的结果
-
原始数据:
grid = 100j #X= np.mgrid[min_x:max_x:grid] #Z = np.reshape(kernel(X), X.shape)在这种情况下完全没有效果。我仔细检查了它。我只是写了它,因为也许这是你得到意想不到的结果的原因。正如我所知道的那样,您可以计算出线性数据的高斯底,因此很容易获得标准的 U 形。然而,pdf 统计信息是根据 peek 集的分离元素顺序计算的。为什么你甚至期望得到类似的结果,请解释一下。
标签: python python-2.7 pandas scipy probability-density