Lo siento si esto parece demasiado básico, pero supongo que solo estoy buscando confirmar la comprensión aquí. Tengo la sensación de que tendría que hacer esto en dos pasos, y he comenzado a tratar de asimilar las matrices de correlación, pero está empezando a parecer realmente complicado. Estoy buscando una explicación concisa (idealmente con sugerencias para una solución de pseudocódigo) de una forma buena, idealmente rápida, de generar números aleatorios correlacionados.
Dadas dos variables pseudoaleatorias de altura y peso con medias y variaciones conocidas, y una correlación dada, creo que básicamente estoy tratando de entender cómo debería ser este segundo paso:
height = gaussianPdf(height.mean, height.variance)
weight = gaussianPdf(correlated_mean(height.mean, correlation_coefficient),
correlated_variance(height.variance,
correlation_coefficient))
- ¿Cómo calculo la media y la varianza correlacionadas? Pero quiero confirmar que ese es realmente el problema relevante aquí.
- ¿Necesito recurrir a la manipulación matricial? ¿O tengo algo más muy mal en mi enfoque básico de este problema?
probability
correlation
conditional-probability
random-generation
Joseph Weissman
fuente
fuente
Respuestas:
Para responder a su pregunta sobre "una forma buena, idealmente rápida, de generar números aleatorios correlacionados": Dada una matriz varianza-covarianza deseada que es, por definición, positiva definida, la descomposición de Cholesky es: C = L L T ; L siendo matriz triangular inferior.C C L LT L
Si ahora usa esta matriz para proyectar un vector variable aleatorio no correlacionado X , la proyección resultante Y = L X será la de las variables aleatorias correlacionadas.L X Y= L X
Puede encontrar una explicación concisa de por qué sucede esto aquí .
fuente
+1 a @ user11852 y @ jem77bfp, estas son buenas respuestas. Permítanme abordar esto desde una perspectiva diferente, no porque piense que es necesariamente mejor en la práctica , sino porque creo que es instructivo. Aquí hay algunos hechos relevantes que ya conocemos:
(también, de las reglas para las variaciones ):
Si desea hacer esto en R, el siguiente código podría funcionar para usted:
Nuevamente, esto, en su forma más simple, solo le permite generar un par de variables correlacionadas (esto podría ampliarse, pero se vuelve feo rápido), y ciertamente no es la forma más conveniente de hacer el trabajo. En R, desearía usar ? Mvrnorm en el paquete MASS , tanto porque es más fácil como porque puede generar muchas variables con una matriz de correlación de población dada. No obstante, creo que vale la pena haber recorrido este proceso para ver cómo se desarrollan algunos principios básicos de una manera simple.
fuente
En general, esto no es algo simple de hacer, pero creo que hay paquetes para la generación de variables normales multivariadas (al menos en R, ver
mvrnorm
en elMASS
paquete), donde simplemente ingresas una matriz de covarianza y un vector medio.Si no comprende el significado de conectar una variable uniforme en una función de distribución de probabilidad inversa, intente hacer un bosquejo del caso univariado y luego recuerde cuál es la interpretación geométrica de la función inversa.
fuente
Si está listo para renunciar a la eficiencia, puede usar un alogoritmo desechable. Su ventaja es que permite cualquier tipo de distribución (no solo gaussiana).
¡Buena suerte!
fuente