Me gustaría dibujar una muestra . Wikipedia sugiere usar una descomposición de Cholesky o Eigen , es decir, o
Y por lo tanto, la muestra se puede extraer mediante: o donde
Wikipedia sugiere que ambos son igualmente buenos para generar muestras, pero el método Cholesky tiene el tiempo de cálculo más rápido. ¿Es esto cierto? ¿Especialmente numéricamente cuando se usa un método monte-carlo, donde las variaciones a lo largo de las diagonales pueden diferir en varios órdenes de magnitud? ¿Hay algún análisis formal sobre este problema?
car::ellipse
) . Aunque la pregunta se hace en diferentes aplicaciones, la teoría detrás es la misma. Verá bonitas figuras para la explicación geométrica allí.Respuestas:
El problema fue estudiado por Straka et.al para el filtro de Kalman sin perfume que extrae muestras (deterministas) de una distribución normal multivariante como parte del algoritmo. Con un poco de suerte, los resultados podrían ser aplicables al problema de Monte Carlo.
La descomposición de Cholesky (CD) y la descomposición de Eigen (ED), y de hecho la raíz cuadrada de matriz (MSR) real , son todas formas en que se puede descomponer una matriz semi-definida positiva (PSD).
Considere la SVD de una matriz de PSD, . Puesto que P es PSD, esto es en realidad el mismo que el ED con P = U S T T . Además, podemos dividir la matriz diagonal por su raíz cuadrada: P = U √P=USVT P=USUT , señalando que√PAG= US--√S--√TUT .S--√= S--√T
Ahora podemos introducir una matriz ortogonal arbitraria :O
La elección deO realidad afecta el rendimiento de la estimación, especialmente cuando hay elementos fuertes fuera de la diagonal de la matriz de covarianza.
El artículo estudió tres opciones de :O
De las cuales se extrajeron las siguientes conclusiones en el documento después de mucho análisis (cita):
Referencia:
fuente
Aquí hay una ilustración simple que usa R para comparar el tiempo de cálculo de los dos métodos.
Los tiempos de ejecución son
Al aumentar el tamaño de la muestra a 10000, los tiempos de ejecución son
Espero que esto ayude.
fuente
Aquí está el manual, o la demostración de prueba de mí mismo del pobre:
1. MÉTODO SVD:
2. CHOLESKY METHOD:
Thank you to @userr11852 for pointing out to me that there is a better way to calculate the difference in performance between SVD and Cholesky, in favor of the latter, using the function
microbenchmark
. At his suggestion, here is the result:fuente
microbenchmark
y realmente hace la diferencia.