Sie können dieses Problem mithilfe von Bootstrap-Beispielen lösen. Zum Beispiel,
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)
Wenn ich diesen Code zum Beispiel ausführe, erhalte ich Folgendes
> estimate
[1] 0.7336328
> x
[1] 0.9890429
Wenn also dann ist .A + B = 0,9890429E.( A.2| A+B=0,9890429)=0,7336328
Um zu bestätigen, dass dies die Antwort sein sollte, lassen Sie uns den Code von whuber in seiner Lösung ausführen. Das Ausführen seines Codes x<-0.9890429
führt also zu folgenden Ergebnissen:
> x <- 0.9890429
> y <- rnorm(1e5, 0, sqrt(2))
> a <- (x+y)/2
> hist(a^2)
>
> mean(a^2)
[1] 0.745045
Die beiden Lösungen liegen also sehr nahe beieinander und stimmen überein. Meine Herangehensweise an das Problem sollte es Ihnen jedoch tatsächlich ermöglichen, eine beliebige Verteilung einzugeben, anstatt sich auf die Tatsache zu verlassen, dass die Daten aus Normalverteilungen stammen.
Eine zweite Brute-Force-Lösung, die auf der Tatsache beruht, dass Sie bei einer relativ großen Dichte problemlos eine Brute-Force-Berechnung durchführen können, ist die folgende
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
Wenn wir diesen Code ausführen, erhalten wir Folgendes
> estimate
[1] 2.757067
Das Ausführen des Codes für führt also zu was mit der wahren Lösung übereinstimmt.A + B = 3E.( A.2| A+B=3)=2,757067