2017-03-01 2 views
1

J'essaie d'implémenter le bootstrap non paramétrique sur Python. Il faut prendre un échantillon, construire une fonction de distribution empirique puis générer un tas d'échantillons à partir de cet edf. Comment puis-je le faire? Dans Scipy, je n'ai trouvé que la façon de faire votre propre fonction de distribution si vous connaissez la formule exacte qui la décrit, mais je n'ai qu'un edf.Comment faire un échantillon de la fonction de distribution empirique

+0

Pourquoi avez-vous besoin de l'EDF? vous devriez juste échantillonner (avec remplacement) de vos données, ce seront vos échantillons bootstrap – maxymoo

Répondre

0

Le edf vous obtenez en triant les échantillons:

N = samples.size 
ss = np.sort(samples) # these are the x-values of the edf 
         # the y-values are 1/(2N), 3/(2N), 5/(2N) etc. 
edf = lambda x: np.searchsorted(ss, x)/N 

Toutefois, si vous ne souhaitez que rééchantillonner vous suffit de dessiner à partir de votre échantillon avec une probabilité égale et remplacement.

Si cela est trop "steppy" à votre goût, vous pouvez probablement utiliser une sorte d'interpolation pour obtenir une distribution en douceur.

+0

l'EDF est par ** définition ** steppy! – maxymoo

+0

@maxymoo Oui, je le sais. Mais typiquement on n'est pas vraiment intéressé par l'edf pour lui-même mais comme un dispositif pour estimer la "vraie" distribution. Et on peut avoir de bonnes raisons de supposer que la vraie distribution est lisse. En outre, en fonction de ce que vous utilisez pour vos nouveaux échantillons, l'échantillonnage à partir d'une distribution discrète où la distribution vraie est lisse peut conduire à des artefacts. –

+0

c'est intéressant ... vous lissez souvent vos bootstraps? – maxymoo