El muestreo por cortes es un tipo de algoritmo de Monte Carlo de cadena de Markov para el muestreo de números pseudoaleatorios , es decir, para extraer muestras aleatorias de una distribución estadística. El método se basa en la observación de que para muestrear una variable aleatoria se puede muestrear uniformemente de la región bajo el gráfico de su función de densidad. [1] [2] [3]
Supongamos que se desea muestrear una variable aleatoria X con distribución f ( x ). Supongamos que la siguiente es la gráfica de f ( x ). La altura de f ( x ) corresponde a la probabilidad en ese punto.
Si se muestrea uniformemente X , cada valor tendría la misma probabilidad de ser muestreado y la distribución tendría la forma f ( x ) = y para algún valor y en lugar de alguna función no uniforme f ( x ). En lugar de la línea negra original, la nueva distribución se parecería más a la línea azul.
Para muestrear X de una manera que mantenga la distribución f ( x ), se debe utilizar alguna técnica de muestreo que tenga en cuenta las distintas probabilidades para cada rango de f ( x ).
El muestreo por cortes, en su forma más simple, toma muestras uniformemente desde debajo de la curva f ( x ) sin necesidad de rechazar ningún punto, de la siguiente manera:
La motivación aquí es que una forma de muestrear un punto de manera uniforme dentro de una curva arbitraria es primero dibujar cortes horizontales delgados de altura uniforme a lo largo de toda la curva. Luego, podemos muestrear un punto dentro de la curva seleccionando aleatoriamente un corte que caiga en la curva o debajo de ella en la posición x de la iteración anterior, y luego eligiendo aleatoriamente una posición x en algún lugar a lo largo del corte. Al usar la posición x de la iteración anterior del algoritmo, a largo plazo seleccionamos cortes con probabilidades proporcionales a las longitudes de sus segmentos dentro de la curva. La parte más difícil de este algoritmo es encontrar los límites del corte horizontal, lo que implica invertir la función que describe la distribución de la que se está muestreando. Esto es especialmente problemático para distribuciones multimodales, donde el corte puede constar de múltiples partes discontinuas. A menudo es posible usar una forma de muestreo de rechazo para superar esto, donde muestreamos de un corte más grande que se sabe que incluye el corte deseado en cuestión, y luego descartamos los puntos fuera del corte deseado. Este algoritmo se puede utilizar para tomar muestras del área bajo cualquier curva, independientemente de si la función se integra a 1. De hecho, escalar una función por una constante no tiene efecto sobre las posiciones x muestreadas. Esto significa que el algoritmo se puede utilizar para tomar muestras de una distribución cuya función de densidad de probabilidad solo se conoce hasta una constante (es decir, cuya constante de normalización es desconocida), lo que es común en las estadísticas computacionales .
El muestreo por rebanadas recibe su nombre del primer paso: definir una rebanada mediante el muestreo de una variable auxiliar . Esta variable se muestrea de , donde es la función de densidad de probabilidad (PDF) de X o es al menos proporcional a su PDF. Esto define una rebanada de X donde . En otras palabras, ahora estamos viendo una región de X donde la densidad de probabilidad es al menos . Luego, el siguiente valor de X se muestrea uniformemente de esta rebanada. Se muestrea un nuevo valor de , luego X , y así sucesivamente. Esto se puede visualizar como un muestreo alternativo de la posición y y luego de la posición x de los puntos bajo PDF, por lo tanto, las X son de la distribución deseada. Los valores no tienen consecuencias o interpretaciones particulares más allá de su utilidad para el procedimiento.
Si tanto la PDF como su inversa están disponibles, y la distribución es unimodal, entonces encontrar la porción y tomar muestras de ella es simple. Si no, se puede utilizar un procedimiento de selección por pasos para encontrar una región cuyos puntos finales queden fuera de la porción. Luego, se puede extraer una muestra de la porción utilizando el muestreo de rechazo . Radford M. Neal describe en detalle varios procedimientos para esto . [2]
Tenga en cuenta que, a diferencia de muchos métodos disponibles para generar números aleatorios a partir de distribuciones no uniformes, las variables aleatorias generadas directamente por este enfoque exhibirán dependencia estadística serial. Esto se debe a que para extraer la siguiente muestra, definimos la porción en función del valor de f ( x ) para la muestra actual.
El muestreo por cortes es un método de cadena de Markov y, como tal, cumple la misma función que el muestreo de Gibbs y Metropolis. A diferencia de Metropolis, no es necesario ajustar manualmente la función candidata ni la desviación estándar candidata.
Recuerde que Metropolis es sensible al tamaño del paso. Si el tamaño del paso es demasiado pequeño, el recorrido aleatorio provoca una decorrelación lenta. Si el tamaño del paso es demasiado grande, hay una gran ineficiencia debido a una alta tasa de rechazo.
A diferencia de Metropolis, el muestreo por cortes ajusta automáticamente el tamaño del paso para que coincida con la forma local de la función de densidad. Se podría decir que la implementación es más sencilla y eficiente que el muestreo de Gibbs o las actualizaciones simples de Metropolis.
Tenga en cuenta que, a diferencia de muchos métodos disponibles para generar números aleatorios a partir de distribuciones no uniformes, las variables aleatorias generadas directamente por este enfoque exhibirán dependencia estadística serial. En otras palabras, no todos los puntos tienen la misma probabilidad independiente de selección. Esto se debe a que para extraer la siguiente muestra, definimos la porción en función del valor de f(x) para la muestra actual. Sin embargo, las muestras generadas son markovianas y, por lo tanto, se espera que converjan a la distribución correcta en el largo plazo.
El muestreo por sectores requiere que la distribución que se va a muestrear sea evaluable. Una forma de flexibilizar este requisito es sustituir una distribución evaluable que sea proporcional a la distribución no evaluable real.
Para muestrear una variable aleatoria X con densidad f ( x ) introducimos una variable auxiliar Y e iteramos de la siguiente manera:
Nuestra variable auxiliar Y representa una "porción" horizontal de la distribución. El resto de cada iteración se dedica a tomar una muestra de un valor x de la porción que sea representativa de la densidad de la región considerada.
En la práctica, el muestreo de una porción horizontal de una distribución multimodal es difícil. Existe una tensión entre obtener una región de muestreo grande y, por lo tanto, hacer posibles grandes movimientos en el espacio de distribución, y obtener una región de muestreo más simple para aumentar la eficiencia. Una opción para simplificar este proceso es la expansión y contracción regional.
→
En un muestreador de Gibbs , es necesario extraer datos de manera eficiente de todas las distribuciones totalmente condicionales. Cuando no es fácil muestrear a partir de una densidad totalmente condicional, se puede utilizar una única iteración de muestreo por cortes o el algoritmo Metropolis-Hastings dentro de Gibbs para muestrear a partir de la variable en cuestión. Si la densidad totalmente condicional es logarítmicamente cóncava, una alternativa más eficiente es la aplicación de métodos de muestreo de rechazo adaptativo (ARS). [4] [5] Cuando no se pueden aplicar las técnicas ARS (ya que la totalmente condicional no es logarítmicamente cóncava), a menudo se emplean los algoritmos de muestreo de rechazo adaptativo de Metropolis . [6] [7]
El muestreo por sectores de una sola variable se puede utilizar en el caso multivariado muestreando cada variable una a una repetidamente, como en el muestreo de Gibbs. Para ello, es necesario que podamos calcular, para cada componente, una función que sea proporcional a .
Para evitar un comportamiento de caminata aleatoria, se pueden utilizar métodos de sobrerelajación para actualizar cada variable a su vez. [ cita requerida ] La sobrerelajación elige un nuevo valor en el lado opuesto de la moda del valor actual, en lugar de elegir un nuevo valor independiente de la distribución como se hace en Gibbs.
Este método adapta el algoritmo univariado al caso multivariado sustituyendo un hiperrectángulo por la región w unidimensional utilizada en el original. El hiperrectángulo H se inicializa en una posición aleatoria sobre la porción. Luego, H se encoge a medida que se rechazan los puntos que lo componen.
El muestreo de rebanadas reflexivo es una técnica para suprimir el comportamiento de caminata aleatoria en el cual las muestras candidatas sucesivas de la distribución f ( x ) se mantienen dentro de los límites de la rebanada al "reflejarse" la dirección del muestreo hacia adentro de la rebanada una vez que se ha alcanzado el límite.
En esta representación gráfica del muestreo reflexivo, la forma indica los límites de una porción de muestreo. Los puntos indican los puntos de inicio y de finalización de un recorrido de muestreo. Cuando las muestras alcanzan los límites de la porción, la dirección del muestreo se "refleja" nuevamente en la porción.
Consideremos un ejemplo de una sola variable. Supongamos que nuestra distribución real es una distribución normal con media 0 y desviación estándar 3, . Por lo tanto: . El pico de la distribución está obviamente en , en cuyo punto .
Si nos interesa el pico de la distribución, podemos seguir repitiendo este proceso ya que el nuevo punto corresponde a un f ( x ) mayor que el punto original.
Para tomar una muestra de la distribución normal, primero elegimos una x inicial, digamos 0. Después de cada muestra de x, elegimos y de manera uniforme al azar de , que está acotada por la función de densidad de probabilidad de . Después de cada muestra de y, elegimos x de manera uniforme al azar de donde . Esta es la porción donde .
Una implementación en el lenguaje Macsyma es:
rebanada ( x ) := bloque ([ y , alfa ] , y: aleatorio ( exp ( - x ^ 2 / 2.0 ) / sqrt ( 2.0 * dfloat ( % pi ))) , alfa: sqrt ( -2.0 * ln ( y * sqrt ( 2.0 * dfloat ( % pi )))) , x: signo ( aleatorio ()) * aleatorio ( alfa )) ;