Actualmente estoy trabajando en un proyecto donde genero valores aleatorios usando conjuntos de puntos de baja discrepancia / cuasialeatorios , como los conjuntos de puntos de Halton y Sobol. Estos son esencialmente vectores dimensionales que imitan una variable dimensional uniforme (0,1), pero tienen una mejor distribución. En teoría, se supone que ayudan a reducir la varianza de mis estimaciones en otra parte del proyecto.
Desafortunadamente, me he encontrado con problemas al trabajar con ellos y gran parte de la literatura sobre ellos es densa. Por lo tanto, esperaba obtener una idea de alguien que tenga experiencia con ellos, o al menos encontrar una manera de evaluar empíricamente lo que está sucediendo:
Si has trabajado con ellos:
¿Qué es exactamente la codificación? ¿Y qué efecto tiene en el flujo de puntos que se generan? En particular, ¿hay algún efecto cuando aumenta la dimensión de los puntos que se generan?
¿Por qué si genero dos flujos de puntos Sobol con la codificación MatousekAffineOwen, obtengo dos flujos de puntos diferentes? ¿Por qué este no es el caso cuando uso la codificación de radix inversa con puntos Halton? ¿Existen otros métodos de codificación para estos conjuntos de puntos? Y si es así, ¿hay una implementación de MATLAB?
Si no has trabajado con ellos:
- Digamos que tengo secuencias de números supuestamente aleatorios, ¿qué tipo de estadísticas debo usar para mostrar que no están correlacionadas entre sí? ¿Y qué número necesitaría para demostrar que mi resultado es estadísticamente significativo? Además, ¿cómo podría hacer lo mismo si tuviera secuencias de vectores aleatorios dimensionales ?
Preguntas de seguimiento sobre la respuesta del cardenal
Teóricamente hablando, ¿podemos emparejar cualquier método de aleatorización con cualquier secuencia de baja discrepancia? MATLAB solo me permite aplicar la codificación de radix inversa en las secuencias de Halton, y me pregunto si eso es simplemente un problema de implementación o un problema de compatibilidad.
Estoy buscando una forma que me permita generar dos redes (t, m, s) que no estén correlacionadas entre sí. ¿MatouseAffineOwen me permitirá hacer esto? ¿Qué tal si usara un algoritmo de codificación determinista y simplemente decidiera elegir cada valor 'kth' donde k era primo?
Respuestas:
La codificación suele ser una operación aplicada a una red digital que utiliza alguna base b . Las redes Sobol usan b = 2 , por ejemplo, mientras que las redes Faure usan un número primo para b .(t,m,s) b b=2 b
El propósito de la codificación es (con suerte) obtener una distribución aún más uniforme, especialmente si solo puede usar una pequeña cantidad de puntos. Un buen ejemplo para ver por qué esto funciona es mirar la secuencia de Halton en y elegir dos números primos "grandes", como 29 y 31. El cuadrado se rellena muy lentamente usando la secuencia estándar de Halton. Pero, con la codificación, se rellena de manera más uniforme y mucho más rápido. Aquí hay una gráfica para los primeros cientos de puntos usando un enfoque de codificación determinista.d=2
Las formas más básicas de aleatorización esencialmente permutan las expansiones de la base dígitos de los n puntos originales entre sí. Para más detalles, aquí hay una exposición clara .b n
En cuanto a los tipos de aleatorización, la aleatorización de radix inversa es una aleatorización determinista . El algoritmo de codificación Matousek es una codificación aleatoria , realizada nuevamente para mantener la propiedad de cierre. Si configura la semilla aleatoria antes de hacer la llamada a la función de codificación, siempre debe recuperar la misma red.
También te puede interesar el proyecto MinT .
fuente