为什么基于稀疏数据的协方差矩阵的本征和SVD分解会产生不同的结果?


12

我正在尝试基于稀疏/不连续的数据集分解协方差矩阵。我注意到,svd随着越来越差的数据,λ的总和(解释方差)用来计算。没有差距,svdeigen获得相同的结果。

eigen分解似乎不会发生这种情况。我一直倾向于使用,svd因为lambda值始终为正,但是这种趋势令人担忧。是否需要某种校正,或者应该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。矩阵,通常与已知的gramian(正半定)矩阵或原始数据一起使用
ttnphns 2012年

1
@ttnphns-感谢您的见解。我想我不会担心svd如果不是针对特征值的不同形状所给出的结果。结果显然使尾随特征值比应有的重要性更大。
马克·马克(Marc)在

Answers:


4

您需要对特征值的绝对值进行求和,即sum(abs(Eg $ values))并将其与奇异值之和进行比较。他们将是平等的。

原因是,如果将与负特征值对应的行或列乘以,则新矩阵的特征值将变为正,并且特征向量的正交性不会受到干扰。1

这个美丽定理相反的证明出现在《旋转双曲面的代数》,Javier F. Cabrera,《线性代数及其应用》,普林斯顿大学(现为罗格斯大学)中。

另一种原因是,sqrt(eigen(t(Cg)%*%Cg))等于Cg的奇异值。但是,当特征值是负值时,必须以厄米形式表示数据,同时要考虑到复杂的平面,这是原始公式所忽略的,即由具有负特征值的矩阵对称平方根形成的数据值将具有复杂的条目。


1
非常感谢您的解释。我知道本征和svd之间的关系,但是由于上述在分解原始矩阵方面的差异,因此没有意识到它们是否仍将相关。只是好奇-据我所知,当矩阵不是“正定”时,本征分解将给出负值。基于间隙数据的所有协方差矩阵都是这种情况吗?
马克·马克(Marc)在

1
Marc,实对称矩阵的正定性等效于具有所有正特征值。与“ gappy数据”没有紧密的关系,要理解这意味着具有许多零项的稀疏矩阵。毕竟,非奇异矩阵(对称或非对称)中最稀疏的是对角矩阵,对角矩阵显示其特征值作为输入。
whuber

@whuber-感谢您的评论。在这种情况下,我对“盖布”的解释与对“稀疏”的解释不同,因为非值是NaN而不是0(零)。因此,将协方差值按公共值的数量进行缩放(即,除以n-1)。在这方面,我不相信协方差矩阵实际上包含任何零。
马克·马克(Marc)在

1
找到一种甚至可以从这样的缺失数据中估计协方差矩阵的方法也是一个挑战:我很久以前问了一个类似的问题,并得到了一些令人兴奋的答案。
ub

我曾问一个额外的问题,在对经验正交函数使用(EOF)分析,这里的主题上我的兴趣阐述:stats.stackexchange.com/questions/34832/...
马克在箱子
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.