Rastgele verilerin SVD sonuçlarındaki garip korelasyonlar; matematiksel bir açıklaması var mı yoksa LAPACK hatası mı?


21

Hem Matlab hem de R'de çoğaltılabileceğim rastgele verilerin SVD sonucunda çok garip bir davranış gözlemliyorum. LAPACK kütüphanesinde sayısal bir sorun gibi görünüyor; bu mu?

Sıfır ortalama ve kimlik kovaryansına sahip boyutlu Gaussian'dan n=1000 örnek çiziyorum : . Onları veri matrisi . (İsteğe bağlı olarak merkezleyebilir ya da değil, aşağıdakileri etkilemez.) Sonra almak için tekil değer ayrıştırması (SVD) gerçekleştiriyorum . bazı iki özel öğesini ele alalım , örneğin ve ve farklı çizimlerinde aralarındaki korelasyonun ne olduğunu soralımX N ( 0 , I ) 1000 × 2 X X X = U S VU U 11 U 22 Xk=2XN(0,I)1000×2XXX=USVUU11U22X. Numaranın eğer beklediğiniz çizer arasında oldukça büyük olduğunu o zaman tüm bu korelasyon civarında sıfır olmalıdır (yani nüfus korelasyon sıfır olmalıdır ve numune korelasyon küçük olacaktır).Nrep

Bununla birlikte, U 11 , U 12 , U 21 ve U 22 arasında ve sadece bu elementler arasında garip bir şekilde güçlü korelasyonlar (yaklaşık ±0.2 ) gözlemliyorum . Diğer tüm element çiftlerinin beklendiği gibi sıfır civarında korelasyonları vardır. Burada ne için korelasyon matrisi 20 arasında, "üst" terimi, elemanların u (ilk gibi görünüyor 10 daha sonra birinci sütun elemanları, birinci 10 , ikinci sütun elemanları):U11U12U21U2220U1010

SVD tuhaf korelasyonları

Her çeyreğin sol üst köşelerinde garip bir şekilde yüksek değerlere dikkat edin.

O oldu bu @ whuber yorumu, dikkatimi bu etkiyi getirdi. @whuber PC1 ve PC2'nin bağımsız olmadığını savundu ve bu güçlü korelasyonun bir kanıtı olduğunu sundu. Ancak benim izlenimim, yanlışlıkla LAPACK kütüphanesinde sayısal bir hata keşfettiğidir. Burada neler oluyor?

İşte @ whuber'ın R kodu:

stat <- function(x) {u <- svd(x)$u; c(u[1,1], u[2, 2])};
Sigma <- matrix(c(1,0,0,1), 2);
sim <- t(replicate(1e3, stat(MASS::mvrnorm(10, c(0,0), Sigma))));
cor.test(sim[,1], sim[,2]);

İşte benim Matlab kodum:

clear all
rng(7)

n = 1000;     %// Number of variables
k = 2;        %// Number of observations
Nrep = 1000;  %// Number of iterations (draws)

for rep = 1:Nrep
    X = randn(n,k);
    %// X = bsxfun(@minus, X, mean(X));
    [U,S,V] = svd(X,0);

    t(rep,:) = [U(1:10,1)' U(1:10,2)'];
end

figure
imagesc(corr(t), [-.5 .5])
axis square
hold on
plot(xlim, [10.5 10.5], 'k')
plot([10.5 10.5], ylim, 'k')

N = 4 ve k = 3 kullanırsanız, korelasyonları da görürsünüz.
Aksakal

@Aksakal: evet, gerçekten, teşekkürler. K = 2 ve k = 3 arasındaki iddia edilen farkı kaldırmak için düzenledim.
amoeba, Reinstate Monica

Yanıtlar:


23

Bu bir hata değil.

Yorumlarda (kapsamlı olarak) araştırdığımız gibi, iki şey oluyor. Birincisi, U sütunlarının SVD gereksinimlerini karşılamak için kısıtlanmasıdır: her birinin birim uzunluğu olmalı ve diğerlerine dik olmalıdır. Görüntüleme U rasgele matris oluşturulan rasgele bir değişken olarak X , belirli bir SVD algoritması ile biz, böylece bu dikkat k(k+1)/2 fonksiyonel olarak bağımsız tahditleri sütunları arasında istatistiksel bağımlılıklar oluşturmak U .

Bu bağımlılıklar U bileşenleri arasındaki korelasyonları inceleyerek daha fazla veya daha az ölçüde ortaya çıkabilir , ancak ikinci bir fenomen ortaya çıkar : SVD çözümü benzersiz değildir. En azından, her U sütunu bağımsız olarak yok edilebilir ve k sütunları ile en az 2k farklı çözüm elde edilir . Güçlü korelasyonlar ( 1 / 2'yi aşan ) sütunların işaretleri uygun şekilde değiştirilerek oluşturulabilir. (Bunu yapmanın bir yolu, Amoeba'nın bu konudaki cevabına ilk yorumumda verilmiştir : Tüm u i i'yi , i = 1 ,k1/2uii,i=1,,k aynı işarete sahip, hepsini eşit olasılıkla negatif ya da pozitif yapar.) Öte yandan, tüm korelasyonlar, işaretler rastgele, bağımsız olarak, eşit olasılıklarla seçilerek yok edilebilir. (Aşağıda "Düzenle" bölümünde bir örnek vereceğim.)

Dikkatle, U bileşenlerinin dağılım matrislerini okurken bu fenomenleri kısmen ayırt edebiliriz . İyi tanımlanmış dairesel bölgelerde neredeyse eşit olarak dağılmış noktaların ortaya çıkması gibi belirli özellikler bağımsızlık eksikliğine sahiptir. Net sıfır olmayan korelasyonlar gösteren dağılım grafikleri gibi diğerleri, algoritmada yapılan seçimlere açıktır - ancak bu seçimler sadece ilk etapta bağımsızlık olmaması nedeniyle mümkündür.

SVD (veya Cholesky, LR, LU, vb.) Gibi bir ayrışma algoritmasının nihai testi, iddia ettiği şeyi yapıp yapmadığıdır. Bu durumda bu SVD matrislerin üç döndüğünde kontrol etmek için yeterli (U,D,V) olduğu, X bir ürün ile, yukarı beklenen kayan nokta hata geri kazanılır UDV ; U ve V sütunlarının ortonormal olduğu; ve D nin diyagonal olduğu, diyagonal elemanları negatif değildir ve azalan sırada düzenlenmiştir. Bu tür testleri svdalgoritmaya uyguladımRve asla hatalı olduğunu bulamadık. Her ne kadar mükemmel bir güvence olsa da, çok fazla insan tarafından paylaşıldığına inandığım böyle bir deneyim, herhangi bir hatanın tezahür etmek için olağanüstü bir tür girdi gerektireceğini gösteriyor.

Aşağıda soruda dile getirilen belirli noktaların daha ayrıntılı bir analizi yer almaktadır.


R'S svdprosedürünü kullanarak , önce k arttıkça, U katsayıları arasındaki korelasyonların zayıfladığını, ancak bunların hala sıfır olmadığını kontrol edebilirsiniz. Sadece daha büyük bir simülasyon yapsaydınız, bunların önemli olduğunu görürdünüz. ( k=3 , 50000 iterasyonunun yeterli olması gerektiğinde.) Sorudaki iddianın aksine , korelasyonlar "tamamen ortadan kalkmaz".

İkincisi, bu fenomeni incelemenin daha iyi bir yolu , katsayıların temel bağımsızlığı sorununa geri dönmektir. Çoğu durumda korelasyonlar sıfıra yakın olma eğiliminde olmasına rağmen, bağımsızlık eksikliği açıkça görülmektedir. Bu, en çok U katsayılarının çok değişkenli dağılımını inceleyerek ortaya çıkar . Dağılımın doğası, sıfır olmayan korelasyonların (henüz) tespit edilemediği küçük simülasyonlarda bile ortaya çıkar. Örneğin, katsayıların dağılım grafiği matrisini inceleyin. Bu pratik olacak yapmak için, her bir simüle veri kümesi boyutunu ayarlamak 4 ve muhafaza k=2 , böylece,, 1000ve gerçekleşmeleri 4×2 matris U oluşturma, 1000×8 matris. İşte tam dağılım grafiği matrisi, değişkenler U içindeki konumlarına göre listelenmiştir :

şekil

Birinci sütun boyunca tarama arasındaki bağımsızlık ilginç eksikliği ortaya u11 ve uij : ile ScatterPlot üst çeyrek nasıl görünüm u21 , örneğin, neredeyse boş olduğu; veya (u11,u22) ilişkisini ve (u21,u12) çifti için aşağı doğru eğimli bulutu açıklayan eliptik yukarı doğru eğimli bulutu inceleyin . Yakından bakıldığında, bu katsayıların neredeyse tamamı arasında açık bir bağımsızlık eksikliği ortaya çıkıyor: birçoğu sıfıra yakın korelasyon sergilemelerine rağmen, çok azı uzaktan bağımsız görünmektedir.

(Not: Dairesel bulutların çoğu, her bir sütunun tüm bileşenlerinin karelerinin toplamını birlik olmaya zorlayan normalleştirme koşulu tarafından oluşturulan bir hipersferden projeksiyonlardır.)

k=3 ve k=4 olan dağılım grafiği matrisleri benzer paternler sergiler: bu fenomenler k=2 sınırlı değildir , ne de her bir simüle edilmiş veri kümesinin boyutuna bağlı değildir: oluşturulması ve incelenmesi daha da zorlaşır.

Bu örüntülerin açıklamaları , tekil değer ayrışmasında U elde etmek için kullanılan algoritmaya gider , ancak bu tür bağımsızlık örüntülerinin U'nun çok tanımlayıcı özellikleri tarafından var olması gerektiğini biliyoruz : çünkü birbirini takip eden her sütun bir öncekine (geometrik) dik bu diklik koşulları, katsayılar arasında fonksiyonel bağımlılıklar uygular ve bu da karşılık gelen rastgele değişkenler arasında istatistiksel bağımlılıklara dönüşür.U


Düzenle

Yorumlara yanıt olarak, bu bağımlılık fenomenlerinin altta yatan algoritmayı (bir SVD hesaplamak için) ne ölçüde yansıttığına ve sürecin doğasında ne kadar doğal olduğuna dikkat çekmeye değer olabilir.

Belirli katsayıları arasındaki korelasyonlar desenler SVD algoritması tarafından yapılan rasgele tercihleri üzerinde büyük bir bağımlı çözümü tek değil: sütunları U bağımsız olarak her zaman ile çarpılabilir 1 ya da 1 . İşareti seçmek için gerçek bir yol yoktur. Bu nedenle, iki SVD algoritması farklı (keyfi veya belki de rastgele) işaret seçimleri yaptığında, (uij,uij) değerlerinin farklı dağılım grafikleriyle sonuçlanabilir . Bunu görmek isterseniz, stataşağıdaki koddaki işlevi

stat <- function(x) {
  i <- sample.int(dim(x)[1]) # Make a random permutation of the rows of x
  u <- svd(x[i, ])$u         # Perform SVD
  as.vector(u[order(i), ])   # Unpermute the rows of u
}

Bu, ilk olarak gözlemleri rastgele yeniden sıralar x, SVD gerçekleştirir, ardından uorijinal gözlem sırasına uyması için ters sıralamayı uygular . Etki, orijinal dağılım grafiklerinin yansıtılmış ve döndürülmüş versiyonlarının karışımlarını oluşturmak olduğundan, matristeki dağılım grafikleri çok daha düzgün görünecektir. Tüm örnek korelasyonlar sıfıra çok yakın olacaktır (yapı ile: temeldeki korelasyonlar tamamen sıfırdır). Bununla birlikte, bağımsızlık eksikliği hala açık olacaktır (özellikle ui,j ve ui,j arasında görünen homojen dairesel şekillerde ).

Orijinal dağılım grafiklerinin bazılarının bazı kadranlarındaki veri eksikliği (yukarıdaki şekilde gösterilmiştir), RSVD algoritmasının sütunlar için işaretleri nasıl seçtiğinden kaynaklanmaktadır .

Sonuçlar hakkında hiçbir şey değişmez. U ikinci sütunu birinciye dik olduğundan, (çok değişkenli rasgele değişken olarak kabul edilir) birincisine bağımlıdır (ayrıca çok değişkenli rasgele değişken olarak da kabul edilir). Bir sütunun tüm bileşenlerinin diğerinin tüm bileşenlerinden bağımsız olmasını sağlayamazsınız; yapabileceğiniz tek şey verilere bağımlılıkları gizleyecek şekilde bakmaktır - ancak bağımlılık devam edecektir.


Burada k > 2R vakalarını işlemek ve dağılım grafiği matrisinin bir kısmını çizmek için güncellenmiş kod .k>2

k <- 2    # Number of variables
p <- 4    # Number of observations
n <- 1e3  # Number of iterations
stat <- function(x) as.vector(svd(x)$u)
Sigma <- diag(1, k, k); Mu <- rep(0, k)
set.seed(17)
sim <- t(replicate(n, stat(MASS::mvrnorm(p, Mu, Sigma))))
colnames(sim) <- as.vector(outer(1:p, 1:k, function(i,j) paste0(i,",",j)))
pairs(sim[, 1:min(11, p*k)], pch=".")

3
Korelasyon sütunlarının ilk bileşenleri arasında gerçekleşir, çünkü SVD algoritması böyle çalışır. Satırları Yani X vardır Gauss önemli değildi: Ben emin katsayıları fark ettik değilim U vardır değil Gauss. UXU
whuber

2
Bu arada, sadece basitçe değiştirilmesi olduğunu keşfettiler svd(X,0)tarafından svds(X)benim Matlab kodu etkisi kaybolur yapar! Bildiğim kadarıyla, bu iki fonksiyon farklı SVD algoritmaları kullanıyor (her ikisi de LAPACK rutinleri, ama görünüşe göre farklı olanları). R'nin Matlab'ınkine benzer bir işlevi olup olmadığını bilmiyorum svds, ama yine de bunun sayısal bir sorun değil, "gerçek" bir etki olduğunu sürdürüp sürdüremeyeceğinizi merak ediyorum .
amip: Reinstate Monica

4
Beyler, bir dakika. Neden işaretten bahsetmiyorsun? Bir özvektör belirtisi temelde keyfidir. Ancak svd programı rastgele atamaz, işaret svd uygulamasına ve verilere bağlıdır. Çıkardıktan sonra U, sütunlarının her birinin olduğu gibi kalmaya mı yoksa işaretini mi değiştirmeye karar verdiğinize rastgele karar verirseniz, o zaman konuştuğunuz korelasyonlar kaybolmaz mı?
ttnphns

2
@ttnphns Bu, düzenlememde açıklandığı gibi doğrudur. Bu, korelasyonları ortadan kaldırsa da, U sütunları arasındaki bağımlılıklar böylece ortadan kalkmaz . ( Ustat
Sağladığım

2
Küçük bir nokta (bu büyük iş parçacığına!) SVD, diyagonaldeki elemanların Sbelirli bir sırada olmalarını gerektirmez ; bu bir kolaylık meselesidir. Diğer rutinler bunu garanti eder (örn. MATLAB'lar svds) ancak bu genel bir gereklilik değildir. @amoeba: svds(Bu sorunlu davranıştan uzak görünüyor) bakıldığında, hesaplama ilk olarak özdeğerlerin hesaplanmasına dayanır (bu nedenle standart dgesdd/ dgesvdLAPACK rutinlerini kullanmaz - ilk önce dsyevr/ kullandığından şüpheleniyorum dsyevx).
usεr11852 diyor Reinstate Monic

11

Bu cevap, @ whuber'ın Matlab'daki sonuçlarının bir kopyasını ve aynı zamanda, korelasyonların SVD uygulamasının bileşenler için nasıl işaret seçtiğinin bir "artefaktı" olduğunun doğrudan bir gösterimini sunar.

Potansiyel olarak kafa karıştırıcı yorumların uzun zinciri göz önüne alındığında, gelecekteki okuyucular için aşağıdakilere tamamen katıldığımı vurgulamak istiyorum:

  1. Bu tartışma bağlamında, kesinlikle olan rastgele değişken.U
  2. U sütunlarıU uzunluğu . Bu, her bir sütunun içindeki elemanların bağımsız olmadığı anlamına gelir; kareleri bire eşittir. Bununla birlikte, bu arasında bir ilişki anlamına gelmez U i 1 ve u j 1 için I j ve numune korelasyon sayıda için küçük olmalıdır , N r e s rastgele çizer.1Ui1Uj1ijNrep
  3. sütunları dik olmalıdır. Bu, farklı sütunlardaki öğelerin bağımsız olmadığı anlamına gelir; nokta çarpımı sıfırdır. Yine, bu arasında bir ilişki anlamına gelmez U i 1 ve u j 2 , ve numune korelasyon küçük olmalıdır.UUi1Uj2

Sorum oldu: neden yüksek korelasyon görüyoruz rastgele sayıda bile berabere N r e p = 1.000 ?0.2Nrep=1000

Matlab'da @ whuber örneğinin , k = 2 ve N r e p = 1000 ile bir kopyası:n=4k=2Nrep=1000

SVD

Solda korelasyon matrisi, sağda saçılma grafikleri @ whuber'a benzer. Simülasyonlarımız arasındaki anlaşma mükemmel görünüyor.

Şimdi, @ttnphns'ın ustaca bir önerisini izleyerek, sütunlarına rastgele işaretler atarım , yani bu satırdan sonra:U

[U,S,V] = svd(X,0);

Aşağıdaki iki satırı ekliyorum:

U(:,1) = U(:,1) * sign(randn(1));
U(:,2) = U(:,2) * sign(randn(1));

İşte sonuç:

SVD with random signs

Tüm korelasyonlar , en başından beri beklediğim gibi ortadan kalkar !

11

UU

PS. Bugün 100 bin itibarını geçtiği için @whuber'a tebrikler!


Eğer "yüksek" korelasyon görmek istiyorsanız, yerine SVD bu sürümünü kullanmak statbenim kodunda: stat <- function(x) { u <- svd(x)$u; as.vector(sign(runif(1) - 1/2)*u %*% diag(sign(diag(u)))) }. sütunlarının işaretlerini ( u 11 , u 22 , , u k arasında büyük korelasyonlar oluşturacak şekilde seçer.U(u11,u22,,ukk)UU

svdssvdUU rastgele değişkenler olduğu ve bağımsız olmadıkları konusunda anlaştım. Cevabınızdaki rakamın yanıltıcı olduğunu ve önceki tartışmalarımızda 0.2 korelasyonlarını argüman olarak kullanmanın yanlış olduğunu kabul eder misiniz?
amip: Reinstate Monica

R±2/30.2

1
@ttnphns: whuber'ın ana noktası, öğelerininU bağımsız olmamasıdır. Bir sütunun içindeki öğeler bağımsız değildir, çünkü kareleri bire eşit olmalıdır . Sütunları nedeniyle farklı sütunların elemanları, bağımsız olmayan gerekir sıfır nokta ürüne sahip. Dolayısıyla, ilk sütunun son öğesinden ayrı olan tüm öğelerini biliyorsanız, bunu hesaplayabilirsiniz; son ikisinden ayrı olarak ikinci sütunun tüm öğelerini daha fazla biliyorsanız, bunları hesaplayabilirsiniz. Bunun anlamı, bağımsız olmadıkları anlamına gelir.
amip: Reinstate Monica

1
Sezgisel olarak, bu adil. İlk ana eksen uzayda tanımlanır tanımlanmaz geri kalan pr. eksenler daha az özgürlük kazanır. 2D veri durumunda, ikinci (son) PC, işaret hariç tamamen bağlanır. Buna istatistiksel olarak bağımlılık değil, kısıtlama demeyi tercih ederim.
ttnphns

0

Tekil U ve V vektörlerinin normunu kontrol edin, tanımı gereği 1'dir. iki rastgele değişken oluşturarak çizdiğiniz aynı matrisi elde etmek için SVD'den geçmeniz gerekmez.xy

x2+y2=1

Cov[x,y]=Var[xy]=E[x2y2]E[xy]2

xy


Although this observation is pertinent, it addresses only interdependencies among the individual components of each column (and as such is included within the k(k+1)/2 independent constraints on U). The question that got all this started concerned dependencies between different columns of U: that's why so little attention has been paid to correlations within each column. Another (perhaps fruitful) way to look at this is to roll D içine U ve sütunlarını UD, bunlar artık normalleştirilmemiş, ancak yine de k(k1)/2 constraints.
whuber

It's the columns of U that have length 1, not the rows (in case when U is not square, but has n rows and k columns with n>k). The columns of U have n elements, and we have been discussing two particular cases in this thread: in my question I suggested to consider n=1000, and in his answer @whuber chose to consider n=4. Your example with x2+y2=1 includes only two random variables, so it does not fit to the rest of the discussion here. If you could make a statement about what should be the correlation between two elements of one column of U, that would be interesting.
amoeba says Reinstate Monica

@Amoeba We can make Asksakal's example pertinent either by taking x to be the first component of a column of U and y to be the norm of the remaining components or by extending the example inductively to more variables. Unfortunately, the conclusion is incorrect: it is perfectly possible for x2+y2=1, each with zero mean, yet for Cov(x,y)=0. Take, for instance, x=cos(θ) and y=sin(θ) for θ uniformly distributed on [0,2π).
whuber

@whuber, yes, I agree. The mistake in Aksakal's argument is that individual elements of U are definitely not standard normal! If the sign of each column is randomized, then (in my simulation) the mean of each Uij is around 0 and the variance is around 1/n, which makes total sense -- add up n variances in one column and you will get n1/n=1, as required by the constraint. This is assuming the elements are uncorrelateed, which they seem to be.
amoeba says Reinstate Monica

1
@Aksakal, I invite you to run a simulation and see for yourself that they are indeed uncorrelated; just be sure to randomize the sign of each column of U on each iteration. If you want an intuitive proof, observe that there is nothing "special" about any particular row of X, meaning that if correlation between U11 and U21 is ρ, then it must be the same for any other pair. So we have n random variables with correlation matrix having all off-diagonal elements equal to ρ. Now, is ρ positive or negative? The problem doesn't seem to offer a choice, hence ρ=0.
amoeba says Reinstate Monica
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.