Etkili bir şekilde rasgele pozitif-yarı-sonlu korelasyon matrisleri nasıl üretilir?


38

Verimli bir şekilde pozitif-yarı-sonsuz (PSD) korelasyon matrisleri üretebilmek istiyorum. Oluşturulacak matrislerin boyutunu arttırdığım için yöntemim çarpıcı bir şekilde yavaşlıyor.

  1. Herhangi bir etkin çözüm önerebilir misiniz? Matlab'daki örneklerin farkındaysanız çok minnettar olurum.
  2. Bir PSD korelasyon matrisi oluştururken, üretilecek matrisleri tanımlamak için parametreleri nasıl seçersiniz? Ortalama bir korelasyon, korelasyonların standart sapması, özdeğerler?

Yanıtlar:


16

Geriye doğru yapabilirsiniz: her matrisi (tüm simetrik PSD matrislerinin kümesi ) şu şekilde ayrıştırılabilir: p × pCR++pp×p

OC=OTDO , bir ortonormal matristirO

elde etmek için önce rastgele bir temel oluşturun ( tipik olarak de rastgele vektörlerdir ). Oradan, almak için Gram-Schmidt ortogonalizasyon işlemini kullanın.( v 1 , . . . , V s ) v ı ( - 1 , 1 ), ( u 1 , . . . . , U p ) = OO(v1,...,vp)vi(1,1)(u1,....,up)=O

R , rastgele bir bazın GS ortogonalizasyonunu verimli bir şekilde yapabilen, yani 'uzak' paket gibi büyük boyutlar için bile yapabilecek çok sayıda pakete sahiptir. GS algoritmasını wiki'de bulabilecek olsanız da, tekerleği yeniden icat etmemek ve bir matlab uygulaması için gitmemek daha iyidir (biri kesinlikle var, hiçbirini tavsiye edemiyorum).

Son olarak, öğelerinin tümü pozitiftir diyagonal matris (bu kolay oluşturmak için, yine,: oluşturmak , rasgele sayılar bunları kare, sıralama bunları bir kimlik çapraz yanına koyun ile matris).p p pDppp


3
(1) Elde edilen (OP tarafından talep edildiği gibi) bir korelasyon matrisi olmayacağına dikkat edin, çünkü köşegen üzerinde olmayacaklar. Tabii ki, köşegen üzerinde olanlar, olarak ayarlanarak yeniden hesaplanabilir , burada , ile aynı köşegen ile köşegen bir matrisdir . (2) Yanılmıyorsam, bu, tüm köşegen dışı öğelerin civarında yoğunlaştığı korelasyon matrisleri ile sonuçlanacaktır, bu nedenle OP'nin aradığı esneklik yoktur (OP ortalama bir korelasyon ayarlamak " istedi) , korelasyonların standart sapması, özdeğerler " )e - 1 / 2 ° C D - 1 / 2 D 0CE1/2CE1/2EC0
amip Reinstate Monica,

@ amoeba: Sizin de belirttiğiniz gibi (1) 'in çözümü önemsiz olduğu için (2)' yi ele alacağım. Bir PSD matrisinin (ve dolayısıyla bir kovaryans ve ayrıca bir korelasyon matrisi) 'şeklinin' (köşegen elemanların içi ve dışı ilişkisi) tek numara karakterizasyonu durum numarasıdır. Ve yukarıda açıklanan yöntem üzerinde tam kontrol sağlar. '0' etrafındaki köşegen olmayan elemanların konsantrasyonu ', PSD matrislerini üretmek için kullanılan yöntemin bir özelliği değildir, aksine, matrisin PSD olmasını ve büyük olmasını sağlamak için gerekli kısıtlamaların bir sonucudur . p
user603

Tüm büyük PSD matrislerinin sıfıra yakın diyagonal olmayan unsurlar olduğunu mu söylüyorsunuz? Katılmıyorum, öyle değil. Bazı örnekler için buradaki cevabımı kontrol edin: Verilen standart sapma ile yaklaşık olarak normalde çapraz-dışı girişleri olan rastgele korelasyon matrisi nasıl oluşturulur? Ama bir doğrudan köşegen ve sabit bir değere tüm olanları sahip bir kare matris, bunun nedeni böyle olmadığını görebilirsiniz her yerde köşegen dışı is PSD ve keyfi büyük (ancak aşağıda tabii olabilir ). ρ 1ρρ1
amip diyor Reinstate Monica

@ amoeba: o zaman zorunluluk gereği, hem pozitif hem de negatif olmalarına izin verilen büyük korelasyon matrislerinin köşegeninin 0'a yakın olduklarını varsaymak yanlıştı. Aydınlatıcı örnek için teşekkürler.
user603

1
Rasgele korelasyon matrislerinin üretilmesi hakkında çok güzel bir makale okudum ve burada kendi cevabımı verdim (ve bu bağlantılı konudaki başka bir cevabı da). Bence ilginç bulabilirsin.
amip diyor Reinstate Monica

27

Bir kağıt Lewandowski, Kurowicka ve Joe (LKJ), 2009 tarafından asma ve genişletilmiş soğan yöntemine dayalı rastgele korelasyon matrisleri üretilmesi, rastgele korelasyon matrislerinin üretilmesi için iki verimli yöntemin birleşik bir muamele ve anlatımını sağlar. Her iki yöntem de , aşağıda tanımlanmış olan kesin bir anlamda düzgün bir dağılımdan matrisler üretilmesine izin verir , uygulanması kolaydır, hızlıdır ve eğlenceli adlara sahip olma avantajına sahiptir.

Çaprazdakilerle boyutunda gerçek simetrik bir matris , benzersiz çapraz elemanlar içerir ve bu nedenle . Bu uzaydaki her nokta simetrik bir matrise karşılık gelir, ancak hepsi pozitif-kesin değildir (korelasyon matrislerinin olması gerektiği gibi). Korelasyon matrisleri bu nedenle bir (aslında bağlı bir dışbükey alt küme) alt kümesi oluşturur ve her iki yöntem de bu alt küme üzerinde eşit bir dağılımdan noktalar oluşturabilir.d ( d - 1 ) / 2 R, D ( D - 1 ) / 2 R, D ( D - 1 ) / 2d×dd(d1)/2Rd(d1)/2Rd(d1)/2

Her metodun kendi MATLAB uygulamasını sunacağım ve bunları ile göstereceğim .d=100


Soğan yöntemi

Soğan yöntemi başka bir kağıttan gelir (LKJ'de ref # 3) ve ismini, korelasyon matrislerinin matris ile başlayıp sütuna ve satır satır büyüterek ürettikleri gerçeğine sahiptir . Elde edilen dağılım aynı. Yöntemin arkasındaki matematiği gerçekten anlamıyorum (ve yine de ikinci yöntemi tercih ediyorum), ancak sonuç şu:1×1

Soğan yöntemi

Burada ve her alt grafiğin başlığının altında en küçük ve en büyük özdeğerler ve determinant (tüm özdeğerlerin çarpımı) gösterilir. İşte kod:

%// 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

Genişletilmiş soğan yöntemi

LKJ, korelasyon matrisleri 'nin orantılı bir dağılımdan örnek alabilmesi için bu yöntemi hafifçe değiştirir . Daha büyük , daha büyük oluşturulan korelasyon matrisleri daha kimlik matrisi yaklaşacaktır yani belirleyici olacaktır. değeri üniform dağılıma karşılık gelir. Aşağıdaki şekilde matrisler ile üretilir . [ d e tC η η = 1 η = 1 , 10 , 100 , 1000 , 10[detC]η1ηη=1η=1,10,100,1000,10000,100000

Genişletilmiş soğan yöntemi

η=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

Asma yöntemi

d(d1)/2[1,1]herhangi bir kısıtlama olmadan) ve sonra bunları özyinelemeli bir formülle ham korelasyonlara dönüştürün. Hesaplamanın belirli bir düzende yapılması uygundur ve bu grafik "asma" olarak bilinir. Önemli olarak, kısmi korelasyonlar belirli beta dağılımlarından örneklenirse (matristeki farklı hücreler için farklı), elde edilen matris düzgün bir şekilde dağıtılacaktır. Yine burada, LKJ ek parametresi sunar.η[detC]η1

Asma yöntemi

%// 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

Kısmi korelasyonların manuel örneklemesi ile asma metodu

±1[0,1][1,1]α=β=50,20,10,5,2,1. Beta dağılımının parametreleri ne kadar küçük olursa, kenarlara o kadar fazla konsantre olur.

Manuel örneklemeli asma yöntemi

Bu durumda dağılımın permütasyon değişmezliği garanti edilmediğine dikkat edin, bu yüzden üretimden sonra rastgele sıralara ve sütunlara izin veriyorum.

%// 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

Çapraz-olmayan elemanların histogramlarının yukarıdaki matrisleri nasıl aradığı (dağılımın değişmesi monoton olarak artar):

Çapraz elemanlar


Güncelleme: rastgele faktörlerin kullanılması

k<dWk×dWWDB=WW+DC=E1/2BE1/2EBk=100,50,20,10,5,1

rastgele faktörlerden rastgele korelasyon matrisleri

Ve kod:

%// 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

Şekilleri oluşturmak için kullanılan sarma kodu:

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

2
Bu harika bir anı, bir şey söylediğim için memnunum!
shadowtalker

Asma bazlı korelasyon matrisinin matlab kodunu R'ye çevirip test ettikten sonra, sütun 1'deki korelasyonların yoğunluğu her zaman sonraki sütunlardan farklıydı. Bir şeyi yanlış çevirmiş olabilirim, ama belki de bu not birine yardımcı oluyor.
Charlie,

3
R kullanıcıları için, clusterGeneration paketindeki rcorrmatrix işlevi (W Qui ve H. Joe tarafından yazılmıştır) asma yöntemini uygular.
RNM

14

AATAyT(ATA)y0yyT(ATA)y=(Ay)TAy=||Ay||hangisi olumsuz. Yani, Matlab’da, sadece dene

A = randn(m,n);   %here n is the desired size of the final matrix, and m > n
X = A' * A;

Uygulamaya bağlı olarak, bu size istediğiniz özdeğerlerin dağılımını vermeyebilir; Kwak'ın cevabı bu konuda çok daha iyi. XBu kod pasajı tarafından üretilen özdeğerler , Marchenko-Pastur dağılımını takip etmelidir.

Hisse senetlerinin korelasyon matrislerini simüle etmek için, biraz farklı bir yaklaşım isteyebilirsiniz:

k = 7;      % # of latent dimensions;
n = 100;    % # of stocks;
A = 0.01 * randn(k,n);  % 'hedgeable risk'
D = diag(0.001 * randn(n,1));   % 'idiosyncratic risk'
X = A'*A + D;
ascii_hist(eig(X));    % this is my own function, you do a hist(eig(X));
-Inf <= x <  -0.001 : **************** (17)
-0.001 <= x <   0.001 : ************************************************** (53)
 0.001 <= x <   0.002 : ******************** (21)
 0.002 <= x <   0.004 : ** (2)
 0.004 <= x <   0.005 :  (0)
 0.005 <= x <   0.007 : * (1)
 0.007 <= x <   0.008 : * (1)
 0.008 <= x <   0.009 : *** (3)
 0.009 <= x <   0.011 : * (1)
 0.011 <= x <     Inf : * (1)

1
ascii_hist işlevinizi herhangi bir şansla paylaşmak ister misiniz?
btown 01

@ btown marjı içermek için çok küçük!
shabbychef

1
yT(ATA)y=(Ay)TAy=||Ay||

8

DA=QDQTQ


M.: Güzel referans: Bu en etkili çözüm gibi görünüyor (asimptotik).
whuber

3
@whuber: Heh, Golub ve Van Loan'dan (tabii ki) aldım; Bunu her zaman stres testi özdeğer / tekil değer yordamları için test matrisleri oluşturmaya yardımcı olmak için kullanırım. Kağıttan görülebileceği gibi, esasen kwak'ın önerdiği gibi rastgele bir matrisin ayrışması QR ile ayrışmaya eşdeğerdir, ancak daha verimli yapılması dışında. BTW Higham'ın Metin Matrisi Araç Kutusu'nda bunun bir MATLAB uygulaması var.
JM, istatistikçi değil

M.:> Matlab uygulaması için teşekkürler. R'deki Haar sözde rastgele matris oluşturucusunu bilen var mı?
user603

@kwak: Hiç bir fikrim yok, ancak henüz bir uygulama yoksa, MATLAB kodunu R'ye çevirmek çok zor olmamalı (eğer gerçekten yoksa bir tanesini kırmaya çalışabilirim); tek önkoşul R'nin sahip olduğundan emin olduğum pseudorandom normal değişkenleri için iyi bir jeneratör.
JM, istatistikçi değil

M:> evet, muhtemelen kendim çeviririm. Bağlantılar için teşekkürler, En iyi.
user603 17:10

4

Matrisler için bir dağıtım belirtmediniz. İki yaygın olan Wishart ve ters Wishart dağılımlarıdır. Bartlett ayrışma (aynı zamanda etkin bir şekilde rastgele bir ters Wishart matrisi elde etmek üzere çözülebilir) bir rastgele Wishart matris Cholesky factorisation verir.

Aslında, Cholesky alanı, yalnızca köşegenlerin negatif olmadığından emin olmanız gerektiğinden, diğer tür rastgele PSD matrislerini üretmenin uygun bir yoludur.


> Rastgele değil: aynı Whishard'dan oluşturulan iki matris birbirinden bağımsız olmayacaktır. Whishart'ı her nesilde değiştirmeyi planlıyorsanız, bu Whishart'ı ilk etapta nasıl üretmeyi düşünüyorsunuz?
user603

@kwak: Sorunuzu anlamıyorum: Bartlett'in ayrışması aynı Wishart dağıtımından bağımsız çekimler verecek.
Simon Byrne

> Bunu tekrar ifade etmeme izin ver, whishart dağılımının ölçek matrisini nereden aldın?
kullanıcı603

1
@kwak: bu dağılımın bir parametresidir ve bu yüzden sabittir. Dağıtımınızın istediğiniz özelliklerine (örneğin ortalama) dayalı olarak başlangıçta onu seçersiniz.
Simon Byrne

3

UTSU


Girişler bir üniforma yerine bir Normal dağılımdan üretilirse, bahsettiğiniz ayrıştırma SO (n) değişmez olmalıdır (ve bu nedenle Haar ölçüsüne göre eşit dağıtılmalıdır).
whuber

İlginç. Bunun için bir referans verebilir misiniz?
gappy

1
> bu yöntemle ilgili sorun, en küçük ve en büyük özdeğer oranını kontrol edememenizdir (ve rastgele oluşturulmuş veri kümenizin boyutunun sonsuzluğa giderken, bu oranın 1'e yakın olacağını düşünüyorum).
user603

1

Oluşturulan simetrik PSD matrisiniz üzerinde daha fazla kontrole sahip olmak istiyorsanız, örneğin sentetik bir doğrulama veri seti oluşturun, mevcut çok sayıda parametreye sahipsiniz. Simetrik bir PSD matrisi, N-boyutlu uzayda tüm ilgili serbestlik derecelerine sahip bir hiper elips'e karşılık gelir:

  1. Rotasyonlar.
  2. Eksen uzunlukları.

Böylece, 2 boyutlu bir matris için (yani 2d elips), 1 dönüş + 2 eksen = 3 parametreye sahip olacaksınız.

Σ=ODOTΣOD

Σ

figure;
mu = [0,0];
for i=1:16
    subplot(4,4,i)
    theta = (i/16)*2*pi;   % theta = rand*2*pi;
    U=[cos(theta), -sin(theta); sin(theta) cos(theta)];
    % The diagonal's elements control the lengths of the axes
    D = [10, 0; 0, 1]; % D = diag(rand(2,1));    
    sigma = U*D*U';
    data = mvnrnd(mu,sigma,1000);
    plot(data(:,1),data(:,2),'+'); axis([-6 6 -6 6]); hold on;
end

U


0

Test için kullandığım ucuz ve neşeli bir yaklaşım m N (0,1) n-vektörleri V [k] oluşturmak ve sonra P = d * I + Sum {V [k] * V [k] '} kullanmaktır. bir nxn psd matrisi olarak. M <n ile bu, d = 0 için tekil olacak ve küçük d için yüksek koşul sayısına sahip olacaktır.


2
> bu yöntemle ilgili sorun, en küçük ve en büyük özdeğer oranını kontrol edememenizdir (ve rastgele oluşturulmuş veri kümenizin boyutunun sonsuzluğa giderken, bu oranın 1'e yakın olacağını düşünüyorum).
user603

> Ayrıca, yöntem çok verimli değil (hesaplama açısından)
user603

1
"Rastgele matrisiniz", "köşegen artı sıra-1 matrisi" (DR1 matrisi) adı verilen özel olarak yapılandırılmış bir tanesidir, yani gerçekten iyi bir temsili rastgele matris değildir.
JM, istatistikçi değil
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.