使用discreteRV包中的概率函数时会产生奇怪的结果 库(discreteRV) X

使用discreteRV包中的概率函数时会产生奇怪的结果 库(discreteRV) X,r,probability,R,Probability,似乎p()函数不能像您输入的那样接受or运算符(|)。你可以把概率相加,比如这里的P3等于0.57116,非常接近你的模拟 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 <

似乎
p()
函数不能像您输入的那样接受or运算符(
|
)。你可以把概率相加,比如这里的P3等于0.57116,非常接近你的模拟

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 

P(X-Y<0)+P(Y

似乎

P()
函数不能像您输入的那样接受or运算符(
|
),您可以将概率相加,就像这里的P3等于0.57116,非常接近您的模拟

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 
P(X-Y<0)+P(Y

编辑:

正如第一条评论所指出的,第二种方法中的
|
是一个逻辑OR,因此它不计算条件概率。因此,我之前的答案是误导性的,我认为@StephaneLaurent答案提供了所有线索

我将介绍第二种方法的结果,以便您了解发生了什么:

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)
现在,您需要计算
平均值(X_sampled-Y_sampled<0 | X_sampled>0)
。让我们对其进行分解:

head(X_sampled)
[1] 9 9 0 0 9 0
head(Y_sampled)
[1] 1 1 1 1 1 1
头部(X_采样>0)
[1] 真-假-真-假-这只是反映了9,9,0,0。。。
头部(X_采样-Y_采样<0)
[1] 假假真假假真#这反映了9-1、9-1、0-1。。。
因此
X_sampled-Y_sampled<0 | X_sampled>0
将查看所有位置,并确定
X_sampled
X_sampled-Y_sampled<0
在该位置是否为真。得到的
true
s的比例为0.9292。

编辑:

正如第一条评论所指出的,第二种方法中的
|
是一个逻辑OR,因此它不计算条件概率。因此,我之前的答案是误导性的,我认为@StephaneLaurent答案提供了所有线索

我将介绍第二种方法的结果,以便您了解发生了什么:

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)
现在,您需要计算
平均值(X_sampled-Y_sampled<0 | X_sampled>0)
。让我们对其进行分解:

head(X_sampled)
[1] 9 9 0 0 9 0
head(Y_sampled)
[1] 1 1 1 1 1 1
头部(X_采样>0)
[1] 真-假-真-假-这只是反映了9,9,0,0。。。
头部(X_采样-Y_采样<0)
[1] 假假真假假真#这反映了9-1、9-1、0-1。。。
因此
X_sampled-Y_sampled<0 | X_sampled>0
将查看所有位置,并确定
X_sampled
X_sampled-Y_sampled<0
在该位置是否为真。得到的
true
s的比例为0.9292。

当您这样做时:

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...
因此,您必须使用
jointRV

__

编辑 您可以按如下方式指定独立性:

> P((X == 0) %AND% (Y == 1)) # should be 1/2*6/7 if independence
[1] 0
P( X - Y < 0 | Y <= 0) # still 3
不太方便…

当您执行以下操作时:

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...
因此,您必须使用
jointRV

__

编辑 您可以按如下方式指定独立性:

> P((X == 0) %AND% (Y == 1)) # should be 1/2*6/7 if independence
[1] 0
P( X - Y < 0 | Y <= 0) # still 3

不太方便…

你说的“怪异”是什么意思?例如,第三个概率等于3,任何概率都不应该大于1。你说的“怪异”是什么意思?例如,第三个概率等于3,任何概率都不应该大于1。
中的
平均值(X|u采样-Y|u采样<0 | X|u采样>0)
是一个逻辑OR,这不是一个条件。一个人有
P2=0
。感谢你指出我的错误。编辑我上面的回答。建议接受@Stéphanelant的答案,而不是
平均值中的
(X|u采样-Y|u采样<0 | X|u采样>0)
是一个逻辑OR,这不是一个条件。一个人有
P2=0
。感谢你指出我的错误。编辑我上面的回答。建议接受@Stéphanelant的答案,而不是我的答案