Как получить этот вероятностный исход в R? - PullRequest
0 голосов
/ 14 февраля 2020

Новичок в R. Не уверен, как go об этой проблеме. По сути, я хочу создать симуляцию Монте-Карло. Тем не менее, это то, как это должно быть go: есть только 3 человека (A, B, C) и вступают в контакт только один раз в следующем порядке: (A -> B) (B -> C ). Начнем с того, что А заболел на 100%, а В и C заболели на 0%. Каждый раз, когда человек вступает в контакт с другим, вероятность заболеть у него составляет 50%. Как бы я go повторил это в R? Я понимаю математику, стоящую за этим, но не знаю, как ее кодировать. Это то, что я имею до сих пор:

a='positive'
corona = c('positive','negative')
sample(x = corona, size = 1, replace = TRUE)

Я знаю, что результат даст мне только результаты того, болен Б или нет. Как бы я продолжал видеть, если C болен?

1 Ответ

2 голосов
/ 14 февраля 2020

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

infect <- function(x, rate=.5) {
   current_sick <- x==1
   new_sick <- runif(sum(current_sick)) < rate
   x[current_sick] <- as.numeric(new_sick) # turn TRUE/FALSE to 1/0
   x
}

Эта функция ищет все единицы, а затем для каждого из них бросает монету, чтобы увидеть следующего человека. будет болен (не изменяя ни одно из небезопасных значений)

Затем, чтобы протестировать с 1000 человек, вы можете сделать

A <- rep(1, 1000) # all sick
B <- infect(A)
C <- infect(B)

Это др aws 1000 А. И мы go хотя два шага передачи, делая все 1000 выборок одновременно. Если вы запустите mean(C), вы должны получить что-то близкое к 0,25.

...