Tôi có 2 ma trận tương quan và (sử dụng hệ số tương quan tuyến tính của Pearson thông qua Corrcoef ()) của Matlab . Tôi muốn để định lượng bao nhiêu "hơn mối tương quan" chứa so . Có bất kỳ số liệu tiêu chuẩn hoặc kiểm tra cho điều đó?BB
Ví dụ: ma trận tương quan
chứa "nhiều tương quan" hơn
Tôi nhận thức của M nghiệm của Box , được sử dụng để xác định xem hai hoặc hơn ma trận phương sai bằng nhau (và có thể được sử dụng cho các ma trận tương quan cũng kể từ khi sau này là tương tự như các ma trận hiệp phương sai của biến ngẫu nhiên chuẩn).
Ngay bây giờ tôi đang so sánh và thông qua giá trị trung bình của các giá trị tuyệt đối của các phần tử không đường chéo của chúng, tức là. (Tôi sử dụng tính đối xứng của ma trận tương quan trong công thức này). Tôi đoán rằng có thể có một số số liệu thông minh hơn.B 2
Theo nhận xét của Andy W về yếu tố quyết định ma trận, tôi đã chạy thử nghiệm để so sánh các số liệu:
- Giá trị trung bình của các giá trị tuyệt đối của các phần tử không chéo của chúng :
- Ma trận xác định : :
Đặt và hai ma trận đối xứng ngẫu nhiên với các ma trận trên đường chéo có kích thước . Tam giác trên (đường chéo loại trừ) của được điền với các số float ngẫu nhiên từ 0 đến 1. Tam giác trên (loại trừ đường chéo) của được điền với các số float ngẫu nhiên từ 0 đến 0,9. Tôi tạo ra 10000 ma trận như vậy và thực hiện một số phép tính:B 10 × 10 A B
- 80,75% thời gian
- 63,01% thời gian
Đưa ra kết quả tôi sẽ có xu hướng nghĩ rằng là một số liệu tốt hơn.
Mã 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
Ví dụ về ma trận đối xứng ngẫu nhiên được tạo với các ma trận trên đường chéo:
>> 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