2014-12-23 7 views

Antwort

14

Weder sklearn.neighbors.KernelDensity noch statsmodels.nonparametric scheinen gewichtete Stichproben zu unterstützen. Ich modifizierte scipy.stats.gaussian_kde, um heterogene Stichprobengewichte zu ermöglichen, und dachte, dass die Ergebnisse für andere nützlich sein könnten. Ein Beispiel ist unten gezeigt. http://nbviewer.ipython.org/gist/tillahoffmann/f844bce2ec264c1c8cb5 Details

Implementierung

Der gewichtete arithmetische Mittel ist

weighted arithmetic mean

Die unbiased data covariance matrix ist dann gegeben durch:

example

Ein ipython Notebook finden Sie hierunbiased covariance matrix

kann die Bandbreite wie in scipy von scott oder silverman Regeln gewählt werden. Die Anzahl der zur Berechnung der Bandbreite verwendeten Samples ist jedoch Kish's approximation for the effective sample size.

+2

Haben Sie darüber nachgedacht, die 'scipy' Entwickler zu bitten, Ihren Code in' scipy' oder 'statsmodels' zu integrieren? – cel

+2

Ja, aber ich bin noch nicht dazu gekommen, Resampling und Integration zu implementieren. Sobald das erledigt ist, werde ich eine Pull-Anfrage machen. –

+0

Ich habe an einem ähnlichen Problem gearbeitet, aber mit meinem eigenen Framework, anstatt scipy zu modifizieren. Ich hatte nicht gedacht, Kishs Annäherung zu benutzen. Glaubst du, es ist der beste Bandbreitenschätzer? Es stellt jeden Punkt im Datensatz mit der gleichen effektiven Stichprobengröße neu ein. Ich frage mich, ob eine variable Bandbreite sinnvoller wäre. – Gabriel

0

Schauen Sie sich die Pakete PyQT-Fit und Statistiken für Python. Sie scheinen eine Kerndichte-Schätzung mit gewichteten Beobachtungen zu haben.

+0

Beachten Sie, dass PyQT-Fit ab Version 1.3.4 nur die 1D-Kernel-Dichte-Schätzung unterstützt. – lapis