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 

Cuando uso la función integrada P del paquete discreteRV, obtengo resultados realmente extraños. También probé un enfoque diferente y usé la muestra de función para crear una variable aleatoria discreta y los resultados parecen estar bien

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 
1
Diana 28 abr. 2020 a las 12:03

3 respuestas

La mejor respuesta

Cuando lo haga:

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

no calcula una aproximación de la probabilidad condicional P( X - Y < 0 | X > 0). El | en mean( X - Y < 0 | X > 0) es un OR lógico, esto no es un condicionamiento. Es fácil comprobar que X-Y nunca es <0 cuando X>0, por lo que el valor correcto de P2 es 0.

La probabilidad mayor que 3 suena como un error. O tal vez necesite establecer la distribución conjunta con jointRV, no sé si discreteRV asume la independencia de forma predeterminada.


EDITAR

El paquete no asume independencia por defecto:

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

Entonces debes usar jointRV.

__

EDITAR

Puede especificar la independencia de la siguiente manera:

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)

Sin embargo, eso no resuelve el problema:

P( X - Y < 0 | Y <= 0) # still 3

Esto se debe a que X-Y y Y no están definidos en el mismo espacio muestral.

Puede obtener esta probabilidad condicional de la siguiente manera:

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

No es muy conveniente ...

2
Stéphane Laurent 28 abr. 2020 a las 10:32

Editar:

Como se señaló en el primer comentario, el | en su segundo enfoque es un OR lógico, por lo que no calcula las probabilidades condicionales. Por lo tanto, mi respuesta anterior fue engañosa, y creo que la respuesta de @StephaneLaurent proporciona todas las pistas.

Revisaré los resultados de su segundo enfoque para que vea lo que sucede:

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) 

Veamos esos vectores:

head(X_sampled)
[1] 9 9 0 0 9 0
head(Y_sampled)
[1] 1 1 1 1 1 1

Ahora quieres calcular mean(X_sampled - Y_sampled < 0 | X_sampled > 0). Descompongamos esto:

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...

Entonces X_sampled - Y_sampled < 0 | X_sampled > 0 observará todas las posiciones y determinará si X_sampled OR X_sampled - Y_sampled < 0 es verdadero en esa posición. La proporción de los TRUE s resultantes es 0.9292.

1
broti 28 abr. 2020 a las 10:10

Parece que la función P() no puede tomar el operador o (|) como ha introducido. En su lugar, podría sumar las probabilidades, como aquí con P3, que es igual a 0.57116, muy cerca de su simulación.

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

Usando más simulaciones obtuve 0.5712, por lo que parece que las probabilidades sumadas de esta manera funcionan como quisieras.

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)
1
rg255 28 abr. 2020 a las 10:04