Ich habe 2 Korrelationsmatrizen und (unter Verwendung des linearen Korrelationskoeffizienten nach Pearson durch Matlab's corrcoef () ). Ich möchte quantifizieren, wie viel "mehr Korrelation" Vergleich zu enthält . Gibt es dafür eine Standardmetrik oder einen Standardtest?B.B.
ZB die Korrelationsmatrix
enthält "mehr Korrelation" als
Mir ist der M-Test der Box bekannt , mit dem bestimmt wird, ob zwei oder mehr Kovarianzmatrizen gleich sind (und der auch für Korrelationsmatrizen verwendet werden kann, da letztere mit den Kovarianzmatrizen standardisierter Zufallsvariablen identisch sind).
Im Moment vergleiche ich und über den Mittelwert der Absolutwerte ihrer nicht diagonalen Elemente, dh. (Ich verwende die Symmetrie der Korrelationsmatrix in dieser Formel). Ich denke, dass es einige klügere Metriken geben könnte.B 2
Nach dem Kommentar von Andy W zur Matrixdeterminante führte ich ein Experiment durch, um die Metriken zu vergleichen:
- Mittelwert der absoluten Werte ihrer nicht diagonalen Elemente :
- Matrixdeterminante : :
Sei und zwei zufällige symmetrische Matrix mit Einsen auf der Diagonale der Dimension . Das obere Dreieck (diagonal ausgeschlossen) von ist mit zufälligen Gleitkommazahlen von 0 bis 1 gefüllt. Das obere Dreieck (diagonal ausgeschlossen) von ist mit zufälligen Gleitkommazahlen von 0 bis 0,9 besetzt. Ich generiere 10000 solcher Matrizen und zähle:B 10 × 10 A B.
- 80,75% der Zeit
- 63,01% der Zeit
Angesichts des Ergebnisses würde ich eher denken, dass eine bessere Metrik ist.
Matlab-Code:
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
Beispiel einer erzeugten zufälligen symmetrischen Matrix mit Einsen auf der Diagonale:
>> 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