Resolver una ecuación integral simple mediante muestreo aleatorio

8

Dejar fser una función no negativa Estoy interesado en encontrar tal que La advertencia : todo lo que puedo hacer es muestrear en puntos en . Sin embargo, puedo elegir los lugares donde muestreo al azar, si así lo deseo. z[0,1]

0zf(x)dx=1201f(x)dx
f[0 0,1]F

Preguntas:

  1. ¿Es posible obtener una estimación imparcial de después de muchas muestras? Si es así, ¿cuál es la varianza más pequeña posible de tal estimación después de muestras?zk
  2. Si no, qué procedimientos están disponibles para estimar y cuáles son sus tiempos de convergencia asociados.z

Como señaló Douglas Zare en los comentarios, esto puede ser muy difícil de hacer si la función es cercana a cero o muy grande. Afortunadamente, la función para la que necesito usar esto está limitada desde arriba y desde abajo, así que supongamos que . Además, también podemos suponer que es Lipschitz o incluso diferenciable si eso ayuda.1F(X)2F

Robinson
fuente
1
Si no tiene más información, puede tener un comportamiento muy malo. Imagine que es entre y , yLos ligeros cambios en harán que la mediana salte de menos de a más de . F0 01/32/301/3f(x) dx1/2.f1/32/3
Douglas Zare
@robinson ¿Podría proporcionar más información sobre ? ¿O está interesado en resolver el problema para cualquier densidad ? FF
@DouglasZare - Gracias por el comentario; mira mi edición
Robinson
@Procrastinator: edité la pregunta con un poco más de información.
robinson
3
(+1) Para la actualización. Al dividir el lado izquierdo por el derecho, se puede ver que esto se reduce a encontrar la mediana de una distribución de probabilidad desconocida apoyada en[0 0,1].
Cardenal

Respuestas:

6

Como lo señaló el cardenal en su comentario, su pregunta puede reformularse como sigue.

Por álgebra simple, la ecuación integral se puede reescribir como

0 0zsol(X)reX=12,
en el cual sol es la función de densidad de probabilidad definida como
sol(X)=F(X)0 01F(t)ret.

Dejar X ser una variable aleatoria con densidad sol. Por definición,PAGS{Xz}=0 0zsol(X)reX, entonces tu ecuación integral es equivalente a

PAGS{Xz}=12,
lo que significa que su problema puede expresarse como:

"Dejar X ser una variable aleatoria con densidad sol. Encuentra la mediana deX".

Para estimar la mediana de X, use cualquier método de simulación para dibujar una muestra de valores de X y tome como estimación la mediana de la muestra.

Una posibilidad es utilizar el algoritmo Metropolis-Hastings para obtener una muestra de puntos con la distribución deseada. Debido a la expresión de la probabilidad de aceptación en el algoritmo de Metropolis-Hastings, no necesitamos saber el valor de la constante de normalización0 01F(t)ret de la densidad sol. Entonces, no tenemos que hacer esta integración.

El siguiente código usa una forma particularmente simple del algoritmo Metropolis-Hastings conocido como Indepence Sampler, que usa una propuesta cuya distribución no depende del valor actual de la cadena. He usado propuestas uniformes independientes. A modo de comparación, el script genera el mínimo de Monte Carlo y el resultado encontrado con la optimización estándar. Los puntos de muestra se almacenan en el vector chain, pero descartamos el primer10000 puntos que forman el llamado período de "quemado" de la simulación.

BURN_IN = 10000
DRAWS   = 100000

f = function(x) exp(sin(x))

chain = numeric(BURN_IN + DRAWS)

x = 1/2

for (i in 1:(BURN_IN + DRAWS)) {
    y = runif(1) # proposal
    if (runif(1) < min(1, f(y)/f(x))) x = y
    chain[i] = x
}

x_min = median(chain[BURN_IN : (BURN_IN + DRAWS)])

cat("Metropolis minimum found at", x_min, "\n\n")

# MONTE CARLO ENDS HERE. The integrations bellow are just to check the results.

A = integrate(f, 0, 1)$value

F = function(x) (abs(integrate(f, 0, x)$value - A/2))

cat("Optimize minimum found at", optimize(F, c(0, 1))$minimum, "\n")

Aquí hay algunos resultados:

Metropolis minimum found at 0.6005409 
Optimize minimum found at 0.601365

Este código es solo un punto de partida para lo que realmente necesita. Por lo tanto, use con cuidado.

zen
fuente
Gracias por tu respuesta. No sé R, así que no estoy seguro de cómo analizar lo que estás haciendo. ¿Podría indicar en palabras / fórmulas su procedimiento? Gracias. En particular, me pregunto si está respetando la restricción de que lo único que puede hacer es evaluar f: por ejemplo, no está permitido integrarF, (aunque ciertamente puede formar aproximaciones de Montecarlo a integrales basadas en evaluaciones aleatorias).
robinson
Sí, solo estoy evaluando Fpara obtener la estimación de Monte Carlo.
Zen
El código es solo un ejemplo. La sintaxis R es similar a otros lenguajes. ¿Alguna declaración en particular que no entiendas? Consulte la página de Wikipedia sobre el algoritmo Metropolis-Hastings. Por supuesto, la idea general es más importante. Puedes probar deF/ /Futilizando cualquier método que tenga disponible.
Zen
¿Tomaste un curso introductorio sobre procesos estocásticos, que abarca el tiempo discreto de las cadenas de Markov?
Zen
1
Por cierto: ¡Procrastinadores del mundo, uníos! Pero hoy no ...
Zen
3

La calidad de la aproximación integral, al menos en el caso tan simple como 1D, viene dada por (Teorema 2.10 en Niederreiter (1992) ):

El |1nortenorte=1norteF(Xnorte)-0 01F(tu)retuEl |ω(F;renorte(X1,...,Xnorte))
dónde
ω(F;t)=cenar{El |F(tu)-F(v)El |:tu,v[0 0,1],El |tu-vEl |t,t>0 0}
es el módulo de continuidad de la función (relacionado con la variación total, y fácilmente expresable para las funciones de Lipshitz), y
renorte(X1,...,Xnorte)=cenartuEl |1nortenorte1{Xnorte[0 0,tu)}-tuEl |=12norte+maxnorteEl |Xnorte-2norte-12norteEl |
es la discrepancia (extrema), o la diferencia máxima entre la fracción de golpes por la secuencia X1,...,Xnorte de un intervalo semiabierto [0 0,tu) y su medida de Lebesgue tu. La primera expresión es la definición, y la segunda expresión es propiedad de las secuencias 1D en[0 0,1] (Teorema 2.6 en el mismo libro).

Obviamente, para minimizar el error en la aproximación integral, al menos en el RHS de su ecuación, debe tomar Xnorte=(2norte-1)/ /2norte. Atornille las evaluaciones aleatorias, corren el riesgo de tener una brecha aleatoria en una característica importante de la función.

Una gran desventaja de este enfoque es que debe comprometerse con un valor de nortepara producir esta secuencia uniformemente distribuida. Si no está satisfecho con la calidad de aproximación que proporciona, todo lo que puede hacer es duplicar el valor denorte y presione todos los puntos medios de los intervalos creados previamente.

Si desea tener una solución donde pueda aumentar el número de puntos más gradualmente, puede continuar leyendo ese libro y aprender sobre las secuencias de van der Corput e inversas radicales. Ver secuencias de baja discrepancia en Wikipedia, proporciona todos los detalles.

Actualización: para resolver porz, define la suma parcial

Sk=1nortenorte=1kF(2norte-12norte).
Encontrar k tal que
Sk12Snorte<Sk+1,
e interpolar para encontrar
znorte=2k-12norte+Snorte/ /2-Sknorte(Sk+1-Sk).
Esta interpolación supone que F()es continuo Si adicionalmenteF() es dos veces diferenciable, entonces esta aproximación integrando la expansión de segundo orden para incorporar Sk-1 y Sk+2y resolviendo una ecuación cúbica para z.
StasK
fuente
1
Me gusta la esencia de esto. Creo que sería útil hacer más explícita la estrategia que propone para resolver la pregunta del OP. En la actualidad, la respuesta se lee (para mí) principalmente como si se tratara de cómo calcular el RHS de la ecuación en la pregunta.
Cardenal
1
(+1) Buena actualización. Snorte simplemente se puede ver como una aproximación de suma de Riemann a la integral donde usamos el valor de Fen el punto medio de cada intervalo definido por la partición, en lugar del punto final izquierdo o derecho. :-)
cardenal
Si; Sin embargo, es interesante que esta suma de Riemann tenga esta justificación de optimización.
StasK