एक कागज , रेनडॉवस्की, कुरोवीका, और जो (एलकेजे), 2009 द्वारा दाखलताओं और विस्तारित प्याज पद्धति के आधार पर यादृच्छिक सहसंबंध वाले मेट्रिसेस उत्पन्न करता है, यादृच्छिक सहसंबंध मेट्रिसेस उत्पन्न करने के दो कुशल तरीकों का एक एकीकृत उपचार और प्रदर्शनी प्रदान करता है। दोनों विधियां नीचे परिभाषित एक निश्चित सटीक अर्थ में एक समान वितरण से मैट्रिसेस उत्पन्न करने की अनुमति देती हैं, लागू करने के लिए सरल हैं, तेज हैं, और मनोरंजक नामों के होने का एक अतिरिक्त लाभ है।
विकर्ण पर लोगों के साथ आकार का एक वास्तविक सममित मैट्रिक्स में अद्वितीय ऑफ-विकर्ण तत्व होते हैं और इसलिए इन्हें में एक बिंदु के रूप में पैराड्राइक किया जा सकता है। । इस स्थान का प्रत्येक बिंदु एक सममित मैट्रिक्स से मेल खाता है, लेकिन उनमें से सभी सकारात्मक-निश्चित नहीं हैं (जैसा कि सहसंबंध मैट्रीस होना है)। सहसंबंध की परिपक्वताएं इसलिए (वास्तव में एक जुड़ा हुआ उत्तल उपसमुच्चय) का एक उप-समूह बनाती हैं, और दोनों विधियाँ इस उपसमुच्चय पर एक समान वितरण से अंक उत्पन्न कर सकती हैं।d ( d - 1 ) / 2 R d ( d - 1 ) / 2 R d ( d - 1 ) / 2d×dd(d−1)/2Rd(d−1)/2Rd(d−1)/2
मैं प्रत्येक विधि का अपना MATLAB कार्यान्वयन प्रदान करूँगा और उन्हें साथ चित्रित करूँगा ।d=100
प्याज की विधि
प्याज विधि एक अन्य पेपर (एलकेजे में रेफरी # 3) से आती है और इसका नाम इस तथ्य से जुड़ा है कि सहसंबंध मैट्रिक्स मैट्रिक्स के साथ शुरू होते हैं और इसे स्तंभ और पंक्ति द्वारा पंक्ति में बढ़ते हैं। परिणाम वितरण समान है। मैं वास्तव में विधि के पीछे के गणित को नहीं समझता (और वैसे भी दूसरी विधि को पसंद करता हूं), लेकिन यहाँ परिणाम है:1×1
यहां और प्रत्येक सबप्लॉट के शीर्षक के नीचे सबसे छोटा और सबसे बड़ा आइगेनवेल्स, और निर्धारक (सभी आईजेनवल का उत्पाद) दिखाया गया है। यहाँ कोड है:
%// ONION METHOD to generate random correlation matrices distributed randomly
function S = onion(d)
S = 1;
for k = 2:d
y = betarnd((k-1)/2, (d-k)/2); %// sampling from beta distribution
r = sqrt(y);
theta = randn(k-1,1);
theta = theta/norm(theta);
w = r*theta;
[U,E] = eig(S);
R = U*E.^(1/2)*U'; %// R is a square root of S
q = R*w;
S = [S q; q' 1]; %// increasing the matrix size
end
end
विस्तारित प्याज विधि
LKJ ने इस विधि को थोड़ा संशोधित किया, ताकि आनुपातिक वितरण से सहसंबंध matrices का नमूना लिया जा सके । बड़ा , बड़ा निर्धारक होगा, जिसका अर्थ है कि संबंध सहसंबंध matrices अधिक से अधिक पहचान मैट्रिक्स से संपर्क करेंगे। मान समरूप वितरण से मेल खाता है। मैट्रिस के नीचे की आकृति में साथ उत्पन्न होते हैं । [ डी ई टीC[detC]η−1ηη=1η=1,10,100,1000,10000,100000
वैनिला प्याज विधि के रूप में परिमाण के उसी क्रम के निर्धारक को प्राप्त करने के लिए किसी कारण से, मुझे और not लगाने की आवश्यकता है (जैसा कि एलकेजे द्वारा दावा किया गया है)। सुनिश्चित नहीं है कि गलती कहां है।η=0η=1
%// EXTENDED ONION METHOD to generate random correlation matrices
%// distributed ~ det(S)^eta [or maybe det(S)^(eta-1), not sure]
function S = extendedOnion(d, eta)
beta = eta + (d-2)/2;
u = betarnd(beta, beta);
r12 = 2*u - 1;
S = [1 r12; r12 1];
for k = 3:d
beta = beta - 1/2;
y = betarnd((k-1)/2, beta);
r = sqrt(y);
theta = randn(k-1,1);
theta = theta/norm(theta);
w = r*theta;
[U,E] = eig(S);
R = U*E.^(1/2)*U';
q = R*w;
S = [S q; q' 1];
end
end
बेल की विधि
वाइन विधि मूल रूप से जो (एलकेजे में जे) द्वारा सुझाई गई थी और एलकेजे द्वारा सुधार किया गया था। मुझे यह अधिक पसंद है, क्योंकि यह वैचारिक रूप से आसान है और संशोधित करना भी आसान है। विचार आंशिक सहसंबंधों को उत्पन्न करने के लिए है (वे स्वतंत्र हैं और बिना किसी बाधा के से कोई भी मान हो सकते हैं ) और फिर उन्हें पुनरावर्ती सूत्र के माध्यम से कच्चे सहसंबंधों में परिवर्तित कर सकते हैं। गणना को एक निश्चित क्रम में व्यवस्थित करना सुविधाजनक है, और इस ग्राफ को "बेल" के रूप में जाना जाता है। महत्वपूर्ण रूप से, यदि आंशिक सहसंबंधों को विशेष बीटा वितरण (मैट्रिक्स में अलग-अलग कोशिकाओं के लिए) से मापा जाता है, तो परिणामस्वरूप मैट्रिक्स समान रूप से वितरित किया जाएगा। यहाँ फिर से, LKJ आनुपातिक वितरण से नमूने के लिए एक अतिरिक्त पैरामीटर पेश करता हैd(d−1)/2[−1,1]η[detC]η−1 । परिणाम विस्तारित प्याज के समान है:
%// VINE METHOD to generate random correlation matrices
%// distributed ~ det(S)^eta [or maybe det(S)^(eta-1), not sure]
function S = vine(d, eta)
beta = eta + (d-1)/2;
P = zeros(d); %// storing partial correlations
S = eye(d);
for k = 1:d-1
beta = beta - 1/2;
for i = k+1:d
P(k,i) = betarnd(beta,beta); %// sampling from beta
P(k,i) = (P(k,i)-0.5)*2; %// linearly shifting to [-1, 1]
p = P(k,i);
for l = (k-1):-1:1 %// converting partial correlation to raw correlation
p = p * sqrt((1-P(l,i)^2)*(1-P(l,k)^2)) + P(l,i)*P(l,k);
end
S(k,i) = p;
S(i,k) = p;
end
end
end
आंशिक सहसंबंधों के मैनुअल नमूने के साथ बेल विधि
जैसा कि ऊपर देखा जा सकता है, लगभग-विकर्ण सहसंबंध मैट्रीस में समान वितरण परिणाम। लेकिन मजबूत सहसंबंधों के लिए कोई भी बेल विधि को आसानी से संशोधित कर सकता है (यह एलकेजे पेपर में वर्णित नहीं है, लेकिन सीधा है): इसके लिए एक वितरण से आंशिक सहसंबंधों का नमूना होना चाहिए, जो आसपास केंद्रित है । नीचे मैं उन्हें बीटा वितरण ( से ) तक साथ नमूना देता हूं । बीटा वितरण के जितने छोटे पैरामीटर हैं, उतना ही यह किनारों के पास केंद्रित है।[ 0 , 1 ] [ - 1 , 1 ] α = β = 50 , 20 , 10 , 5 ,±1[0,1][−1,1]α=β=50,20,10,5,2,1
ध्यान दें कि इस मामले में वितरण को क्रमचय अपरिवर्तनीय होने की गारंटी नहीं है, इसलिए मैं पीढ़ी के बाद यादृच्छिक रूप से पंक्तियों और स्तंभों की अनुमति देता हूं।
%// VINE METHOD to generate random correlation matrices
%// with all partial correlations distributed ~ beta(betaparam,betaparam)
%// rescaled to [-1, 1]
function S = vineBeta(d, betaparam)
P = zeros(d); %// storing partial correlations
S = eye(d);
for k = 1:d-1
for i = k+1:d
P(k,i) = betarnd(betaparam,betaparam); %// sampling from beta
P(k,i) = (P(k,i)-0.5)*2; %// linearly shifting to [-1, 1]
p = P(k,i);
for l = (k-1):-1:1 %// converting partial correlation to raw correlation
p = p * sqrt((1-P(l,i)^2)*(1-P(l,k)^2)) + P(l,i)*P(l,k);
end
S(k,i) = p;
S(i,k) = p;
end
end
%// permuting the variables to make the distribution permutation-invariant
permutation = randperm(d);
S = S(permutation, permutation);
end
यहां बताया गया है कि ऑफ-विकर्ण तत्वों के हिस्टोग्राम ऊपर के मैट्रिसेस को देखते हैं (वितरण का एकरस रूप से बढ़ता है):
अद्यतन: यादृच्छिक कारकों का उपयोग करना
कुछ मजबूत सहसंबंधों के साथ यादृच्छिक सहसंबंध मैट्रिक्स बनाने का एक वास्तव में सरल तरीका @shabbychef द्वारा उत्तर में इस्तेमाल किया गया था, और मैं इसे यहाँ भी वर्णन करना चाहूंगा। यह विचार बेतरतीब ढंग से कई ( ) लोडिंग ( आकार का रैंडम मैट्रिक्स ) उत्पन्न करने के लिए है , सहसंयोजक मैट्रिक्स (जो निश्चित रूप से पूर्ण रैंक नहीं होगा ) और इसे जोड़ने के लिए एक यादृच्छिक विकर्ण मैट्रिक्स सकारात्मक तत्वों के साथ पूर्ण रैंक। परिणामी सहसंयोजक मैट्रिक्स को सहसंबंध मैट्रिक्स बनने के लिए सामान्यीकृत किया जा सकता है, देकर।k<dWk×dWW⊤DB=WW⊤+DC=E−1/2BE−1/2, जहां एक विकर्ण मैट्रिक्स है, जिसमें के समान विकर्ण है । यह बहुत सरल है और यह ट्रिक करता है। यहाँ लिए कुछ उदाहरण सहसंबंध मेट्रिसेस हैं :EBk=100,50,20,10,5,1
और कोड:
%// FACTOR method
function S = factor(d,k)
W = randn(d,k);
S = W*W' + diag(rand(1,d));
S = diag(1./sqrt(diag(S))) * S * diag(1./sqrt(diag(S)));
end
यहाँ आंकड़े उत्पन्न करने के लिए इस्तेमाल किया जाने वाला रैपिंग कोड है:
d = 100; %// size of the correlation matrix
figure('Position', [100 100 1100 600])
for repetition = 1:6
S = onion(d);
%// etas = [1 10 100 1000 1e+4 1e+5];
%// S = extendedOnion(d, etas(repetition));
%// S = vine(d, etas(repetition));
%// betaparams = [50 20 10 5 2 1];
%// S = vineBeta(d, betaparams(repetition));
subplot(2,3,repetition)
%// use this to plot colormaps of S
imagesc(S, [-1 1])
axis square
title(['Eigs: ' num2str(min(eig(S)),2) '...' num2str(max(eig(S)),2) ', det=' num2str(det(S),2)])
%// use this to plot histograms of the off-diagonal elements
%// offd = S(logical(ones(size(S))-eye(size(S))));
%// hist(offd)
%// xlim([-1 1])
end