Me gustaría generar una matriz de correlación aleatoria de modo que la distribución de sus elementos fuera de la diagonal se vea aproximadamente como normal. ¿Cómo puedo hacerlo?
La motivación es esta. Para un conjunto de series de datos de tiempo, la distribución de correlación a menudo se ve bastante cercana a lo normal. Me gustaría generar muchas matrices de correlación "normales" para representar la situación general y usarlas para calcular el número de riesgo.
Conozco un método, pero la desviación estándar resultante (de la distribución de los elementos fuera de la diagonal) es demasiado pequeña para mi propósito: generar filas aleatorias uniformes o normales de una matriz X , estandarizar las filas (restar la media, dividir por desviación estándar), luego la matriz de correlación de muestra 1normalmente ha distribuido entradas fuera de la diagonal [actualizacióndespués de comentarios: desviación estándar será~n-1/2].
¿Alguien puede sugerir un método mejor con el que pueda controlar la desviación estándar?
Respuestas:
Primero proporcioné lo que ahora creo que es una respuesta subóptima; Por lo tanto, edité mi respuesta para comenzar con una mejor sugerencia.
Usando el método de la vid
En este hilo: ¿Cómo generar eficientemente matrices aleatorias de correlación semidefinida positiva? - Describí y proporcioné el código para dos algoritmos eficientes de generación de matrices de correlación aleatorias. Ambos provienen de un artículo de Lewandowski, Kurowicka y Joe (2009).
Vea mi respuesta allí para ver muchas figuras y códigos de matlab. Aquí solo me gustaría decir que el método vine permite generar matrices de correlación aleatorias con cualquier distribución de correlaciones parciales (observe la palabra "parcial") y puede usarse para generar matrices de correlación con grandes valores fuera de la diagonal. Aquí está la figura relevante de ese hilo:
Creo que estas distribuciones son razonablemente "normales", y uno puede ver cómo aumenta gradualmente la desviación estándar. Debo agregar que el algoritmo es muy rápido. Ver hilo vinculado para los detalles.
Mi respuesta original
Una modificación directa de su método podría hacer el truco (dependiendo de qué tan cerca desea que la distribución sea normal). Esta respuesta se inspiró en los comentarios de @ cardinal anteriores y en la respuesta de @ psarka a mi propia pregunta ¿Cómo generar una matriz de correlación aleatoria grande de rango completo con algunas correlaciones fuertes presentes?
Todas estas matrices son, por supuesto, definitivas positivas. Aquí está el código matlab:
La salida de este código (valores propios mínimos y máximos) es:
fuente
Puede interesarle parte del código en el siguiente enlace:
Correlación y Cointegración
fuente
Si está intentando generar matrices de correlación aleatorias, considere tomar muestras de la distribución Wishart. La siguiente pregunta proporciona información sobre la distribución de Wishart, así como consejos sobre cómo muestrear: ¿Cómo generar de manera eficiente matrices de correlación positiva-semidefinida al azar?
fuente
Esta no es una respuesta muy sofisticada, pero no puedo evitar pensar que sigue siendo una buena respuesta ...
Si su motivación es que los parámetros de correlación producidos por los datos de series temporales tienden a parecer normales, ¿por qué no simplemente simular datos de series temporales, calcular los parámetros de correlación y usarlos?
Es posible que tenga una buena razón para no hacer esto, pero su pregunta no me deja claro.
fuente