Neden bir kovaryans matrisinin öz ve svd ayrışmaları seyrek verilere dayalı olarak farklı sonuçlar verir?


12

Seyrek / gappy veri kümesine dayalı bir kovaryans matrisi ayrıştırmaya çalışıyorum. Lambda (açıklanan varyans) toplamının, hesaplandığı gibi svd, giderek gappy verilerle güçlendirildiğini fark ediyorum . Boşluklar olmadan svdve eigenaynı sonuçları ver.

Bu bir eigenayrışma ile gerçekleşmez . Kullanmaya yönelmiştim svdçünkü lambda değerleri her zaman pozitif, ama bu eğilim endişe vericidir. Uygulanması gereken bir tür düzeltme var mı, yoksa svdböyle bir sorundan tamamen kaçınmalı mıyım ?

###Make complete and gappy data set
set.seed(1)
x <- 1:100
y <- 1:100
grd <- expand.grid(x=x, y=y)

#complete data
z <- matrix(runif(dim(grd)[1]), length(x), length(y))
image(x,y,z, col=rainbow(100))

#gappy data
zg <- replace(z, sample(seq(z), length(z)*0.5), NaN)
image(x,y,zg, col=rainbow(100))


###Covariance matrix decomposition
#complete data
C <- cov(z, use="pair")
E <- eigen(C)
S <- svd(C)

sum(E$values)
sum(S$d)
sum(diag(C))


#gappy data (50%)
Cg <- cov(zg, use="pair")
Eg <- eigen(Cg)
Sg <- svd(Cg)

sum(Eg$values)
sum(Sg$d)
sum(diag(Cg))



###Illustration of amplification of Lambda
set.seed(1)
frac <- seq(0,0.5,0.1)
E.lambda <- list()
S.lambda <- list()
for(i in seq(frac)){
    zi <- z
    NA.pos <- sample(seq(z), length(z)*frac[i])
    if(length(NA.pos) > 0){
        zi <- replace(z, NA.pos, NaN)
    }
    Ci <- cov(zi, use="pair")
    E.lambda[[i]] <- eigen(Ci)$values
	S.lambda[[i]] <- svd(Ci)$d
}


x11(width=10, height=5)
par(mfcol=c(1,2))
YLIM <- range(c(sapply(E.lambda, range), sapply(S.lambda, range)))

#eigen
for(i in seq(E.lambda)){
    if(i == 1) plot(E.lambda[[i]], t="n", ylim=YLIM, ylab="lambda", xlab="", main="Eigen Decomposition")
    lines(E.lambda[[i]], col=i, lty=1)
}
abline(h=0, col=8, lty=2)
legend("topright", legend=frac, lty=1, col=1:length(frac), title="fraction gaps")

    #svd
for(i in seq(S.lambda)){
    if(i == 1) plot(S.lambda[[i]], t="n", ylim=YLIM, ylab="lambda", xlab="", main="Singular Value Decomposition")
    lines(S.lambda[[i]], col=i, lty=1)
}
abline(h=0, col=8, lty=2)
legend("topright", legend=frac, lty=1, col=1:length(frac), title="fraction gaps")

resim açıklamasını buraya girin


Kodunuzu takip edemediğim için üzgünüm (R bilmiyorum), ama burada bir veya iki kavram var. Negatif özdeğerler bir kıvrımın öz ayrışmasında ortaya çıkabilir. ham verilerin birçok eksik değeri varsa ve bunlar cov hesaplanırken çift olarak silinmişse matris. Böyle bir matrisin SVD'si bu negatif özdeğerleri pozitif olarak (yanıltıcı bir şekilde) rapor edecektir. Resimleriniz, hem eigen hem de svd ayrışmasının, yalnızca negatif değerlerle ilgili farkın yanı sıra (tam olarak aynı değilse) benzer şekilde davrandığını göstermektedir.
ttnphns

1
PS Umarım beni anlarsın: özdeğerlerin toplamı, cov'nin izine (çapraz toplam) eşit olmalıdır. matris. Bununla birlikte, SVD bazı özdeğerlerin negatif olabileceği gerçeğine karşı "kör" dür. SVD, gram olmayan cinsi ayrıştırmak için nadiren kullanılır. matris, genellikle bilerek gramian (pozitif semidefinit) matris veya ham verilerle kullanılır
ttnphns

1
@ttnphns - Fikriniz için teşekkürler. svdÖzdeğerlerin farklı şekli olmasaydı , sonuçtan dolayı bu kadar endişelenmezdim . Sonuç, sondaki özdeğerlere olması gerekenden daha fazla önem vermektedir.
Marc kutuda

Yanıtlar:


4

Öz değerlerin mutlak değerinin toplamını, yani toplamı (abs (eg $ değerleri)) yapmanız ve tekil değerlerin toplamıyla karşılaştırmanız gerekir. Eşit olurlardı.

1

Bu güzel teoremin karşıtlığının kanıtı Devrim hiperboloitlerinin cebiri, Javier F. Cabrera, Doğrusal Cebir ve Uygulamaları, Princeton Üniversitesi (şimdi Rutgers'da).

Bunun bir başka yolu, sqrt (öz (t (Cg)% *% Cg)) Cg'nin tekil değerlerine eşit olmasıdır. Ancak özdeğerler negatif olduğunda, veriler, orijinal formülasyonda gözden kaçırılan karmaşık düzlem göz önüne alınarak bir münzevi formda temsil edilmelidir, yani, negatif öz ile matrisin simetrik kare kökü tarafından oluşturulan veriler değerleri karmaşık girdiler içerir.


1
Bu açıklama için çok teşekkürler. Öz ve svd arasındaki ilişkinin farkındaydım, ancak orijinal matrisin ayrıştırılmasında yukarıda belirtilen farklılıklar göz önüne alındığında, bunların hala ilişkili olacağının farkında değildim. Sadece merak ediyorum - anlayabildiğim kadarıyla, bir matris "pozitif kesin" olmadığında bir özün ayrışması negatif değerler verecektir. Boşluk verilerine dayanan tüm kovaryans matrislerinde durum böyle mi?
Marc kutuda

1
Marc, gerçek bir simetrik matrisin pozitif kesinliği, tüm pozitif özdeğerlere sahip olmakla eşdeğerdir. Sıfır boşluklu seyrek matrisler anlamına gelen "boşluk verileri" ile yakın bir ilişki yoktur. Sonuçta, nonsüler olmayan matrisler (simetrik ya da değil) arasında en yaygın olanı, özdeğerlerini girişleri olarak gösteren diyagonallerdir.
whuber

@whuber - yorumunuz için teşekkürler. Bu durumda, "gappy" ı "seyrek" olarak farklı olarak değerlendiriyorum, çünkü değer olmayanlar 0 (sıfır) değil NaNs'dir. Böylece kovaryans değerleri, ortak değerlerin sayısına göre ölçeklendirilir (yani n-1'e bölünür). Bu açıdan, kovaryans matrisinin aslında sıfır içermediğine inanmıyorum.
Marc kutuda

1
Böyle eksik verilerden kovaryans matrisini tahmin etmenin bir yolunu bulmak zor bir iş: Uzun zaman önce benzer bir soru sordum ve bazı uyarıcı cevaplar aldım .
whuber

Deneysel Ortogonal Fonksiyon (EOF) analizinde kullanım için konuya olan ilgim hakkında ayrıntılı bir soru sordum: stats.stackexchange.com/questions/34832/…
Marc kutuda
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.