【发布时间】:2018-02-11 14:29:04
【问题描述】:
R 的新手...这是著名的(也许是?)公共汽车的概率模拟,该公共汽车从空车开始,在每个停靠站接 0、1 或 2 名乘客,概率分别为 0.5、0.4 和 0.2。同样在每一站,每位乘客下车的概率为0.2
我可以看到一开始它跳过了一部分代码,因为变量“乘客”从 0 开始。但我不明白的是 runif(1) 代码 - 它在这里做什么?还有另一个问题 - 我如何跟踪向量,我想看看它是如何将信息存储在表格中的(R 新手所以不知道)。
(这段代码模拟了10站后空车的概率)
nreps <- 10000
nstops <- 10
count <- 0
for (i in 1:nreps){
passengers <- 0
for (j in 1:nstops){
if(passengers > 0)
for (k in 1:passengers)
if(runif(1) < 0.2)
passengers <- passengers - 1
newpass <- sample(0:2, 1, prob=c(0.5, 0.4, 0.1))
passengers <- passengers + newpass
}
if (passengers == 0) count <- count + 1
}
print(count/nreps)
【问题讨论】:
-
函数调用runif(1)从单位区间[0,1]上的均匀分布中抽取一个随机值。这个随机值小于 0.2 的概率正好是 0.2。因此,每站一名乘客下车的概率为 0.2。
-
哦,这很有道理。你对我的第二个问题有什么建议吗?我如何访问所有矢量数据所在的表?我正在使用 R-Studio。
-
我也不确定你指的是什么。这段代码中实际上没有任何表格,只有乍一看都是整数的变量。
-
那么当“nsteps”为10、100、1000时,不应该生成10、100、1000行所有变量的值吗?我想查看那些以了解它是如何工作的? (如果这有意义吗?)
-
在这种情况下,您可以添加一些打印语句(请参阅例如
sprintf的文档)并可能在 for 循环的每次迭代后停止执行您的脚本(请参阅 stackoverflow.com/questions/15272916/… 了解如何这可以做到)。
标签: r simulation probability