La versión corta fuera de contexto
Sea una variable aleatoria con CDF
Digamos que quería simular dibujos de usando el método inverso de CDF. ¿Es eso posible? Esta función no tiene exactamente una inversa. Por otra parte, hay un muestreo de transformación inversa para la distribución de mezclas de dos distribuciones normales que sugiere que hay una forma conocida de aplicar el muestreo de transformación inversa aquí.
Soy consciente del método de dos pasos, pero no sé cómo aplicarlo a mi situación (ver más abajo).
La versión larga con fondo
Ajusté el siguiente modelo para una respuesta con valor vectorial, , usando MCMC (específicamente, Stan):
donde indexa observaciones, es una matriz de correlación es un vector de predictores / regresores / características.N R x
Es decir, mi modelo es un modelo de regresión en el que se supone que la distribución condicional de la respuesta es una cópula gaussiana con márgenes log-normales inflados a cero. He publicado sobre este modelo antes; Resulta que Song, Li y Yuan (2009, cerrada ) lo han desarrollado y lo llaman un vector GLM o VGLM. La siguiente es su especificación tan cercana a textual como pude obtenerla: MiF K G m z q R Γ
La parte inflada a cero sigue aproximadamente las especificaciones de Liu y Chan (2010, sin delegar ).
Ahora me gustaría simular datos de los parámetros estimados, pero estoy un poco confundido sobre cómo hacerlo. Primero pensé que podía simular directamente (en código R):
for (i in 1:N) {
for (k in 1:K) {
Y_hat <- rbinom(1, 1, 1 - theta[i, k])
if (Y_hat == 1)
Y_hat <- rlnorm(1, mu[i, k], sigma[k])
}
}
que no usa en absoluto. Me gustaría intentar usar la matriz de correlación que estimé.
Mi siguiente idea fue tomar sorteos de y luego convertirlos nuevamente a . Esto también parece coincidir con las respuestas en Generar muestras de Cópula en R y Muestreo bivariado para distribución expresadas en el teorema de cópula de Sklar? . Pero, ¿qué diablos es mi aquí? El muestreo de transformación inversa para la distribución de mezclas de dos distribuciones normales hace que parezca posible, pero no tengo idea de cómo hacerlo.y F - 1
fuente
Respuestas:
La respuesta a la versión larga con antecedentes:
Esta respuesta a la versión larga de alguna manera aborda otro problema y, dado que parece que tenemos dificultades para formular el modelo y el problema, elijo reformularlo aquí, con suerte correctamente.
Para , el objetivo es simular los vectores modo que, condicional a una covariable , con . Por lo tanto, si uno quiere simular datos de este modelo, podría proceder de la siguiente manera:1≤i≤I yi=(yi1,…,yiK) xi yik={0log(σkzik+βkxi) with probability logit−1(αkxi) with probability 1−logit−1(αkxi) zi=(zi1,…,ziK)∼NK(0,R)
Para ,1≤i≤I
Si uno está interesado en la generación desde la parte posterior de dada la , este es un problema más difícil, aunque factible por muestreo de Gibbs o ABC.(α,β,μ,σ,R) yik
fuente
La respuesta a la versión corta fuera de contexto:
"Invertir" un cdf que no es invertible en el sentido matemático (como su distribución mixta) es factible, como se describe en la mayoría de los libros de texto de Monte Carlo. (Al igual que el nuestro , vea el Lema 2.4.) Si define el inverso generalizado entonces Esto significa que, cuando tiene un salto de en , para . En otras palabras, si dibujas un uniforme y termina más pequeño que , tu generación de
Esto es casi lo que su código R
Y_hat <- rbinom(1, 1, theta[i, k]) if (Y_hat == 1) Y_hat <- rlnorm(1, mu[i, k], sigma[k])
está haciendo. un Bernoulli con probabilidad y si es igual a , lo conviertes en un log-normal. Dado que es igual a 1 con probabilidad , en su lugar, debe convertirlo en una simulación logarítmica normal cuando sea igual a cero , terminando con el código R modificado:θik θ i k1 θik
fuente