Tại sao phân tách eigen và svd của ma trận hiệp phương sai dựa trên dữ liệu thưa thớt mang lại kết quả khác nhau?


12

Tôi đang cố gắng phân tách ma trận hiệp phương sai dựa trên tập dữ liệu thưa thớt / vui vẻ. Tôi nhận thấy rằng tổng lambda (phương sai được giải thích), theo tính toán svd, đang được khuếch đại với dữ liệu ngày càng tốt. Không có khoảng trống, svdeigenkết quả tương tự.

Điều này dường như không xảy ra với một sự eigenphân hủy. Tôi đã nghiêng về sử dụng svdvì các giá trị lambda luôn dương, nhưng xu hướng này rất đáng lo ngại. Có một số loại điều chỉnh cần phải được áp dụng, hoặc tôi nên tránh svdhoàn toàn cho một vấn đề như vậy.

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

nhập mô tả hình ảnh ở đây


Tôi xin lỗi vì không thể theo mã của bạn (không biết R), nhưng đây là một hoặc hai khái niệm. Giá trị bản địa âm có thể xuất hiện trong phân rã bản địa của một cov. ma trận nếu dữ liệu thô có nhiều giá trị bị thiếu và chúng bị xóa một cách chính xác khi tính toán cov. SVD của một ma trận như vậy sẽ báo cáo (đánh lừa) những giá trị bản địa âm là dương. Hình ảnh của bạn cho thấy cả phân tách eigen và svd hoạt động tương tự nhau (nếu không hoàn toàn giống nhau) bên cạnh đó chỉ có sự khác biệt về giá trị âm.
ttnphns

1
PS Hy vọng bạn hiểu tôi: tổng giá trị riêng phải bằng dấu vết (tổng đường chéo) của cov. ma trận. Tuy nhiên, SVD "mù quáng" với thực tế là một số giá trị bản địa có thể âm tính. SVD hiếm khi được sử dụng để phân hủy cov không ngữ pháp. ma trận, nó thường được sử dụng với ma trận có ý nghĩa ngữ pháp (semidefinite) hoặc với dữ liệu thô
ttnphns

1
@ttnphns - Cảm ơn sự sáng suốt của bạn. Tôi đoán tôi sẽ không lo lắng về kết quả được đưa ra svdnếu nó không có hình dạng khác nhau của giá trị bản địa. Kết quả rõ ràng là mang lại tầm quan trọng cho các giá trị bản địa kéo dài hơn mức cần thiết.
Marc trong hộp

Câu trả lời:


4

Bạn cần thực hiện tổng giá trị tuyệt đối của các giá trị eigen tức là sum (abs (Eg $ value)) và so sánh nó với tổng của các giá trị số ít. Họ sẽ bằng nhau.

-1

Bằng chứng về sự đảo ngược của định lý tuyệt đẹp này đã xuất hiện trong Đại số của hyperboloids của cuộc cách mạng, Javier F. Cabrera, Đại số tuyến tính và các ứng dụng của nó, Đại học Princeton (hiện tại tại Rutgers).

Một cách khác để lý giải điều này là bởi thực tế là sqrt (eigen (t (Cg)% *% Cg)) bằng với các giá trị số ít của Cg. Nhưng khi các giá trị riêng là âm, dữ liệu phải được biểu diễn dưới dạng ẩn sĩ với mặt phẳng phức được tính đến, đó là những gì đã bị bỏ lỡ trong công thức ban đầu, tức là dữ liệu được hình thành bởi căn bậc hai đối xứng của ma trận với eigen âm các giá trị sẽ có các mục phức tạp.


1
cảm ơn rất nhiều vì lời giải thích này Tôi đã nhận thức được mối quan hệ giữa eigen và svd, nhưng không biết rằng chúng vẫn có liên quan với những khác biệt đã đề cập ở trên trong việc phân tách ma trận gốc. Chỉ tò mò - theo như tôi có thể nói, một phân tách eigen sẽ cho các giá trị âm khi một ma trận không "xác định dương". Đây có phải là trường hợp với tất cả các ma trận hiệp phương sai dựa trên dữ liệu vui không?
Marc trong hộp

1
Marc, độ chính xác dương của một ma trận đối xứng thực tương đương với tất cả các giá trị riêng dương. Không có mối quan hệ chặt chẽ với "dữ liệu vui vẻ", hiểu rằng có nghĩa là ma trận thưa thớt với nhiều mục nhập bằng không. Xét cho cùng, rất ít trong số các ma trận không đối xứng (đối xứng hay không) là những đường chéo, thể hiện giá trị bản địa của chúng như các mục nhập của chúng.
whuber

@whuber - cảm ơn bình luận của bạn. Trong trường hợp này, tôi diễn giải "gappy" khác với "thưa thớt" ở chỗ các giá trị không phải là NaN chứ không phải 0 (không). Do đó, các giá trị hiệp phương sai được chia tỷ lệ theo số lượng giá trị chung (nghĩa là chia cho n-1). Về mặt đó, tôi không tin rằng ma trận hiệp phương sai thực sự chứa bất kỳ số không nào.
Marc trong hộp

1
Tìm cách thậm chí để ước tính ma trận hiệp phương sai từ dữ liệu bị thiếu như vậy là một thách thức: Tôi đã hỏi một câu hỏi tương tự từ lâu và nhận được một số câu trả lời kích thích.
whuber

Tôi đã hỏi thêm một câu hỏi chi tiết về mối quan tâm của tôi đối với chủ đề sử dụng trong phân tích Chức năng trực giao thực nghiệm (EOF) tại đây: stats.stackexchange.com/questions/34832/iêu
Marc trong hộp
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.