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?
Misalnya matriks korelasi
mengandung "lebih banyak korelasi" daripada
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.
Mengikuti komentar Andy W pada penentu matriks, saya menjalankan percobaan untuk membandingkan metrik:
- Berarti nilai absolut dari elemen non-diagonal mereka :
- Penentu matriks : :
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:
- 80,75% dari waktu
- 63,01% dari waktu
Mengingat hasilnya, saya akan cenderung berpikir bahwa adalah metrik yang lebih baik.
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:
>> 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
sumber
Jawaban:
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.X∼N(0,1) Y=X+ϵ ϵ∼N(0,.01)
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:
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.
sumber