मैं एक विरल / गैपी डेटा सेट के आधार पर एक सहसंयोजक मैट्रिक्स को विघटित करने की कोशिश कर रहा हूं। मैं देख रहा हूँ कि लैम्ब्डा (समझाया गया विचरण) का योग, जैसा कि गणना 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")

svdeigenvalues के विभिन्न आकार के लिए नहीं थे , तो मैं इस परिणाम के बारे में चिंतित नहीं होता । परिणाम स्पष्ट रूप से अनुगामी eigenvalues को अधिक महत्व देना चाहिए।