Cuantificación de cuánto "más correlación" contiene una matriz de correlación A en comparación con una matriz de correlación B

9

Tengo 2 matrices de correlación UNA y si(utilizando el coeficiente de correlación lineal de Pearson a través de corrcoef de Matlab () ). Me gustaría cuantificar cuánto "más correlación"UNA contiene en comparación con si. ¿Hay alguna medida estándar o prueba para eso?

Por ejemplo, la matriz de correlación

ingrese la descripción de la imagen aquí

contiene "más correlación" que

ingrese la descripción de la imagen aquí

Soy consciente de la prueba M de Box , que se usa para determinar si dos o más matrices de covarianza son iguales (y también se puede usar para matrices de correlación, ya que estas últimas son las mismas que las matrices de covarianza de variables aleatorias estandarizadas).

Ahora mismo estoy comparando UNA y si a través de la media de los valores absolutos de sus elementos no diagonales, es decir 2norte2-norte1yo<jnorteEl |Xyo,jEl |. (Utilizo la simetría de la matriz de correlación en esta fórmula). Supongo que podría haber algunas métricas más inteligentes.


Siguiendo el comentario de Andy W sobre el determinante de la matriz, realicé un experimento para comparar las métricas:

  • Media de los valores absolutos de sus elementos no diagonales :métricomedia()
  • Determinante matricial :métricodeterminante():

Dejar UNA y si dos matrices simétricas aleatorias con unas en la diagonal de la dimensión 10×10. El triángulo superior (diagonal excluida) deUNA se rellena con flotantes aleatorios de 0 a 1. El triángulo superior (excluida la diagonal) de sise rellena con flotantes aleatorios de 0 a 0.9. Genero 10.000 matrices de este tipo y cuento:

  • métricomedia(si)métricomedia(UNA) 80.75% del tiempo
  • métricodeterminante(si)métricodeterminante(UNA) 63.01% del tiempo

Dado el resultado, tendería a pensar que métricomedia(si) Es una mejor métrica.

Código de Matlab:

function [  ] = correlation_metric(  )
%CORRELATION_METRIC Test some metric for
%   http://stats.stackexchange.com/q/110416/12359 :
%   I have 2 correlation matrices A and B (using the Pearson's linear 
%   correlation coefficient through Matlab's corrcoef()).
%   I would like to quantify how much "more correlation"
%   A contains compared to B. Is there any standard metric or test for that?

% Experiments' parameters
runs = 10000;
matrix_dimension = 10;

%% Experiment 1
results = zeros(runs, 3);
for i=1:runs
    dimension = matrix_dimension;
    M = generate_random_symmetric_matrix( dimension, 0.0, 1.0 );
    results(i, 1) = abs(det(M));
%     results(i, 2) = mean(triu(M, 1));
    results(i, 2) = mean2(M);
%     results(i, 3) = results(i, 2) < results(i, 2) ; 
end
mean(results(:, 1))
mean(results(:, 2))


%% Experiment 2
results = zeros(runs, 6);
for i=1:runs
    dimension = matrix_dimension;
    M = generate_random_symmetric_matrix( dimension, 0.0, 1.0 );
    results(i, 1) = abs(det(M));
    results(i, 2) = mean2(M);
    M = generate_random_symmetric_matrix( dimension, 0.0, 0.9 );
    results(i, 3) = abs(det(M));
    results(i, 4) = mean2(M);
    results(i, 5) = results(i, 1) > results(i, 3);
    results(i, 6) = results(i, 2) > results(i, 4);
end

mean(results(:, 5))
mean(results(:, 6))
boxplot(results(:, 1))
figure
boxplot(results(:, 2))


end

function [ random_symmetric_matrix ] = generate_random_symmetric_matrix( dimension, minimum, maximum )
% Based on http://www.mathworks.com/matlabcentral/answers/123643-how-to-create-a-symmetric-random-matrix
d = ones(dimension, 1); %rand(dimension,1); % The diagonal values
t = triu((maximum-minimum)*rand(dimension)+minimum,1); % The upper trianglar random values
random_symmetric_matrix = diag(d)+t+t.'; % Put them together in a symmetric matrix
end

Ejemplo de un generado 10×10 matriz simétrica aleatoria con unos en la diagonal:

>> random_symmetric_matrix

random_symmetric_matrix =

    1.0000    0.3984    0.1375    0.4372    0.2909    0.6172    0.2105    0.1737    0.2271    0.2219
    0.3984    1.0000    0.3836    0.1954    0.5077    0.4233    0.0936    0.2957    0.5256    0.6622
    0.1375    0.3836    1.0000    0.1517    0.9585    0.8102    0.6078    0.8669    0.5290    0.7665
    0.4372    0.1954    0.1517    1.0000    0.9531    0.2349    0.6232    0.6684    0.8945    0.2290
    0.2909    0.5077    0.9585    0.9531    1.0000    0.3058    0.0330    0.0174    0.9649    0.5313
    0.6172    0.4233    0.8102    0.2349    0.3058    1.0000    0.7483    0.2014    0.2164    0.2079
    0.2105    0.0936    0.6078    0.6232    0.0330    0.7483    1.0000    0.5814    0.8470    0.6858
    0.1737    0.2957    0.8669    0.6684    0.0174    0.2014    0.5814    1.0000    0.9223    0.0760
    0.2271    0.5256    0.5290    0.8945    0.9649    0.2164    0.8470    0.9223    1.0000    0.5758
    0.2219    0.6622    0.7665    0.2290    0.5313    0.2079    0.6858    0.0760    0.5758    1.0000
Franck Dernoncourt
fuente
2
Por curiosidad, ¿qué tipo de pregunta estás tratando de responder con esto?
shadowtalker
1
El determinante de la matriz puede considerarse el volumen de la matriz en el espacio multidimensional. Sin embargo, esto podría ser malo si tiene matrices de correlación mal condicionadas.
Andy W
@ssdecontrol Claro, estoy tratando de encontrar el subconjunto menos correlacionado de variables aleatorias de una matriz de correlación .
Franck Dernoncourt
1
@AndyW Gracias, esa es una gran idea, hice algunas pruebas (ver la pregunta actualizada), el determinante de la matriz parece ser un poco menos preciso que la media.
Franck Dernoncourt
2
@FranckDernoncourt, no está claro para mí si las matrices simétricas que estás simulando son necesariamente definitivas positivas. ¿Siempre tienen valores propios positivos?
Andrew M

Respuestas:

3

El determinante de la covarianza no es una idea terrible, pero probablemente desee utilizar el inverso del determinante. Imagine los contornos (líneas de igual densidad de probabilidad) de una distribución bivariada. Puede pensar en el determinante como (aproximadamente) medir el volumen de un contorno dado. Entonces, un conjunto de variables altamente correlacionadas en realidad tiene menos volumen, porque los contornos están tan estirados.

Por ejemplo: si Xnorte(0 0,1) y Y=X+ϵ, dónde ϵnorte(0 0,.01), entonces

Cov(X,Y)=[1111.01]
entonces
Corr(X,Y)[1.995.9951]
entonces el determinante es .0099. Por otro lado, siX,Y son independientes norte(0 0,1), entonces el determinante es 1.

A medida que cualquier par de variables se vuelve más linealmente dependiente, el determinante se acerca a cero, ya que es el producto de los valores propios de la matriz de correlación. Por lo tanto, el determinante puede no ser capaz de distinguir entre un solo par de variables casi dependientes, a diferencia de muchos pares, y es poco probable que sea un comportamiento que desee. Sugeriría simular tal escenario. Podrías usar un esquema como este:

  1. Fijar una dimensión P, un rango aproximado r, y ser una constante grande
  2. Supongamos que A [1], ..., A [r] sean vectores aleatorios, dibujados a partir de la distribución de N (0, s)
  3. Establecer Sigma = Identidad (P)
  4. Para i = 1..r: Sigma = Sigma + A [i] * A [i] ^ T
  5. Establezca rho como Sigma escalado como una matriz de correlación

Entonces rho tendrá un rango aproximado r, que determina cuántas variables casi linealmente independientes tiene. Puede ver cómo el determinante refleja el rango aproximado r y la escala s.

Andrew M
fuente