Сначала я переформатировал функции и дал им отдельные имена.
fX <- function(x) {
0.5 * x # Marginal P(X)
}
# Find P(B) = P(Y<1)
fY <- function(y) {
0.5 * y # Marginal P(Y)
}
fXY <- function(x, y) {
1 / length(x) * sum(0.25 * x * y) # joint X,Y
}
Самый простой способ сделать несколько запусков - это обернуть код MC в цикл for и сохранить каждый расчет в массиве.Затем, в конце, возьмите среднее из сохраненных значений.
Итак, для P [A] у вас есть:
n <- 10000
probA.MC <- numeric(n) # create the array
for (i in 1:10000) {
x<-runif(n, 1,2)
probA.MC[i] <- ((2-1) / n) * sum(0.5 * x)
}
cat('\n Monte Carlo Pr[1 < X] =',mean(probA.MC),'\n')
(я предполагаю, что probE.MC должен был быть probA.MC.) Результат был Monte Carlo Pr[1 < X] = 0.7500088
.Код аналогичен для P [B] и этот результат равен Monte Carlo Pr[Y < 1] = 0.2499819
.
. Для совместной вероятности мы используем fXY.
n <- 10000
probMC <- numeric(n)
for (i in 1:10000) {
x <- runif(n, 1, 2)
y <- runif(n, 0, 1)
probMC[i] <- ((a12-a11) * (a22-a21)) * fXY(x, y)
}
cat('\n Monte Carlo Pr[X,Y] =',mean(probMC),'\n')
Этот результат был Monte Carlo Pr[X,Y] = 0.1882728
.
Последнее вычисление, которое вы сделали, должно выглядеть следующим образом (обратите внимание на значение probB $ из результата интеграции):
# P[A|B] = p[A intersect B]/ P(B)
probAB <- mean(probMC) / probB$value
print(probAB)
Это вычисление дало результат 0.7530913
.