如何在R中得到这个概率结果?

如何在R中得到这个概率结果?,r,probability,probability-theory,probability-distribution,R,Probability,Probability Theory,Probability Distribution,新到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,

新到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是否生病?

您可以编写一个帮助函数来执行“感染”。让我们假设1“有病”,0“没有病”


infect您可以编写一个helper函数来执行“infect”。让我们假设1“有病”,0“没有病”


infect您希望如何准确地模拟人与人之间的这些“接触”?你如何决定谁开始生病或不生病?你们的人口有多大?这种遭遇多久发生一次?这似乎不是一个非常直接的问题。对于您的模型,还需要做出许多其他决策。在尝试编写这样一个模型之前,您可能首先需要一些统计数据帮助。也许您可以先在统计问题的主题上询问建模建议。@MrFlick感谢您的提问;我没有很好地解释这个问题。只有3个人(A、B、C),按以下顺序只接触一次:(A-->B)(B-->C)。一开始,A是100%生病,而B和C是0%生病。每次一个人与另一个人接触,他们都有50%的机会生病。交叉验证是否也能在R方面提供帮助?还是仅仅是概率背后的数学?因为我知道它背后的数学原理,知道答案应该是什么,只是不知道如何用R.OK编码。这种进一步的描述帮助很大。最好将其编辑为原始问题。你想多久重复一次这个实验?我们的目标就是看看C患病的频率是多少?交叉验证对理论来说更为重要(尽管许多人确实使用R进行实际分析)。你的模型比我一开始想的要简单得多,所以可能没有必要。虽然这似乎是一个奇怪的选择模拟时,有一个相当明确的理论解决方案在这里。C个人将有25%的时间生病(1*.5*.5)@MrFlick感谢您对交叉验证的澄清。正如我所说,我理解它背后的简单数学,只是不知道如何用R来编码。我想模拟1000次。你到底想如何模拟人与人之间的“接触”?你如何决定谁开始生病或不生病?你们的人口有多大?这种遭遇多久发生一次?这似乎不是一个非常直接的问题。对于您的模型,还需要做出许多其他决策。在尝试编写这样一个模型之前,您可能首先需要一些统计数据帮助。也许您可以先在统计问题的主题上询问建模建议。@MrFlick感谢您的提问;我没有很好地解释这个问题。只有3个人(A、B、C),按以下顺序只接触一次:(A-->B)(B-->C)。一开始,A是100%生病,而B和C是0%生病。每次一个人与另一个人接触,他们都有50%的机会生病。交叉验证是否也能在R方面提供帮助?还是仅仅是概率背后的数学?因为我知道它背后的数学原理,知道答案应该是什么,只是不知道如何用R.OK编码。这种进一步的描述帮助很大。最好将其编辑为原始问题。你想多久重复一次这个实验?我们的目标就是看看C患病的频率是多少?交叉验证对理论来说更为重要(尽管许多人确实使用R进行实际分析)。你的模型比我一开始想的要简单得多,所以可能没有必要。虽然这似乎是一个奇怪的选择模拟时,有一个相当明确的理论解决方案在这里。C个人将有25%的时间生病(1*.5*.5)@MrFlick感谢您对交叉验证的澄清。正如我所说的,我理解它背后的简单数学,只是不知道如何用R编码。我想模拟1000次。谢谢。如果不是太多,你能解释一下你做了什么吗?如果你对我如何更好地学习R有任何建议,我将不胜感激
runif()
是在0和1之间统一绘制随机数的方法
as.numeric
仅将真/假值转换为数字1/0。“更好地学习”这个话题太大了,无法作为快速参考。编写模拟是一个比数据清理或标准统计分析更广泛的话题。我没有任何好的建议从哪里开始谢谢你。如果不是太多,你能解释一下你做了什么吗?如果你对我如何更好地学习R有任何建议,我将不胜感激
runif()
是在0和1之间统一绘制随机数的方法
as.numeric
仅将真/假值转换为数字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
}
A <- rep(1, 1000) # all sick
B <- infect(A)
C <- infect(B)