“python”中的加权高斯核密度估计

时间:2014-12-23 16:06:37

标签: python statistics scipy kernel-density

目前无法使用scipy.stats.gaussian_kde来估算基于weighted samples的随机变量的密度。有哪些方法可用于估算基于加权样本的连续随机变量的密度?

3 个答案:

答案 0 :(得分:22)

sklearn.neighbors.KernelDensitystatsmodels.nonparametric似乎都不支持加权样本。我修改了scipy.stats.gaussian_kde以允许异构采样权重,并认为结果可能对其他人有用。示例如下所示。

example

可在此处找到ipython笔记本:http://nbviewer.ipython.org/gist/tillahoffmann/f844bce2ec264c1c8cb5

实施细节

加权算术平均值

weighted arithmetic mean

然后给出unbiased data covariance matrix unbiased covariance matrix

可以通过scottsilverman规则选择带宽,如scipy中所示。但是,用于计算带宽的样本数为Kish's approximation for the effective sample size

答案 1 :(得分:2)

对于单变量分布,您可以使用statsmodels中的KDEUnivariate。它的文档记录不充分,但是fit方法接受一个weights参数。这样就无法使用FFT。这是一个示例:

import matplotlib.pyplot as plt
from statsmodels.nonparametric.kde import KDEUnivariate

kde1= KDEUnivariate(np.array([10.,10.,10.,5.]))
kde1.fit(bw=0.5)
plt.plot(kde1.support, [kde1.evaluate(xi) for xi in kde1.support],'x-')

kde1= KDEUnivariate(np.array([10.,5.]))
kde1.fit(weights=np.array([3.,1.]), 
         bw=0.5,
         fft=False)
plt.plot(kde1.support, [kde1.evaluate(xi) for xi in kde1.support], 'o-')

产生此图: enter image description here

答案 2 :(得分:1)

查看PyQT-Fit软件包和Python的统计信息。他们似乎有加权观察的核密度估计。