Выборка из неизвестного распределения вероятностей - PullRequest
3 голосов
/ 07 мая 2011

У меня есть вектор длиной ~ 100 тыс., Со значениями от 0 до 1, представляющими пригодность среды обитания в географических точках. Хотя некоторые значения очень малы, многие из них равны 0,9 и т. Д., Поэтому сумма намного больше единицы.

Я хотел бы сгенерировать 1000 случайных выборок местоположений, каждая из которых имеет длину 6 (без замены), с вероятностью, что выбранное местоположение будет взвешено по значению вектора в этом местоположении.

Фиктивные данные ниже. Есть идеи?

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)

1 Ответ

4 голосов
/ 07 мая 2011

Я немного запутался с вашим вопросом, поэтому здесь есть два возможных ответа.

Если вы хотите выбрать 1000 групп из шести значений, где группы могут иметь общие значения, тогда:

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

Если группы не должны иметь общие значения, просто сделайте:

## 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)
...