Почему собственные и svd-разложения ковариационной матрицы на основе разреженных данных дают разные результаты?


12

Я пытаюсь разложить ковариационную матрицу на основе набора данных разреженных / gappy. Я замечаю, что сумма лямбда (объясненная дисперсия), рассчитанная с помощью 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. матрица, если исходные данные имели много пропущенных значений, и они были попарно удалены при вычислении cov. SVD такой матрицы сообщит (вводит в заблуждение) эти отрицательные собственные значения как положительные. Ваши рисунки показывают, что как собственные, так и svd-разложения ведут себя одинаково (если не точно так же), кроме той единственной разницы в отношении отрицательных значений.
ttnphns

1
PS Надеюсь, вы меня поняли: сумма собственных значений должна быть равна следу (диагональная сумма) cov. матрица. Тем не менее, SVD "слепо" к тому факту, что некоторые собственные значения могут быть отрицательными. SVD редко используется для разложения неграммального cov. матрица, она обычно используется либо с заведомо грамматической (положительно-полуопределенной) матрицей, либо с необработанными данными
ttnphns

1
@ttnphns - Спасибо за понимание. Я полагаю, что я не был бы так обеспокоен результатом, svdесли бы не было другой формы собственных значений. Результат, очевидно, придает большее значение конечным собственным значениям, чем следовало бы.
Марк в коробке

Ответы:


4

Вам нужно сделать сумму абсолютных значений собственных значений, т. Е. Sum (abs (Eg $ values)) и сравнить ее с суммой сингулярных значений. Они были бы равны.

Причина в том, что если вы умножаете строки или столбцы, которые соответствуют отрицательным собственным значениям, на , то собственное значение новой матрицы становится положительным, и ортогональность собственных векторов не нарушается.1

Доказательство обратного к этой красивой теореме появилось в «Алгебре гиперболоидов вращения», Хавьер Ф. Кабрера, «Линейная алгебра и ее приложения», Принстонский университет (теперь в Рутгерс).

Другой способ обосновать это тем, что sqrt (собственные (t (Cg)% *% Cg)) равны сингулярным значениям Cg. Но когда собственные значения отрицательны, данные должны быть представлены в эрмитовой форме с учетом комплексной плоскости, что было упущено в исходной формулировке, то есть данные, образованные симметричным квадратным корнем матрицы с отрицательным собственным значения будут иметь сложные записи.


1
Большое спасибо за это объяснение. Я знал о связи между eigen и svd, но не знал, что они все равно будут связаны, учитывая вышеупомянутые различия в разложении исходной матрицы. Просто любопытно - насколько я могу судить, собственное разложение даст отрицательные значения, когда матрица не является «положительно определенной». Это относится ко всем ковариационным матрицам, основанным на данных gappy?
Марк в коробке

1
Марк, положительная определенность вещественной симметричной матрицы эквивалентна наличию всех положительных собственных значений. Не существует тесной связи с «gappy data», понимая, что это означает разреженные матрицы с множеством нулевых записей. В конце концов, очень редкими среди неособых матриц (симметричных или нет) являются диагональные, которые показывают свои собственные значения в качестве входов.
whuber

@whuber - спасибо за ваш комментарий. В этом случае я интерпретирую «gappy» иначе, чем «разреженный» в том смысле, что ненулевыми значениями являются NaN, а не 0 (ноль). Таким образом, значения ковариации масштабируются на количество общих значений (то есть делятся на n-1). В этом отношении я не верю, что ковариационная матрица действительно содержала какие-либо нули.
Марк в коробке

1
Найти способ даже оценить ковариационную матрицу по таким недостающим данным - сложная задача: я задал похожий вопрос давно и получил несколько стимулирующих ответов.
whuber

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