WedX - журнал о программировании и компьютерных науках

Генерация случайных чисел с помощью rbinom, но исключение нулей из диапазона

Мне нужно сгенерировать случайные числа с помощью rbinom, но мне нужно исключить 0 из диапазона.

Как мне это сделать?

Я хотел бы что-то похожее на:

k <- seq(1, 6, by = 1)

binom_pdf = dbinom(k, 322, 0.1, log = FALSE)

но мне нужно получить весь относительный набор данных, потому что если я сделаю следующее:

binom_ran = rbinom(100, 322, 0.1)

Я получаю значения от 0 до 100.

Есть ли способ обойти это?

Спасибо

10.05.2017

  • Вероятность получения 0 будет зависеть от ваших второго и третьего параметров. Вам нужны фиксированные параметры для моделирования? 10.05.2017
  • Да, к сожалению... 10.05.2017
  • дело в том, что если бы мы знали только количество наблюдений, используемых для генерации binom_pdf, мы могли бы просто умножить на него значения плотности. 10.05.2017
  • Вы могли бы сделать удар и пропустить подход. Просто используйте rbinom, но выбросьте нули. 10.05.2017
  • неееет! это разрушит форму распределения! 10.05.2017
  • Подход «попадание и промах» гарантирует правильное условное распределение. Ваше требование является изменением формы распределения. В зависимости от того, что вы пытаетесь сделать, вы можете просто добавить 1 (к одному с n = 99), чтобы сдвинуть его. 10.05.2017

Ответы:


1

Предположим, что у нас есть фиксированные параметры:

  • n: количество сгенерированных значений.
  • s: размер эксперимента.
  • p: вероятность успеха

     # Generate initial values
       U<-rbinom(n,s,p)
       # Number and ubication of zero values
         k<-sum(U==0)
         which.k<-which(U==0)
    
     # While there is still a zero, . . . generate new numbers
       while(k!=0){
         U[which.k]<-rbinom(k,s,p)
           k<-sum(U==0)
           which.k<-which(U==0)
         # Print how many zeroes are still there
           print(k)
     }
    
    # Print U (without zeroes)
      U
    
10.05.2017

2

В дополнение к подходу «попадание и промах», если вы хотите сделать выборку из условного распределения бинома, учитывая, что число успехов равно как минимум одному, вы можете вычислить условное распределение, а затем напрямую сделать выборку из него.

Легко понять, что если X является биномом с параметрами p и n, то

P(X = x | X > 0) = P(X = x)/(1-p)

Следовательно, будет работать следующая функция:

rcond.binom <- function(k,n,p){
  probs <- dbinom(1:n,n,p)/(1-p)
  sample(1:n,k,replace = TRUE,prob = probs)
}

Если вы собираетесь вызывать вышеупомянутую функцию много раз с одними и теми же n и p, вы можете просто предварительно вычислить вектор probs и просто использовать последнюю строку функции всякий раз, когда вам это нужно.

Я не проверял его, но подозреваю, что подход на основе проб и ошибок предпочтительнее, когда k мало, p не слишком близко к 0 и n велико, но для больших k больше, p ближе к 0 и n меньше. то вышеизложенное может быть предпочтительнее.

10.05.2017
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]