3 votes

Echantillonnage à partir d'une distribution de probabilité inconnue

Je dispose d'un vecteur d'une longueur de ~100k, avec des valeurs entre 0 et 1 représentant l'adéquation de l'habitat à des emplacements géographiques. Bien que certaines des valeurs soient très petites, beaucoup d'entre elles sont de 0,9 etc., de sorte que la somme est beaucoup plus grande que 1.

Je voudrais générer 1000 échantillons aléatoires de lieux, chaque échantillon ayant une longueur de 6 (sans remplacement), la probabilité qu'un lieu soit choisi étant pondérée par la valeur du vecteur à cet endroit.

Données factices ci-dessous. Des idées ?

mylocs = letters[1:10]
myprobs = c(0.1,NA,0.01,0.2,0.6,NA,0.001,0.03,0.9,NA)
mydata = data.frame(mylocs,myprobs)

4voto

csgillespie Points 20349

Je suis un peu confus avec votre question, alors voici deux réponses possibles.

Si vous voulez échantillonner 1000 groupes de six valeurs, où les groupes peuvent partager des valeurs, alors :

locs = letters[1:15]
probs = c(0.1,NA,0.01,0.2,0.6,NA,0.001,0.03,0.9,NA, 0.1, 0.1, 0.1, 0.1, 0.1)
mydata = data.frame(locs,probs)

d = na.omit(mydata)
replicate(1000, sample(d$locs, size=6, prob=d$probs, replace=F))

Si les groupes ne doivent pas partager des valeurs, alors faites-le :

## Change the "2" to 1000 in the real data set
s = sample(d$locs, size=6*2, prob=d$probs, replace=F)
matrix(s, ncol=6)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X