如何在R中获得此概率结果?

问题描述 投票:0回答:1

R的新手。不确定如何解决此问题。本质上,我想创建一个蒙特卡洛模拟。但是,这应该是这样的:只有3个人(A,B,C),并且只能按以下顺序联系一次:(A-> B)(B-> C)。首先,A生病100%,而B和C生病​​0%。每当一个人与另一个人接触时,他们就有50%的机会生病,我该如何在R中复制它?我了解这背后的数学原理,但不确定如何编写。这是我到目前为止所拥有的:

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

我知道输出只会给我B是否生病的结果。我将如何继续查看C是否生病?

r probability probability-theory probability-distribution
1个回答
0
投票

您可以编写一个辅助函数来执行“感染”。假设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
}

此函数查找所有1的位置,然后针对每个这些人投掷硬币以查看下一个人将生病(不更改任何非生病值)

然后可以与1000个人一起测试

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

这将抽取1000A。我们经过两个传输步骤,一次完成所有1000个样本。如果运行mean(C),则应该得到接近0.25的值。

© www.soinside.com 2019 - 2024. All rights reserved.