Estimación de la densidad del núcleo gaussiano ponderado en `python`

Actualmente no es posible usar scipy.stats.gaussian_kde para estimar la densidad de una variable aleatoria basada en muestras ponderadas . ¿Qué métodos están disponibles para estimar densidades de variables aleatorias continuas basadas en muestras ponderadas?

Related of "Estimación de la densidad del núcleo gaussiano ponderado en `python`"

Ni sklearn.neighbors.KernelDensity ni statsmodels.nonparametric parecen admitir muestras ponderadas. scipy.stats.gaussian_kde para permitir ponderaciones de muestreo heterogéneas y pensé que los resultados podrían ser útiles para otros. A continuación se muestra un ejemplo.

ejemplo

Puede encontrar un cuaderno de ipython aquí: http://nbviewer.ipython.org/gist/tillahoffmann/f844bce2ec264c1c8cb5

Detalles de implementacion

La media aritmética ponderada es

media aritmética ponderada

La matriz de covarianza de datos no sesgada es dada entonces por matriz de covarianza imparcial

El ancho de banda puede ser elegido por las reglas de scott o silverman como en scipy . Sin embargo, el número de muestras utilizadas para calcular el ancho de banda es la aproximación de Kish para el tamaño efectivo de la muestra .

Para distribuciones univariadas puede usar KDEUnivariate de statsmodels . No está bien documentado, pero los métodos de fit aceptan un argumento de weights . Entonces no puedes usar FFT. Aquí hay un ejemplo:

 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-') 

que produce esta figura: introduzca la descripción de la imagen aquí

Echa un vistazo a los paquetes PyQT-Fit y estadísticas de Python. Parecen tener una estimación de la densidad del kernel con observaciones ponderadas.