library(discreteRV)
X <- RV(c(0, 9), c(1/2, 1/2))
Y <- RV(c(-3, 1), c(1/7, 6/7))
P1 <- P(X - Y > 0) # P1 = 0.57
P2 <- P( X - Y < 0 | X > 0) # P2 = 0
P3 <- P( X - Y < 0 | Y <= 0) # P3 = 3
P4 <- P(cos(pi * X * Y) < 1/2) # doesn't compile
P5 <- P(X ** 2 + 3 * Y >= 3) # P5 = 0.9285
P6 <- P(X - Y < X ** 2 + 3 * Y) # P6 = 0 当我使用包discreteRV的内置函数P时,我得到了一些非常奇怪的结果。我还尝试了一种不同的方法,并使用函数示例创建了一个离散的随机变量,结果看起来不错。
Xpmf <- c(1/2, 1/2)
X <- sample(c(0, 9), size = 10000, replace = TRUE, prob = Xpmf)
Ypmf <- c(1/7, 6/7)
Y <- sample(c(-3, 1), size = 10000, replace = TRUE, prob = Ypmf)
P1 <- mean(X - Y > 0) # P1 = 0.57
P2 <- mean( X - Y < 0 | X > 0) # P2 = 0.92
P3 <- mean( X - Y < 0 | Y <= 0) # P3 = 0.56
P4 <- mean(cos(pi * X * Y) < 1/2) # P4 = 0.50
P5 <- mean(X ** 2 + 3 * Y >= 3) # P5 = 0.92
P6 <- mean(X - Y < X ** 2 + 3 * Y) # P6 = 0.92 发布于 2020-04-28 09:58:29
当你这样做时:
Xpmf <- c(1/2, 1/2)
X <- sample(c(0, 9), size = 10000, replace = TRUE, prob = Xpmf)
Ypmf <- c(1/7, 6/7)
Y <- sample(c(-3, 1), size = 10000, replace = TRUE, prob = Ypmf)
P2 <- mean( X - Y < 0 | X > 0) # P2 = 0.92您不计算条件概率P( X - Y < 0 | X > 0)的近似。| in mean( X - Y < 0 | X > 0)是一个逻辑OR,这不是一个条件条件。在X-Y时,很容易检查X>0是否为<0,因此P2的正确值是0。
比3更高的概率听起来像个bug。或者您需要使用jointRV设置联合发行版,我不知道discreteRV默认是否独立。
编辑
默认情况下,包不具有独立性:
> P((X == 0) %AND% (Y == 1)) # should be 1/2*6/7 if independence
[1] 0所以你必须使用jointRV。
__
编辑
您可以按以下方式指定独立性:
XandY <- jointRV(
outcomes = list(c(0,9), c(-3,1)),
probs = c(t(outer(c(1/2,1/2), c(1/7,6/7))))
)
X <- marginal(XandY, 1)
Y <- marginal(XandY, 2)然而,这并不能解决这个问题:
P( X - Y < 0 | Y <= 0) # still 3这是因为X-Y和Y没有在相同的示例空间上定义。
您可以得到这个条件概率如下:
XminusY_and_Y <- joint(X-Y, Y)
XminusY <- marginal(XminusY_and_Y, 1)
Y <- marginal(XminusY_and_Y, 2)
P(XminusY < 0 | Y <= 0) # 0.3673469不是很方便..。
发布于 2020-04-28 09:43:34
看来,P()函数不能像您输入的那样接受or运算符(|)。您可以将概率相加,如这里的P3,它等于0.57116,非常接近您的模拟。
P(X - Y < 0) + P(Y <= 0)使用更多的模拟,我得到了0.5712,所以它似乎总结的概率,这种方式工作,如你所愿。
xS <- sample(c(0,9), size = 1000000, replace = TRUE, prob = c(0.5, 0.5))
yS <- sample(c(-3,1), size = 1000000, replace = TRUE, prob = c(1/7, 6/7))
mean(xS - yS < 0 | yS <= 0)发布于 2020-04-28 09:44:19
编辑:
正如第一个注释所指出的,第二个方法中的|是一个逻辑OR,因此它不计算条件概率。因此,我先前的回答是误导的,我认为@StephaneLaurent的回答提供了所有的线索。
我将介绍第二种方法的结果,这样您就可以看到发生了什么:
set.seed(1)
Xpmf <- c(1/2, 1/2)
X_sampled <- sample(c(0, 9), size = 10000, replace = TRUE, prob = Xpmf)
Ypmf <- c(1/7, 6/7)
Y_sampled <- sample(c(-3, 1), size = 10000, replace = TRUE, prob = Ypmf) 让我们看看这些向量:
head(X_sampled)
[1] 9 9 0 0 9 0
head(Y_sampled)
[1] 1 1 1 1 1 1现在您想要计算mean(X_sampled - Y_sampled < 0 | X_sampled > 0)。让我们分解这个:
head(X_sampled > 0)
[1] TRUE TRUE FALSE FALSE TRUE FALSEn # this simply reflects 9, 9, 0, 0...
head(X_sampled - Y_sampled < 0)
[1] FALSE FALSE TRUE TRUE FALSE TRUE # this reflects 9 - 1, 9 - 1, 0 - 1...因此,X_sampled - Y_sampled < 0 | X_sampled > 0将查看所有的位置,并确定X_sampled或X_sampled - Y_sampled < 0在该位置上是否为真。得到的TRUEs的比例为0.9292。
https://stackoverflow.com/questions/61476448
复制相似问题