Quantifier la quantité de «plus de corrélation» qu'une matrice de corrélation A contient par rapport à une matrice de corrélation B


9

J'ai 2 matrices de corrélation et (en utilisant le coefficient de corrélation linéaire de Pearson via corrcoef () de Matlab ). Je voudrais quantifier combien « plus de corrélation » contient par rapport à . Existe-t-il une métrique standard ou un test pour cela?ABAB

Par exemple, la matrice de corrélation

entrez la description de l'image ici

contient "plus de corrélation" que

entrez la description de l'image ici

Je connais le test M de Box , qui est utilisé pour déterminer si deux ou plusieurs matrices de covariance sont égales (et peuvent également être utilisées pour les matrices de corrélation puisque ces dernières sont les mêmes que les matrices de covariance des variables aléatoires normalisées).

En ce moment, je compare et via la moyenne des valeurs absolues de leurs éléments non diagonaux, c'est-à-dire. (J'utilise la symétrie de la matrice de corrélation dans cette formule). Je suppose qu'il pourrait y avoir des mesures plus intelligentes.AB2n2n1i<jn|xi,j|


Suite au commentaire d'Andy W sur le déterminant de la matrice, j'ai mené une expérience pour comparer les métriques:

  • Moyenne des valeurs absolues de leurs éléments non diagonaux :metricmean()
  • Déterminant de la matrice : :metricdeterminant()

Soit et deux matrices symétriques aléatoires avec celles sur la diagonale de dimension . Le triangle supérieur (diagonale exclue) de est peuplé de flotteurs aléatoires de 0 à 1. Le triangle supérieur (diagonal exclu) de est peuplé de flotteurs aléatoires de 0 à 0,9. Je génère 10000 matrices de ce type et je compte:AB10×10AB

  • metricmean(B)metricmean(A) 80,75% du temps
  • metricdeterminant(B)metricdeterminant(A) 63,01% du temps

Étant donné le résultat, j'aurais tendance à penser que est une meilleure métrique.metricmean(B)

Code 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

Exemple d'une matrice symétrique aléatoire générée avec celles sur la diagonale:10×10

>> 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

2
Par curiosité, quel genre de question essayez-vous de répondre avec cela?
shadowtalker

1
Le déterminant de la matrice peut être considéré comme le volume de la matrice dans l'espace multidimensionnel. Cela pourrait être mauvais si vous avez des matrices de corrélation mal conditionnées.
Andy W


1
@AndyW Merci, c'est une excellente idée, j'ai fait quelques tests (voir la question mise à jour), le déterminant de la matrice semble être un peu moins précis que la moyenne.
Franck Dernoncourt

2
@FranckDernoncourt, il n'est pas clair pour moi si les matrices symétriques que vous simulez sont nécessairement définies positives. Ont-ils toujours des valeurs propres positives?
Andrew M

Réponses:


3

Le déterminant de la covariance n'est pas une idée terrible, mais vous voudrez probablement utiliser l' inverse du déterminant. Imaginez les contours (lignes de densité de probabilité égale) d'une distribution bivariée. Vous pouvez considérer le déterminant comme mesurant (approximativement) le volume d'un contour donné. Ensuite, un ensemble de variables hautement corrélées a en fait moins de volume, car les contours sont tellement étirés.

Par exemple: Si et , où , alors donc donc le déterminant est . En revanche, si sont indépendants , alors le déterminant est 1.XN(0,1)Y=X+ϵϵN(0,.01)

Cov(X,Y)=[1111.01]
Corr(X,Y)[1.995.9951]
.0099X,YN(0,1)

Comme toute paire de variables devient de plus en plus dépendante linéairement, le déterminant se rapproche de zéro, car il est le produit des valeurs propres de la matrice de corrélation. Ainsi, le déterminant peut ne pas être en mesure de faire la distinction entre une seule paire de variables presque dépendantes, par opposition à de nombreuses paires, et il est peu probable que ce soit un comportement que vous désirez. Je suggérerais de simuler un tel scénario. Vous pouvez utiliser un schéma comme celui-ci:

  1. Fixe une dimension P, un rang approximatif r, et soit s une grande constante
  2. Soit A [1], ..., A [r] des vecteurs aléatoires, tirés iid de la distribution N (0, s)
  3. Définir Sigma = identité (P)
  4. Pour i = 1..r: Sigma = Sigma + A [i] * A [i] ^ T
  5. Définir rho pour être mis à l'échelle Sigma en tant que matrice de corrélation

Alors rho aura un rang r approximatif, qui détermine le nombre de variables indépendantes presque linéairement que vous avez. Vous pouvez voir comment le déterminant reflète le rang approximatif r et l'échelle s.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.