Число из выборки, полученное из распределения Пуассона с верхними/нижними границами

Работая в R, мне нужно создать вектор длины n со значениями, случайно взятыми из распределения Пуассона с лямбда = 1, но с нижней границей 2 и верхней границей 6 (т.е. все числа будут либо 2,3, 4,5 или 6).

Я не уверен, как это сделать. Я попытался создать цикл for, который заменял бы любые значения за пределами этого диапазона значениями внутри диапазона:

seed(123)
n<-25 #example length
example<-rpois(n,1)
test<-example #redundant - only duplicating to compare with original *example* values
 for (i in 1:length(n)){
   if (test[i]<2||test[i]>6){
     test[i]<-rpois(1,1)
   }
 }

Но это, похоже, не сработало (все еще получаю 0, 1 и т. д. в test). Благодарим за любую идею!


person jpsmith    schedule 16.12.2019    source источник
comment
Чем вы хотите заменить те значения, которые находятся вне диапазона? which(example < 2 | example > 6) дает все индексы для замены.   -  person Ronak Shah    schedule 16.12.2019
comment
Распределение Пуассона имеет бесконечную поддержку для всех натуральных чисел. Так что с точки зрения статистики ваш вопрос не совсем ясен. При наложении ограничений на X ~ Pois(lambda) результирующая переменная X не будет иметь распределение Пуассона.   -  person Maurits Evers    schedule 16.12.2019
comment
Спасибо - чтобы уточнить, 1) я хочу заменить позиции вне диапазона случайно нарисованными значениями внутри диапазона (2-6). 2) Мне не нужно, чтобы x было распределено Пуассона. В этом конкретном случае мне просто нужно, чтобы он сильно смещался в сторону 2 и имел ненулевую вероятность для всех значений 2-6.   -  person jpsmith    schedule 16.12.2019
comment
@Джпсмит; как насчет взвешивания по расст. вероятности Пуассона. ограничено вашей определенной поддержкой, т.е. p = dpois(2:6, 1); sample(2:6, n, replace=TRUE, prob = p/sum(p))   -  person user20650    schedule 16.12.2019


Ответы (1)


Вот один из способов сгенерировать n чисел с распределением Пуассона и заменить все числа, выходящие за пределы диапазона, случайным числом внутри диапазона.

n<-25 #example length
example<-rpois(n,1)
inds <- example < 2 | example > 6
example[inds] <- sample(2:6, sum(inds), replace = TRUE)
person Ronak Shah    schedule 16.12.2019