计算 R 中模拟随机变量的概率

Calculating probabilities of simulated random variables in R

我有下图:

我需要从 A 到 B。我还假设我每天都从 A 走最快的路线

节点之间的旅行时间(以小时为单位)呈指数分布。我在 R 中用相关的 lambda 值模拟了它们,如下所示:

AtoX <- rexp(1000, 4)
AtoY <- rexp(1000, 2.5)
XtoY <- rexp(1000, 10)
YtoX <- rexp(1000, 10) 
XtoB <- rexp(1000, 3)
YtoB <- rexp(1000, 5)

我计算了R中每天的平均旅行时间如下:

AXB <- AtoX + XtoB
AYB <- AtoY + YtoB
AXYB <- AtoX + XtoY + YtoB
AYXB <- AtoY + YtoX + XtoB 

TravelTimes <- pmin(AXB, AYB, AXYB, AYXB)
averageTravelTime <- mean(TravelTimes)

我现在每天都在尝试查找以下内容:

  1. 从 A 到 B 的四种可能路线中每条路线的概率是多少?

  2. 我必须旅行超过半小时的概率是多少?

对于(1),我理解我需要为每条路线取累积分布函数(CDF) P(x <= X)。

对于(2),我理解我需要取累积分布函数(CDF) P(0.5 => X),其中0.5表示半小时。

我才刚刚开始学习 R,我不确定如何去做。

阅读文档,似乎我可能需要执行以下操作来计算 CDF:

pexp()

1 - pexp()

我该怎么做?

设R1、R2、R3、R4依次为随机变量,对应4条路线的总时间。然后,作为独立指数随机变量的总和,它们中的每一个都遵循 Erlang 或 Gamma 分布(参见 here)。

为了回答 1,您想要找到 i=1,2,3,4 的 P(min{R1, R2, R3, R4} = R_i)。虽然独立指数随机变量的最小值是易于处理的(参见 here),但据我所知,通常 Erlang/Gamma 分布并非如此。因此,我认为您需要使用模拟以数字方式回答这个问题。

同样适用于要求求P(min{R1, R2, R3, R4} >= 1/2)的第二题。

因此,我们有

table(apply(cbind(AXB, AYB, AXYB, AYXB), 1, which.min)) / 1000 
#     1     2     3     4 
# 0.312 0.348 0.264 0.076 

mean(TravelTimes >= 0.5)
# [1] 0.145

作为我们的估计。通过将 1000 增加到某个更高的数字(例如,1e6 工作得很快),可以使这些估计更加精确。