Использование образца (..., replace = FALSE) в аккуратном моделировании Монте-Карло с использованием скрещивания - PullRequest
0 голосов
/ 11 января 2019

Я работаю через Digital Dice Пола Нахина , чтобы научить себя симуляциям Монте-Карло. Я преобразую код Matlab в книге в код R на первом проходе, а затем заменяю циклы for на аккуратные версии на втором проходе.

Редактировать: вот что я ищу модель:

  • Представьте, что вы сталкиваетесь с поп-викториной, списком из 24 президентов 19-го века и еще одним списком их членов в должности, но в замешательстве
  • Цель состоит в том, чтобы сопоставить президента с термином
  • Вы получаете одно предположение каждый раз
  • В среднем, сколько вы думаете, правильно?

Вот код R, использующий циклы for:

m <- 24
total_correct <- 0
n <- 10000

for (i in 1:n) {
  correct <- 0
  term <- sample(m, replace = TRUE)
  for (j in 1:m) {
    if (term[j] == j) {
      correct <- correct + 1
    }
  }
  total_correct = total_correct + correct
}
total_correct <- total_correct / n
print(total_correct)

Это работает (но я признаю, что дает неправильный ответ). Далее нужно привести в порядок это - это моя попытка:

crossing(trials = 1:10, 
         m = 1:24) %>% 
  mutate(guess = sample.int(24, n(), replace = F), result = m == guess) %>% 
  summarise(score = sum(result) / n())

Однако я получаю сообщение об ошибке, читающее Error in sample.int(x, size, replace, prob): cannot take a sample larger than the population when 'replace = FALSE'.

Я понимаю, что происходит: команда n() в операторе mutate() возвращает 240. Выборка 240 из совокупности 24 с replace = FALSE не имеет смысла, поэтому появляется сообщение об ошибке.

Как получить оператор mutuate() для получения размера 24 на каждую итерацию (или пробную версию)?

...