Puede resolver este problema utilizando muestras de bootstrap. Por ejemplo,
n <- 1000000
A <- rnorm(n)
B <- rnorm(n)
AB <- cbind(A,B)
boots <- 100
bootstrap_data <- matrix(NA,nrow=boots*n,ncol=2)
for(i in 1:boots){
index <- sample(1:n,n,replace=TRUE)
bootstrap_data[(i*n-n+1):(i*n),] <- cbind(A[index],B[index])
}
sum_AB <- bootstrap_data[,1] + bootstrap_data[,2]
x <- sum_AB[sample(1:n,1)]
idx <- which(sum_AB == x)
estimate <- mean(bootstrap_data[idx,1]^2)
Al ejecutar este código, por ejemplo, obtengo lo siguiente
> estimate
[1] 0.7336328
> x
[1] 0.9890429
Así que cuando A + B = 0.9890429 entonces mi(UNA2El | A+B=0.9890429)=0.7336328.
Ahora para validar que esta debería ser la respuesta, ejecutemos el código de Whuber en su solución. Así que ejecuta su código con x<-0.9890429
resultados en lo siguiente:
> x <- 0.9890429
> y <- rnorm(1e5, 0, sqrt(2))
> a <- (x+y)/2
> hist(a^2)
>
> mean(a^2)
[1] 0.745045
Y así, las dos soluciones son muy cercanas y coinciden entre sí. Sin embargo, mi enfoque del problema debería permitirle ingresar cualquier distribución que desee en lugar de confiar en el hecho de que los datos provienen de distribuciones normales.
Una segunda solución más de fuerza bruta que se basa en el hecho de que cuando la densidad es relativamente grande, puede realizar fácilmente un cálculo de fuerza bruta es la siguiente
n <- 1000000
x <- 3 #The desired sum to condition on
A <- rnorm(n)
B <- rnorm(n)
sum_AB <- A+B
epsilon <- .01
idx <- which(sum_AB > x-epsilon & sum_AB < x+epsilon)
estimate <- mean(A[idx]^2)
estimate
Al ejecutar este código obtenemos lo siguiente
> estimate
[1] 2.757067
Ejecutando así el código para A + B = 3 resultados en mi(UNA2El | A+B=3)=2.757067 que concuerda con la verdadera solución.