Чому власні та svd декомпозиції матриці коваріації на основі розріджених даних дають різні результати?


12

Я намагаюся розкласти коваріаційну матрицю, засновану на наборі даних з обмеженою / гаптованою формою. Я зауважую, що сума лямбда (пояснена дисперсія), розрахована з svd, посилюється все більш неохайними даними. Без прогалин, svdі eigenотримуйте однакові результати.

Здається, це не відбувається при eigenрозкладанні. Я схилявся до використання, svdоскільки значення лямбда завжди позитивні, але ця тенденція викликає занепокоєння. Чи є якась корекція, яку потрібно застосувати, чи svdвзагалі слід уникати такої проблеми.

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

введіть тут опис зображення


Вибачте за те, що не в змозі слідкувати за вашим кодом (не знаю R), але ось одне-два поняття. Негативні власні значення можуть з'являтися при власній декомпозиції кови. матриця, якщо в необроблених даних було багато відсутніх значень, і вони були видалені попарно при обчисленні cov. SVD такої матриці повідомить (вводячи в оману) ці негативні власні оцінки як позитивні. На ваших малюнках видно, що і власне, і svd розкладання поводяться аналогічно (якщо не зовсім однаково), крім того, що є лише різницею щодо негативних значень.
ttnphns

1
PS Сподіваюся, ви зрозуміли мене: сума власних значень повинна дорівнювати сліду (діагональна сума) ков. матриця. Однак SVD «сліпий» до того, що деякі власні значення можуть бути негативними. SVD рідко використовується для розкладання неграмійних ков. Матриця, як правило, використовується або з свідомо грамманівською (позитивною напівдефінітною) матрицею, або з необробленими даними
ttnphns

1
@ttnphns - Дякую за розуміння. Я думаю, я б не так хвилювався за результат, який отримав би, svdякби не різні форми власних значень. Очевидно, що результат надає більше значення власним значенням, ніж слід.
Марк у коробці

Відповіді:


4

Вам потрібно зробити суму абсолютного значення власних значень, тобто суму (abs (Eg $ значень)) і порівняти її з сумою сингулярних значень. Вони були б рівні.

-1

Доказ зворотності цієї прекрасної теореми з'явився в "Алгебри гіперболоїдів революції" Хав'єра Ф. Кабрера, "Лінійна алгебра та її додатки" в Принстонському університеті (зараз в Ратгерсі).

Інший спосіб пояснити це тим, що sqrt (eigen (t (Cg)% *% Cg)) дорівнюють сингулярним значенням Cg. Але коли власні значення негативні, дані повинні бути представлені у гермітичній формі із врахованою складною площиною, яка є пропущеною в первинному формулюванні, тобто даними, утвореними симетричним квадратним коренем матриці з негативним власним Значення мали б складні записи.


1
велике спасибі за це пояснення. Я знав про зв'язок між власним і svd, але не знав, що вони все ще будуть пов'язані, враховуючи вищезазначені відмінності в розкладанні вихідної матриці. Просто цікаво - наскільки я можу сказати, власне розкладання дасть негативні значення, коли матриця не є "позитивно визначеною". Це так з усіма коваріаційними матрицями на основі неодноразових даних?
Марк у коробці

1
Марк, позитивна визначеність реальної симетричної матриці еквівалентна наявності всіх позитивних власних значень. Не існує тісного зв’язку з "неодноразовими даними", розуміючи, що маються на увазі розріджені матриці з багатьма нульовими записами. Зрештою, найрідкіснішими серед неоднокутних матриць (симетричні чи ні) є діагональні, які демонструють власні значення як свої записи.
whuber

@whuber - дякую за ваш коментар. У цьому випадку я трактую "gappy" по-різному до "розрідженим" тим, що не значення є NaNs, а не 0 (нуль). Таким чином, значення коваріації масштабуються за кількістю загальних значень (тобто ділиться на n-1). У цьому відношенні я не вірю, що матриця коваріації насправді містила будь-які нулі.
Марк у коробці

1
Пошук способу навіть оцінити матрицю коваріації з таких відсутніх даних є проблемою: я давно задав подібне запитання і отримав кілька стимулюючих відповідей.
whuber

Я задав додаткове запитання щодо мого інтересу до теми для використання в аналізі емпіричної ортогональної функції (EOF) тут: stats.stackexchange.com/questions/34832/…
Марк у полі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.