J'ai un échantillon pondéré, pour lequel je souhaite calculer des quantiles. 1
Idéalement, où les poids sont égaux (si = 1 ou autre), les résultats seraient conformes à celles de scipy.stats.scoreatpercentile()
et R de quantile(...,type=7)
.
Une approche simple serait de «multiplier» l'échantillon en utilisant les poids donnés. Cela donne effectivement un ecdf localement "plat" dans les zones de poids> 1, ce qui semble intuitivement être la mauvaise approche lorsque l'échantillon est en fait un sous-échantillonnage. En particulier, cela signifie qu'un échantillon dont les poids sont tous égaux à 1 a des quantiles différents de celui dont les poids sont tous égaux à 2 ou 3. (Notez cependant que l'article référencé dans [1] semble utiliser cette approche.)
http://en.wikipedia.org/wiki/Percentile#Weighted_percentile donne une formulation alternative pour le centile pondéré. Il n'est pas clair dans cette formulation si des échantillons adjacents avec des valeurs identiques doivent d'abord être combinés et leurs poids additionnés, et en tout cas ses résultats ne semblent pas être cohérents avec le type par défaut de R 7 quantile()
dans le cas non pondéré / également pondéré. La page wikipedia sur les quantiles ne mentionne pas du tout le cas pondéré.
Existe-t-il une généralisation pondérée de la fonction quantile "type 7" de R?
[en utilisant Python, mais juste à la recherche d'un algorithme, vraiment, donc n'importe quel langage fera l'affaire]
M
[1] Les poids sont des entiers; les poids sont ceux des tampons qui sont combinés dans les opérations de "réduction" et de "sortie" comme décrit dans http://infolab.stanford.edu/~manku/papers/98sigmod-quantiles.pdf . Essentiellement, l'échantillon pondéré est un sous-échantillonnage de l'échantillon complet non pondéré, chaque élément x (i) du sous-échantillon représentant les éléments de pondération (i) de l'échantillon complet.