Simulación que involucra condicionamiento sobre la suma de variables aleatorias

8

Estaba leyendo esta pregunta y pensé en simular la cantidad requerida. El problema es el siguiente: si y son estándar normal, ¿qué es ? Entonces quiero simular . (para un valor elegido de )ABE(A2|A+B)E(A2|A+B)A+B

Intenté el siguiente código para lograr esto:

n <- 1000000
x <- 1 # the sum of A and B

A <- rnorm(n)
B <- rnorm(n)

sum_AB = A+B

estimate <- 1/sum(sum_AB==x) * sum( (A[sum_AB==x])^2 )

El problema es que casi siempre no hay ningún valor en el sum_ABque coincidan x(entre simulaciones). Si elijo algún elemento sum_AB, generalmente es la única instancia de su valor en el vector.

En general, ¿cómo se puede abordar este problema y realizar una simulación precisa para encontrar una expectativa de la forma dada? ( y no necesariamente se distribuyen normalmente, o de la misma distribución).AB

Comp_Warrior
fuente
1
Su edición reciente cambia sustancialmente la pregunta, como lo indica nuestro intercambio de comentarios. Se hace más difícil responder con la mayor generalidad que supones ahora. Por ejemplo, existen técnicas especiales, y más bien involucradas, solo para responder cuando el valor de es raro (en una de las colas). A+B
whuber
@whuber ¿No serían todos los valores relativamente raros cuando se trata de dos variables aleatorias continuas?
Comp_Warrior
1
Sí, pero las bandas estrechas de valores, que generalmente son suficientes para tales simulaciones, nunca funcionarían en las colas (ni en ninguna otra región donde el PDF se vuelva muy pequeño), mientras que cuando la densidad es relativamente grande, puede realizar fácilmente un Cálculo de la fuerza bruta que garantiza la producción de un número decente de datos con lo suficientemente cerca de su valor deseado para permitir sacar algunas conclusiones de la simulación. A+B
whuber
@whuber veo - ¿podría dar alguna indicación en su respuesta de las técnicas especiales que menciona? Disculpas por no indicar lo que me interesaba a continuación en los comentarios.
Comp_Warrior
Comp_Warrior Estoy agregando una segunda solución que creo que es a lo que @whuber alude.
Dan

Respuestas:

5

Mi comentario en el hilo de referencia sugiere un enfoque eficiente: porque e son conjuntamente normales con cero covarianza, son independientes, por lo que la simulación solo necesita generar (que tiene una media deX=A+BY=ABY0 y varianza2) y construir A=(X+Y)/2. En este ejemplo, la distribución deA2|(A+B=3) se examina mediante el histograma de 105 valores simulados

x <- 3
y <- rnorm(1e5, 0, sqrt(2))
a <- (x+y)/2
hist(a^2)

La expectativa se puede estimar como

mean(a^2)

La respuesta debe estar cerca de 11/4=2.75.

whuber
fuente
1
Gracias, esto tiene sentido. Sin embargo, ¿tengo razón al comprender que esta simplificación solo funcionará si ambas variables aleatorias en cuestión son normales? ¿Y si tuviera un caso dondeA y Beran de otra distribución (y posiblemente separados entre sí)?
Comp_Warrior
1
Su comprensión es correcta. Esta es una razón por la que las variables normales son tan populares, tanto en teoría como en modelos de computadora. Sin embargo, la idea básica de buscar una forma de transformar las variables en conjuntos de variables independientes (o fácilmente relacionadas) se trasladará a un entorno más general.
whuber
2

Una forma genérica de resolver este problema es considerar el cambio de variables de (A,B) a (A,A+B=S). El jacobiano de esta transformación es igual a uno (1), la densidad de(A,S) es

fA,S(a,s)=fA(a)fB(sa)
Por lo tanto, la densidad de A condicional en S=s es
fA|S(a|s)fA(a)fB(sa)
siendo el término de proporcionalidad el inverso de la densidad marginal de S, fS(s)1. Ya quesi=S-UNA, una transformación determinista, esta es también la densidad conjunta de (UNA,si) dado S
FUNA,siEl |S(una,siEl |s)FUNA(una)Fsi(s-una)youna+si=s
La generación de una realización a partir de este objetivo se puede hacer directamente si la forma es lo suficientemente simple, o por aceptar-rechazar, Metropolis-Hastings, muestreo de corte o cualquier otro método de simulación estándar.
Xi'an
fuente
1

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 UNA+si=0.9890429 entonces mi(UNA2El |UNA+si=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.9890429resultados 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 UNA+si=3 resultados en mi(UNA2El |UNA+si=3)=2.757067 que concuerda con la verdadera solución.

Dan
fuente
1
Debo estar perdiendo algo: la pregunta le pide al usuario que especifique el valor deUNA+si. ¿Dónde se hace eso en tu código? ¿Cómo se vería su código en el caso?UNA+si necesitaba ser configurado a 3, ¿por ejemplo?
whuber
@whuber tienes toda la razón. Solo puedo hacerlo por sumas que sé que aparecerán.
Dan
0

me parece que la pregunta se convierte en esto:

  1. cómo simular (X, Y) condicional en X + Y = k y luego
  2. use monte carlo para estimar EU (X, Y) para alguna función U (x, y)

Comencemos por revisar el muestreo de importancia :

miV(Z1)=V(z)F1(z)=V(z)F1(z)F2(z)F2(z)=miV(Z2)F1(Z2)F2(Z2)

donde las primeras expectativas son con respecto a la variable aleatoria Z1 con densidad F1(z) y el segundo es wrt Z2 con densidad F2(z).

Por lo tanto, si puede simular aleatoriamente zyoes de F1 luego estimar usando 1norteyoV(zyo) o alternativamente simular zyoes de F2 luego usando 1norteyoV(zyo)F1(zyo)F2(zyo)

Ahora volvamos a nuestro caso U(X,y)=X2 y (X,Y) se distribuyen como (X, Y) condición en X + Y = k, es decir F(X,y)X+y=kF(X,y) y deja UNA=X+y=kF(X,y)

así que ahora el procedimiento es:

  1. generar copias n iid de densidad sol(X) - y llamarlos Xyo
  2. dejar Yyo=k-Xyo tenga en cuenta que la distribución de este (X, Y) es sol(X)yo(X+y=k), dónde yo() es la función del indicador
  3. la estimación es
    1norteyoU(Xyo,yyo)F(Xyo,yyo)UNAsol(Xyo)
pes
fuente
1
Su solución no es correcta ya que UNA=0 0.
Xi'an