Problema relacionado con la simulación de semi-informática aquí.
Tengo una distribución donde
P (x) =
para algunas constantes byn, yx es un número entero tal que .
Ahora, necesito probar de esta distribución. Tiene un CDF invertible, por lo que es posible hacer esto directamente en teoría. El problema es que los números involucrados son GRANDES. Tan grande, de hecho, que ambos desbordan las variables formateadas convencionalmente, y toman al menos minutos (en algún momento me di por vencido ...) para calcular usando formatos de precisión arbitrarios. Básicamente, el CDF inverso todavía implica un término de , para . A pesar de esto, los números de salida seguirán en el rango , por lo que parece que debería haber una forma de hacerlo.
Lo que estoy buscando es una forma de muestreo aproximadamente de esta distribución que sea computable. ¿Existen métodos alternativos de muestreo? ¿Qué son?
fuente
Respuestas:
El CDF es fácilmente invertible. Una fórmula para la inversión conduce a lo que tiene que ser una de las soluciones más simples y convenientes posibles.
Comience observando que la probabilidad del resultado , , es proporcional a . Por lo tanto, si generamos un valor uniforme entre y = , solo necesitamos encontrar la más grande para la cualk 0≤k≤n e−bk q 0 qmax=∑nk=0e−bk (1−e−b(n+1))/(1−e−b) k
Álgebra simple da la solución
Aquí hay unasi norte
R
implementación construida como todos los otros generadores de números aleatorios: su primer argumento especifica cuántos valores de iid generar y el resto de los argumentos nombran los parámetros ( as y as ):b
n.max
Como ejemplo de su uso, generemos un millón de variantes aleatorias de acuerdo con esta distribución:
( Se necesitaron segundos).0,10
( Se agregó a cada valor para crear un mejor histograma: el procedimiento tiene una idiosincrasia (= error) en la que la primera barra es demasiado alta cuando el punto final izquierdo se establece en cero). La curva roja es la distribución de referencia que esta simulación intenta reproducir. Vamos a evaluar la bondad del ajuste con una prueba de chi-cuadrado:1
R
hist
El valor p es : un ajuste hermoso.0,84
fuente
Se trata de una distribución geométrica truncada con . Hay una variedad de formas de abordar esto.p = 1 -mi- b
Aconsejaría diferentes opciones en diferentes situaciones; Algunas opciones implicarían simular a partir de una geometría y regeneración cuando está fuera del rango, tomar la parte entera de un exponencial truncado apropiado ( como aquí ), o usar cualquiera de varias técnicas rápidas adaptadas a distribuciones discretas en un rango finito. Dado que es grande, tomar el piso de un exponencial truncado probablemente sea relativamente rápido, pero si es la mejor opción también depende de .norte si
Aquí hay una pregunta relacionada con las matemáticas.
Antes de intentar sugerencias específicas, ¿cuál es un rango típico de valores para ?si
fuente
Primero, tenga en cuenta que que, si fuera continuo, estaría relacionado con una distribución exponencial. Entonces, lo que puede hacer es simular a partir de una distribución exponencial truncada y tomar la (parte entera) de las observaciones.P(x)∝e−bx x
floor()
El cdf de un exponencial truncado es
Entonces, si hacemos , obtenemos que . Si es grande, entonces que sugiere aproximar .F(x;n,b)=u x=−1blog[1−u(1−e−bn)] bn e−bn≈0 x≈−1blog[1−u]
fuente
rweirdp
se modifica para cambiarn
an+1
. (Como se indica aquí, nunca devolverá un valor igual an
: ese es el efecto de la aproximación). En mi respuesta se da un análisis un poco más riguroso. Aunque obtengo una fórmula de apariencia diferente, es equivalente a la (¡más simple!) Dada aquí, una vez que se realiza la modificaciónn
->n+1
.Una forma de tomar muestras de la distribución objetivop(k)∝exp{−bk} Es para
ejecutar un experimento Metropolis-Hastings para determinar el soporte (interesante) de la distribución, es decir, en qué subconjunto de{0,1,…,n} se concentra;
Utilice el soporte así determinado,{k0,…,k1} decir, para calcular las probabilidades exactas como p(k)∝exp{−bk+bk0} para evitar desbordamientos.
Actualización: al pensar más en ello, ya quep(⋅) está disminuyendo en k, el soporte efectivo de la distribución siempre comenzará en k0=0 . Sib es bastante grande, este soporte terminará muy rápidamente, en cuyo caso n no importa tanto como valores grandes de k Nunca será visitado. Sib es muy pequeño, el pdf es casi plano, lo que significa que se puede usar una distribución uniforme en {0,1,…,n} como una propuesta de aceptar-rechazar. Y use registros en el paso de aceptación para evitar desbordamientos.
fuente