【发布时间】:2015-05-04 13:02:42
【问题描述】:
我正在使用 scipys gaussian_kde 来获取一些双峰数据的概率密度。但是,由于我的数据是有角度的(它的方向以度为单位),当值出现在极限附近时我会遇到问题。下面的代码给出了两个示例 kde,当域为 0-360 时,由于它无法处理数据的循环性质,因此估计不足。 pdf 需要在单位圆上定义,但我在 scipy.stats 中找不到适合此类数据的任何内容(存在 von mises 分布,但仅适用于单峰数据)。有没有人以前遇到过这个?是否有任何东西(最好基于 python)可用于估计单位圆上的双峰 pdf?
import numpy as np
import scipy as sp
from pylab import plot,figure,subplot,show,hist
from scipy import stats
baz = np.array([-92.29061004, -85.42607874, -85.42607874, -70.01689348,
-63.43494882, -63.43494882, -70.01689348, -70.01689348,
-59.93141718, -63.43494882, -59.93141718, -63.43494882,
-63.43494882, -63.43494882, -57.52880771, -53.61564818,
-57.52880771, -63.43494882, -63.43494882, -92.29061004,
-16.92751306, -99.09027692, -99.09027692, -16.92751306,
-99.09027692, -16.92751306, -9.86580694, -8.74616226,
-9.86580694, -8.74616226, -8.74616226, -2.20259816,
-2.20259816, -2.20259816, -9.86580694, -2.20259816,
-2.48955292, -2.48955292, -2.48955292, -2.48955292,
4.96974073, 4.96974073, 4.96974073, 4.96974073,
-2.48955292, -2.48955292, -2.48955292, -2.48955292,
-2.48955292, -9.86580694, -9.86580694, -9.86580694,
-16.92751306, -19.29004622, -19.29004622, -26.56505118,
-19.29004622, -19.29004622, -19.29004622, -19.29004622])
xx = np.linspace(-180, 180, 181)
scipy_kde = stats.gaussian_kde(baz)
print scipy_kde.integrate_box_1d(-180,180)
figure()
plot(xx, scipy_kde(xx), c='green')
baz[baz<0] += 360
xx = np.linspace(0, 360, 181)
scipy_kde = stats.gaussian_kde(baz)
print scipy_kde.integrate_box_1d(-180,180)
plot(xx, scipy_kde(xx), c='red')
【问题讨论】:
标签: scipy gaussian kernel-density probability-density