计算 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)
我现在每天都在尝试查找以下内容:
从 A 到 B 的四种可能路线中每条路线的概率是多少?
我必须旅行超过半小时的概率是多少?
对于(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 工作得很快),可以使这些估计更加精确。
我有下图:
我需要从 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)
我现在每天都在尝试查找以下内容:
从 A 到 B 的四种可能路线中每条路线的概率是多少?
我必须旅行超过半小时的概率是多少?
对于(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 工作得很快),可以使这些估计更加精确。