Dlaczego rozkład własny i svd macierzy kowariancji opartej na rzadkich danych daje różne wyniki?

12

Próbuję dekomponować macierz kowariancji w oparciu o rzadki / gappy zestaw danych. Zauważam, że suma lambda (wyjaśniona wariancja), obliczona za pomocą svd, jest powiększana o coraz bardziej nieokreślone dane. Bez luk svdi eigenuzyskaj te same wyniki.

Wydaje się, że tak się nie dzieje z eigenrozkładem. Skłoniłem się do używania, svdponieważ wartości lambda są zawsze dodatnie, ale ta tendencja jest niepokojąca. Czy istnieje jakaś korekta, którą należy zastosować, czy też powinienem svdcałkowicie unikać takiego problemu.

###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")

wprowadź opis zdjęcia tutaj

Marc w pudełku
źródło
Przykro mi, że nie mogę śledzić twojego kodu (nie znam R), ale oto jedno lub dwa pojęcia. Ujemne wartości własne mogą pojawić się w rozkładzie własnym cov. macierz, jeśli surowe dane zawierały wiele brakujących wartości i zostały one usunięte parami podczas obliczania cov. SVD takiej matrycy zgłasza (wprowadzające w błąd) te ujemne wartości własne jako dodatnie. Twoje zdjęcia pokazują, że zarówno rozkład własny, jak i svd zachowują się podobnie (jeśli nie dokładnie tak samo) poza tą różnicą dotyczącą wartości ujemnych.
ttnphns,
1
PS Mam nadzieję, że mnie zrozumiałeś: suma wartości własnych musi być równa śladowi (suma przekątna) cov. matryca. Jednak SVD jest „ślepa” na fakt, że niektóre wartości własne mogą być ujemne. SVD jest rzadko używany do dekompozycji nie-odwiedzan cov. Matryca, zazwyczaj stosuje się go albo w świadomie gramian (pozytywny) półokreśloną matrycy lub surowych danych
ttnphns
1
@ttnphns - Dziękujemy za wgląd. Wydaje mi się, że nie martwiłbym się tak bardzo wynikiem uzyskanym przez, svdgdyby nie inny kształt wartości własnych. Rezultat w oczywisty sposób nadaje większą wagę końcowym wartościom własnym niż powinien.
Marc w pudełku

Odpowiedzi:

4

Musisz wykonać sumę wartości bezwzględnej wartości własnych, tj. Sumę (abs (np. Wartości $)) i porównać ją z sumą wartości pojedynczych. Byliby równi.

Powodem jest to, że jeśli pomnożysz wiersze lub kolumny, które odpowiadają ujemnym wartościom własnym przez , wówczas wartość własna nowej macierzy staje się dodatnia, a ortogonalność wektorów własnych nie jest zakłócona.-1

Dowód przeciwności tego pięknego twierdzenia pojawił się w Algebrze hiperboloidów rewolucji, Javier F. Cabrera, Algebra liniowa i jej zastosowania, Princeton University (obecnie w Rutgers).

Innym sposobem na uzasadnienie tego jest fakt, że sqrt (własny (t (Cg)% *% Cg)) jest równy liczbie pojedynczej Cg. Ale gdy wartości własne są ujemne, dane muszą być reprezentowane w formie pustelnika z uwzględnieniem złożonej płaszczyzny, czego brakowało w pierwotnym sformułowaniu, tj. Danych utworzonych przez symetryczny pierwiastek kwadratowy macierzy z ujemnym własnym wartości miałyby złożone wpisy.

karawan
źródło
1
wielkie dzięki za to wyjaśnienie. Byłem świadomy związku między eigen i svd, ale nie byłem świadomy, że nadal będą ze sobą powiązane, biorąc pod uwagę wyżej wspomniane różnice w rozkładzie oryginalnej matrycy. Ciekawe - o ile wiem, rozkład własny da wartości ujemne, gdy macierz nie będzie „pozytywnie określona”. Czy tak jest w przypadku wszystkich macierzy kowariancji opartych na niepewnych danych?
Marc w pudełku
1
Marc, dodatnia definitywność prawdziwej macierzy symetrycznej jest równoważna z posiadaniem wszystkich dodatnich wartości własnych. Nie ma ścisłego związku z „złymi danymi”, rozumiejąc, że oznacza to rzadkie macierze z wieloma zerowymi wpisami. W końcu bardzo rzadkie spośród macierzy niesingularnych (symetryczne lub nie) są diagonalne, które wykazują wartości własne jako wejścia.
whuber
@ whuber - dziękuję za komentarz. W tym przypadku interpretuję „gappy” inaczej niż „rzadki”, ponieważ nie-wartościami są NaN, a nie 0 (zero). Zatem wartości kowariancji są skalowane przez liczbę wspólnych wartości (tj. Podzielone przez n-1). Pod tym względem nie sądzę, aby macierz kowariancji zawierała zero.
Marc w pudełku
1
Znalezienie sposobu nawet oszacowania macierzy kowariancji na podstawie takich brakujących danych jest wyzwaniem: już dawno zadałem podobne pytanie i otrzymałem kilka stymulujących odpowiedzi.
whuber
Zadałem dodatkowe pytanie dotyczące mojego zainteresowania tematem do wykorzystania w analizie empirycznej funkcji ortogonalnej (EOF) tutaj: stats.stackexchange.com/questions/34832/...
Marc w pudełku