Моделирование методом Монте-Карло для шаблона

#r #montecarlo

#r #Монтекарло

Вопрос:

Я пишу моделирование методом Монте-Карло, чтобы проверить, сколько раз y не было непосредственно рядом с другим y. Я вызвал в воображении вектор из 40 x и 10 y, расположенных в случайном положении в векторе. Моя цель — вычислить вероятности отсутствия каких-либо смежных y в векторе. Вот что я попробовал:

 nrep = 100000
count = 0
for (i in 1:nrep) {
  x = sample(c(rep('x', 40), c(rep('y', 10))))
  if (x[i]!=x[i 1] amp;amp; x[i 1]!=x[i 2]) count = count   1
}
print(count/nrep)
  

Результатом является очень небольшое число, которое, похоже, не имеет смысла для меня.

Ответ №1:

if Часть неверна. Мы можем использовать head / tail для проверки наличия последовательных элементов и посмотреть, есть ли any два последовательных 'y' s в одной итерации.

 nrep = 100000
count = 0
set.seed(2020)

for (i in 1:nrep) {
  x = sample(rep(c('x', 'y'), c(40, 10)))
  if(any(head(x, -1) == 'y' amp; tail(x, -1) == 'y')) count = count   1
}

count/nrep
#[1] 0.891
  

Комментарии:

1. Привет, @Ronak, я не уверен, что функции head и tail работают здесь так, как задумано; исправьте меня по мере необходимости. Я думаю, что способ, которым вы написали этот код, проверяет групповой шаблон на соответствие другой группе (т. Е. Начало вектора против конец). Я хочу проверить наличие любых несмежных y и увеличить количество на 1.

2. Нет .. это не проверка начала и конца. Он проверяет наличие последовательных элементов, значение count которых будет увеличиваться, если два y будут где-либо вместе. Попробуйте выполнить это по отдельности без цикла. x = sample(rep(c('x', 'y'), c(40, 10))) Проверьте x , а затем запустите any(head(x, -1) == 'y' amp; tail(x, -1) == 'y') . Сравните выходные head(1:10, -1) данные vs tail(1:10, -1)

3. @Yoko КСТАТИ, приведенное выше дает вероятность возникновения двух соседних y. Если вы хотите противоположного, вы можете изменить условие в if , просто сделайте 1 - count/nrep выше.

4. да, я понимаю… просто пытаюсь понять, что происходит на этапах head и tail

5. No..in количество итераций будет увеличиваться только на 1, если условие будет выполнено. Значение, даже если у вас есть yyyyxyyyyxy количество, будет увеличено только на 1.