Tengo una matriz de correlación , que obtuve usando el coeficiente de correlación lineal de Pearson a través de corrcoef de Matlab () . La matriz de correlación de dimensión 100x100, es decir, calculé la matriz de correlación en 100 variables aleatorias.
Entre estas 100 variables aleatorias, me gustaría encontrar las 10 variables aleatorias cuya matriz de correlación contiene la "pequeña correlación" posible (vea Cuantificar cuánta "más correlación" contiene una matriz de correlación A en comparación con una matriz de correlación B con respecto a las métricas para medir la correlación general en una matriz de correlación). Solo me importa la correlación por pares.
¿Existen buenos métodos para encontrar esas 10 variables aleatorias en un período de tiempo razonable (por ejemplo, no quiero probar combinaciones )? Los algoritmos de aproximación están bien.
fuente
metrics to measure the overall correlation
. ¿Estás pensando específicamente en el determinante?Respuestas:
Consideremos la suma de correlaciones absolutas por pares como nuestra medida de elección. Por lo tanto, buscamos un vector con que minimizará donde.v∈{0,1}N l1(v)=n v′Qv Qij=|Aij|
Suponga que Q también es positivo definido como A, el problema se reduce a resolver el problema de optimización cuadrática restringida:
Esto sugiere la siguiente relajación:
que se puede resolver fácilmente utilizando solucionadores estándar; entonces el resultado está dado por los componentes más grandes en .n v∗
Código de muestra de matlab:
fuente
Esto puede ser peor que la idea de agrupación jerárquica de @ ttnphns. Pero: acabo de pasar por un artículo que usa como una función objetivo submodular creciente:logdet(I+A)
Si cree que es una medida razonable de "menos correlacionada", puede obtener un factor del conjunto óptimo simplemente eligiendo iterativamente el punto que maximiza eso. Esto se puede hacer de manera eficiente con la descomposición del bloque LU , donde es el vector de correlaciones con las entradas que ya están en la matriz:1−1/e v
y, por supuesto, debe calcular , donde es la factorización de Cholesky de y utilizando un solucionador triangular que es . Entonces, todo este proceso debería tomar tiempo para seleccionar de elementos, suponiendo que la matriz de correlación ya esté calculada .vT(I+A)−1v=∥L−1v∥2 L I+A O(n2) O(∑nk=1Nk2+k3)=O(Nn3) n N
fuente
No estoy seguro de entender completamente lo que quiere decir con "solo me importa la correlación por pares" , pero aquí hay algo que puede ayudar: use la inversión de su matriz de correlación. El término es igual a , donde es la x construida a partir de donde se han eliminado la -ésima columna y línea.A−1ii det(A0i)/det(A) A0i (n−1) (n−1) A i
Obtener el índice del coeficiente diagonal mínimo en le indica qué punto tiene la correlación más baja con el resto del conjunto.A−1
Dependiendo de lo que realmente quiera hacer, puede tomar los 10 valores más bajos en la diagonal de la inversión u obtener el primero, luego calcular la inversión con el punto eliminado, y así sucesivamente.
Si esto no es lo que necesita, creo que este truco podría ser útil, pero no estoy seguro de cómo hacerlo.
fuente
Encuentra de elementos con la correlación por lo menos dos a dos: Desde una correlación de, por ejemplo explica de la relación entre dos series que tiene más sentido para minimizar la suma de los cuadrados de las correlaciones para su blanco elementos. Aquí está mi solución simple.k n 0.6 0.36 k
Reescribe tu matriz de correlaciones en una matriz de cuadrados de correlaciones. Suma los cuadrados de cada columna. Eliminar la columna y la fila correspondiente con la mayor suma. Ahora tiene una matriz . Repita hasta que tenga una matriz . También podría mantener las columnas y las filas correspondientes con las sumas más pequeñas. La comparación de los métodos, he encontrado en una matriz con y que sólo dos elementos con cierre sumas se mantienen de manera diferente y eliminados.n×n (n−1)×(n−1) k×k k n=43 k=20
fuente