Anda bisa mengatasi masalah ini menggunakan sampel bootstrap. Sebagai contoh,
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)
Menjalankan kode ini misalnya, saya mendapatkan yang berikut ini
> estimate
[1] 0.7336328
> x
[1] 0.9890429
Jadi ketika A+B=0.9890429 kemudian E(A2|A+B=0.9890429)=0.7336328.
Sekarang untuk memvalidasi bahwa ini seharusnya jawabannya, mari kita jalankan kode whuber dalam solusinya. Jadi menjalankan kodenya dengan x<-0.9890429
hasil sebagai berikut:
> x <- 0.9890429
> y <- rnorm(1e5, 0, sqrt(2))
> a <- (x+y)/2
> hist(a^2)
>
> mean(a^2)
[1] 0.745045
Dan kedua solusi itu sangat dekat dan bertepatan satu sama lain. Namun, pendekatan saya terhadap masalah seharusnya memungkinkan Anda untuk memasukkan distribusi yang Anda inginkan daripada mengandalkan fakta bahwa data tersebut berasal dari distribusi Normal.
Solusi brute force kedua yang bergantung pada kenyataan bahwa ketika kepadatan relatif besar Anda dapat dengan mudah melakukan perhitungan brute-force adalah sebagai berikut
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
Menjalankan kode ini, kami memperoleh yang berikut ini
> estimate
[1] 2.757067
Dengan demikian menjalankan kode untuk A+B=3 hasil dalam E(A2|A+B=3)=2.757067 yang setuju dengan solusi yang sebenarnya.