Mengkuantifikasi seberapa banyak “lebih banyak korelasi” yang terkandung dalam matriks korelasi A dibandingkan dengan matriks korelasi B

9

Saya memiliki 2 matriks korelasi dan (menggunakan koefisien korelasi linear Pearson melalui corrcoef Matlab () ). Saya ingin menghitung berapa banyak "lebih korelasi" berisi dibandingkan dengan . Apakah ada metrik atau tes standar untuk itu?ABAB

Misalnya matriks korelasi

masukkan deskripsi gambar di sini

mengandung "lebih banyak korelasi" daripada

masukkan deskripsi gambar di sini

Saya mengetahui Box M Test , yang digunakan untuk menentukan apakah dua atau lebih matriks kovarians sama (dan dapat digunakan untuk matriks korelasi juga karena yang terakhir sama dengan matriks kovarians dari variabel acak standar).

Saat ini saya sedang membandingkan dan melalui nilai rata-rata absolut dari elemen non-diagonal mereka, yaitu. (Saya menggunakan simetri matriks korelasi dalam rumus ini). Saya kira mungkin ada beberapa metrik yang lebih pintar.AB2n2n1i<jn|xi,j|


Mengikuti komentar Andy W pada penentu matriks, saya menjalankan percobaan untuk membandingkan metrik:

  • Berarti nilai absolut dari elemen non-diagonal mereka :metricmean()
  • Penentu matriks : :metricdeterminant()

Misalkan dan dua matriks simetris acak dengan yang ada pada diagonal dimensi . Segitiga atas (tidak termasuk diagonal) dari diisi dengan mengapung acak dari 0 hingga 1. Segitiga atas (tidak termasuk diagonal) dari diisi dengan pelampung acak dari 0 hingga 0,9. Saya menghasilkan 10.000 matriks seperti itu dan menghitung:AB10×10AB

  • metricmean(B)metricmean(A) 80,75% dari waktu
  • metricdeterminant(B)metricdeterminant(A) 63,01% dari waktu

Mengingat hasilnya, saya akan cenderung berpikir bahwa adalah metrik yang lebih baik.metricmean(B)

Kode 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

Contoh matriks simetrik acak dihasilkan dengan yang ada di diagonal: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
Franck Dernoncourt
sumber
2
Karena penasaran, pertanyaan macam apa yang Anda coba jawab dengan ini?
shadowtalker
1
Penentu matriks dapat dianggap volume matriks dalam ruang multidimensi. Ini bisa buruk meskipun jika Anda memiliki matriks korelasi terkondisi buruk.
Andy W
@ssdecontrol Tentu, saya mencoba menemukan subset variabel acak yang paling tidak berkorelasi dari matriks korelasi .
Franck Dernoncourt
1
@AndyW Terima kasih, itu ide yang bagus, saya melakukan beberapa pengujian (lihat pertanyaan yang diperbarui), penentu matriks tampaknya sedikit kurang akurat daripada rata-rata.
Franck Dernoncourt
2
@ FranckDernoncourt, tidak jelas bagi saya jika matriks simetris yang Anda simulasi adalah pasti positif. Apakah mereka selalu memiliki nilai eigen positif?
Andrew M

Jawaban:

3

Penentu kovarian bukanlah ide yang buruk, tetapi Anda mungkin ingin menggunakan kebalikan dari penentu. Bayangkan kontur (garis kepadatan probabilitas yang sama) dari distribusi bivariat. Anda dapat menganggap penentu sebagai (kurang-lebih) mengukur volume kontur yang diberikan. Kemudian seperangkat variabel yang sangat berkorelasi sebenarnya memiliki volume lebih sedikit, karena konturnya sangat memanjang.

Misalnya: Jika dan , di mana , maka jadi sehingga determinannya adalah . Di sisi lain, jika adalah independen , maka determinannya adalah 1.XN(0,1)Y=X+ϵϵN(0,.01)

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

Karena setiap pasangan variabel menjadi lebih hampir linear, maka determinan mendekati nol, karena merupakan produk dari nilai eigen dari matriks korelasi. Jadi penentu mungkin tidak dapat membedakan antara satu pasangan variabel yang hampir tergantung, sebagai lawan dari banyak pasangan, dan ini tidak mungkin menjadi perilaku yang Anda inginkan. Saya sarankan mensimulasikan skenario seperti itu. Anda dapat menggunakan skema seperti ini:

  1. Perbaiki dimensi P, perkiraan r, dan mari menjadi konstanta besar
  2. Misalkan A [1], ..., A [r] menjadi vektor acak, diambil iid dari distribusi N (0, s)
  3. Set Sigma = Identity (P)
  4. Untuk i = 1..r: Sigma = Sigma + A [i] * A [i] ^ T
  5. Setel rho menjadi Sigma diskalakan sebagai matriks korelasi

Kemudian rho akan memiliki perkiraan peringkat r, yang menentukan berapa banyak variabel independen hampir linier yang Anda miliki. Anda dapat melihat bagaimana determinan mencerminkan perkiraan r dan penskalaan s.

Andrew M
sumber