Mối tương quan kỳ lạ trong kết quả SVD của dữ liệu ngẫu nhiên; họ có một lời giải thích toán học hay đó là một lỗi LAPACK?


21

Tôi quan sát một hành vi rất kỳ lạ trong kết quả SVD của dữ liệu ngẫu nhiên, mà tôi có thể sao chép trong cả Matlab và R. Có vẻ như một số vấn đề về số trong thư viện LAPACK; Là nó?

Tôi vẽ mẫu từ Gaussian chiều với giá trị trung bình và hiệp phương sai bằng 0: . Tôi lắp ráp chúng trong một dữ liệu ma trận . (Tôi có thể tùy chọn trung tâm hay không, nó không ảnh hưởng đến những điều sau đây.) Sau đó, tôi thực hiện phân hủy giá trị đơn lẻ (SVD) để có được . Chúng ta hãy xem một số hai yếu tố đặc thù của , ví dụ như và , và yêu cầu sự tương quan giữa chúng trên thu hút khác nhau là những gì . Tôi hy vọng rằng nếu số lượngn=1000k=2XN(0,I)1000×2XXX=USVUU11U22XNrep của các lần rút là khá lớn, sau đó tất cả các mối tương quan như vậy sẽ ở khoảng 0 (tức là tương quan dân số nên bằng 0 và tương quan mẫu sẽ nhỏ).

Tuy nhiên, tôi quan sát thấy một số tương quan mạnh mẽ kỳ lạ (khoảng ) giữa , , U_ {21}U_ {22}chỉ giữa các yếu tố này. Tất cả các cặp yếu tố khác có mối tương quan quanh 0, như mong đợi. Dưới đây là cách ma trận tương quan cho 20 phần tử "trên" của \ mathbf U trông như thế nào ( 10 phần tử đầu tiên của cột đầu tiên, sau đó là 10 phần tử đầu tiên của cột thứ hai):±0.2U11U12U21U22U 10 1020U1010

SVD tương quan kỳ lạ

Lưu ý các giá trị cao lạ ở góc trên bên trái của mỗi góc phần tư.

Chính nhận xét này của @ whuber đã mang lại hiệu ứng này cho tôi chú ý. @whuber lập luận rằng PC1 và PC2 không độc lập và đưa ra mối tương quan mạnh mẽ này như một bằng chứng cho điều đó. Tuy nhiên, ấn tượng của tôi là anh vô tình phát hiện ra một lỗi số trong thư viện LAPACK. Chuyện gì đang xảy ra ở đây?

Đây là mã R của @ whuber's:

stat <- function(x) {u <- svd(x)$u; c(u[1,1], u[2, 2])};
Sigma <- matrix(c(1,0,0,1), 2);
sim <- t(replicate(1e3, stat(MASS::mvrnorm(10, c(0,0), Sigma))));
cor.test(sim[,1], sim[,2]);

Đây là mã Matlab của tôi:

clear all
rng(7)

n = 1000;     %// Number of variables
k = 2;        %// Number of observations
Nrep = 1000;  %// Number of iterations (draws)

for rep = 1:Nrep
    X = randn(n,k);
    %// X = bsxfun(@minus, X, mean(X));
    [U,S,V] = svd(X,0);

    t(rep,:) = [U(1:10,1)' U(1:10,2)'];
end

figure
imagesc(corr(t), [-.5 .5])
axis square
hold on
plot(xlim, [10.5 10.5], 'k')
plot([10.5 10.5], ylim, 'k')

Nếu bạn sử dụng n = 4 và k = 3, bạn cũng sẽ thấy các mối tương quan.
Aksakal

@Aksakal: vâng, thực sự, cảm ơn. Tôi đã chỉnh sửa để loại bỏ sự khác biệt được yêu cầu giữa k = 2 và k = 3.
amip nói rằng Phục hồi lại

Câu trả lời:


23

Đây không phải là một lỗi.

Như chúng ta đã khám phá (rộng rãi) trong các ý kiến, có hai điều xảy ra. Đầu tiên là các cột của U bị ràng buộc để đáp ứng các yêu cầu SVD: mỗi cột phải có độ dài đơn vị và trực giao với tất cả các cột khác. Xem U như là một biến ngẫu nhiên được tạo ra từ một ma trận ngẫu nhiên X thông qua một thuật toán SVD Đặc biệt, chúng ta qua đó lưu ý rằng những k(k+1)/2 trở ngại về mặt chức năng độc lập tạo ra phụ thuộc thống kê trong các cột của U .

Những phụ thuộc này có thể được tiết lộ ở mức độ lớn hơn hoặc thấp hơn bằng cách nghiên cứu mối tương quan giữa các thành phần của U , nhưng một hiện tượng thứ hai xuất hiện : giải pháp SVD không phải là duy nhất. Tối thiểu, mỗi cột của U có thể được phủ định độc lập, đưa ra ít nhất 2k giải pháp riêng biệt với k cột. Mối tương quan mạnh (vượt quá 1/2 ) có thể được gây ra bằng cách thay đổi các dấu hiệu của các cột một cách thích hợp. (Một cách để làm điều này được đưa ra trong bình luận đầu tiên của tôi vào câu trả lời Amoeba trong chủ đề này: Tôi buộc tất cả các uii,i=1,,k có dấu hiệu tương tự, làm cho chúng tất cả tiêu cực hoặc tích cực tất cả với xác suất bằng nhau.) Mặt khác, tất cả các mối tương quan có thể được thực hiện để biến mất bằng cách chọn những dấu hiệu một cách ngẫu nhiên, một cách độc lập, với xác suất bằng nhau. (Tôi đưa ra một ví dụ dưới đây trong phần "Chỉnh sửa".)

Với sự chăm sóc, chúng tôi phần nào có thể phân biệt cả những hiện tượng khi đọc ma trận phân tán của các thành phần của U . Một số đặc điểm - chẳng hạn như sự xuất hiện của các điểm gần như phân bố đồng đều trong các khu vực hình tròn được xác định rõ - tin rằng sự thiếu độc lập. Những người khác, chẳng hạn như các biểu đồ tán xạ thể hiện mối tương quan khác không rõ ràng, rõ ràng phụ thuộc vào các lựa chọn được thực hiện trong thuật toán - nhưng những lựa chọn như vậy chỉ có thể vì sự thiếu độc lập ở nơi đầu tiên.

Thử nghiệm cuối cùng của một thuật toán phân rã như SVD (hoặc Cholesky, LR, LU, v.v.) là liệu nó có làm những gì nó tuyên bố hay không. Trong trường hợp này nó cũng đủ để kiểm tra xem khi SVD trả về ba của ma trận (U,D,V) , rằng X bị thu hồi, đến dự đoán lỗi dấu chấm động, bởi sản phẩm UDV ; rằng các cột của U và của V là trực giao; và D là đường chéo, các phần tử đường chéo của nó không âm và được sắp xếp theo thứ tự giảm dần. Tôi đã áp dụng các thử nghiệm như vậy cho svdthuật toán trongRvà chưa bao giờ thấy nó bị lỗi. Mặc dù điều đó không đảm bảo nó hoàn toàn chính xác, nhưng trải nghiệm như vậy - mà tôi tin rằng được chia sẻ bởi rất nhiều người - cho thấy rằng bất kỳ lỗi nào cũng sẽ yêu cầu một số loại đầu vào phi thường để được hiển thị.

Điều gì sau đây là một phân tích chi tiết hơn về các điểm cụ thể được nêu ra trong câu hỏi.


Sử dụng R's svdthủ tục, trước tiên bạn có thể kiểm tra xem như k tăng, mối tương quan giữa các hệ số của U phát triển yếu hơn, nhưng họ vẫn là khác không. Nếu bạn chỉ đơn giản là thực hiện một mô phỏng lớn hơn, bạn sẽ thấy chúng có ý nghĩa. (Khi k=3 , 50000 lần lặp nên đủ.) Trái với khẳng định trong câu hỏi, các mối tương quan không "biến mất hoàn toàn".

Thứ hai, một cách tốt hơn để nghiên cứu hiện tượng này là quay trở lại câu hỏi cơ bản về tính độc lập của các hệ số. Mặc dù các mối tương quan có xu hướng gần bằng 0 trong hầu hết các trường hợp, sự thiếu độc lập rõ ràng là rõ ràng. Này được thực hiện rõ ràng nhất bằng cách nghiên cứu sự phân bố đa biến đầy đủ các hệ số của U . Bản chất của phân phối xuất hiện ngay cả trong các mô phỏng nhỏ trong đó các mối tương quan khác không thể (chưa) được phát hiện. Ví dụ, kiểm tra một ma trận phân tán của các hệ số. Để thực hiện điều này, tôi đặt kích thước của mỗi tập dữ liệu mô phỏng thành 4 và giữ k=2 , từ đó vẽ 1000hiện thực hóa ma trận 4×2U , tạo ma trận 1000×8 . Dưới đây là ma trận phân tán đầy đủ của nó, với các biến được liệt kê theo vị trí của chúng trong U :

Nhân vật

Quét xuống cột đầu tiên cho thấy sự thiếu độc lập thú vị giữa u11uij : xem xét góc phần tư phía trên của biểu đồ tán xạ với u21 gần như bị bỏ trống; hoặc kiểm tra đám mây dốc lên hình elip mô tả mối quan hệ (u11,u22) và đám mây dốc xuống cho cặp (u21,u12) . Một cái nhìn cận cảnh cho thấy sự thiếu độc lập rõ ràng trong hầu hết các hệ số này: rất ít trong số chúng trông độc lập từ xa, mặc dù hầu hết trong số chúng thể hiện mối tương quan gần như bằng không.

(NB: Hầu hết các đám mây tròn là các hình chiếu từ một siêu cầu được tạo bởi điều kiện chuẩn hóa buộc tổng bình phương của tất cả các thành phần của mỗi cột là thống nhất.)

Ma trận Scatterplot với k=3k=4 thể hiện các mẫu tương tự nhau: những hiện tượng này không bị giới hạn ở k=2 , cũng không phụ thuộc vào kích thước của mỗi tập dữ liệu mô phỏng: chúng khó tạo ra và kiểm tra hơn.

Các giải thích cho các mẫu này đi đến thuật toán được sử dụng để thu được U trong phân tách giá trị số ít, nhưng chúng ta biết các mẫu không độc lập đó phải tồn tại bởi các thuộc tính rất xác định của U : vì mỗi cột liên tiếp là (trực quan) trực giao với trước đó những điều kiện này, các điều kiện trực giao áp đặt các phụ thuộc chức năng giữa các hệ số, từ đó chuyển thành các phụ thuộc thống kê giữa các biến ngẫu nhiên tương ứng.


Chỉnh sửa

Đáp lại các bình luận, có thể đáng để nhận xét về mức độ mà các hiện tượng phụ thuộc này phản ánh thuật toán cơ bản (để tính toán một SVD) và mức độ chúng vốn có trong bản chất của quá trình.

Các mô hình tương quan cụ thể giữa các hệ số phụ thuộc rất nhiều vào các lựa chọn tùy ý được thực hiện bởi thuật toán SVD, bởi vì giải pháp không phải là duy nhất: các cột của U có thể luôn được nhân độc lập với 1 hoặc 1 . Không có cách nội tại để chọn dấu hiệu. Do đó, khi hai thuật toán SVD đưa ra các lựa chọn ký hiệu khác nhau (tùy ý hoặc thậm chí là ngẫu nhiên), chúng có thể dẫn đến các mẫu phân tán khác nhau của các giá trị (uij,uij) . Nếu bạn muốn thấy điều này, hãy thay thế stathàm trong mã bên dưới bằng

stat <- function(x) {
  i <- sample.int(dim(x)[1]) # Make a random permutation of the rows of x
  u <- svd(x[i, ])$u         # Perform SVD
  as.vector(u[order(i), ])   # Unpermute the rows of u
}

Điều này đầu tiên ngẫu nhiên sắp xếp lại các quan sát x, thực hiện SVD, sau đó áp dụng thứ tự nghịch đảo uđể phù hợp với trình tự quan sát ban đầu. Bởi vì hiệu ứng là tạo thành hỗn hợp của các phiên bản phản xạ và xoay của các phân tán ban đầu, các phân tán trong ma trận sẽ trông đồng nhất hơn nhiều. Tất cả các tương quan mẫu sẽ cực kỳ gần với 0 (bằng cách xây dựng: các tương quan cơ bản là chính xác bằng không). Tuy nhiên, sự thiếu độc lập vẫn sẽ rõ ràng (trong các hình tròn đồng nhất xuất hiện, đặc biệt là giữa ui,jui,j ).

Việc thiếu dữ liệu trong một số góc phần tư của một số biểu đồ phân tán ban đầu (được hiển thị trong hình trên) phát sinh từ cách Rthuật toán SVD chọn các dấu hiệu cho các cột.

Không có gì thay đổi về kết luận. Do cột thứ hai của U là trực giao với cột thứ nhất, nên nó (được coi là biến ngẫu nhiên đa biến) phụ thuộc vào biến thứ nhất (cũng được coi là biến ngẫu nhiên đa biến). Bạn không thể có tất cả các thành phần của một cột độc lập với tất cả các thành phần của cột khác; tất cả những gì bạn có thể làm là xem xét dữ liệu theo cách che khuất các phụ thuộc - nhưng sự phụ thuộc sẽ tồn tại.


Dưới đây là Rmã cập nhật để xử lý các trường hợp k>2 và vẽ một phần của ma trận phân tán.

k <- 2    # Number of variables
p <- 4    # Number of observations
n <- 1e3  # Number of iterations
stat <- function(x) as.vector(svd(x)$u)
Sigma <- diag(1, k, k); Mu <- rep(0, k)
set.seed(17)
sim <- t(replicate(n, stat(MASS::mvrnorm(p, Mu, Sigma))))
colnames(sim) <- as.vector(outer(1:p, 1:k, function(i,j) paste0(i,",",j)))
pairs(sim[, 1:min(11, p*k)], pch=".")

3
Mối tương quan xảy ra giữa các thành phần đầu tiên của các cột của vì đó là cách thuật toán SVD hoạt động. Các hàng của X là Gaussian là không quan trọng: Tôi chắc chắn rằng bạn đã nhận thấy rằng các hệ số của U không phải là Gaussian. UXU
whuber

2
Nhân tiện, tôi vừa phát hiện ra rằng chỉ cần thay thế svd(X,0)bằng svds(X)mã Matlab của tôi sẽ khiến hiệu ứng biến mất! Theo tôi biết, hai hàm này sử dụng các thuật toán SVD khác nhau (cả hai đều là các thói quen LAPACK, nhưng rõ ràng là khác nhau). Tôi không biết R có chức năng tương tự Matlab hay không svds, nhưng tôi tự hỏi liệu bạn có còn duy trì rằng đó là hiệu ứng "thực" chứ không phải là vấn đề về số.
amip nói rằng Phục hồi lại

4
Các quý ông, đợi một chút. Tại sao bạn không nói về các dấu hiệu? Dấu hiệu của một eigenvector về cơ bản là tùy ý. Nhưng chương trình của svd không gán nó ngẫu nhiên, dấu hiệu phụ thuộc vào việc thực hiện svd và trên dữ liệu. Nếu, sau khi trích xuất, Ubạn quyết định ngẫu nhiên liệu mỗi cột của nó có còn nguyên trạng hay là thay đổi dấu hiệu của nó không, thì sẽ không tương quan mà bạn đang nói về biến mất?
ttnphns 24/2/2015

2
@ttnphns Điều đó là chính xác, như được giải thích trong chỉnh sửa của tôi. Mặc dù điều đó làm cho các mối tương quan biến mất, nhưng sự phụ thuộc giữa các cột của không vì thế mà biến mất. (Phiên bản nâng cao mà tôi cung cấp tương đương với việc thay đổi ngẫu nhiên các dấu hiệu của các cột.)Ustat
whuber

2
Một điểm nhỏ (đối với chủ đề tuyệt vời này!) SVD không yêu cầu các phần tử trong đường chéo Slà theo một thứ tự cụ thể; đó là một vấn đề thuận tiện. Các thói quen khác đảm bảo điều này (ví dụ: MATLAB svds) nhưng đó không phải là một yêu cầu chung. @amoeba: Nhìn vào svds(mà dường như thoát khỏi hành vi có vấn đề này) tính toán dựa trên thực tế tính toán giá trị riêng đầu tiên (vì vậy nó không sử dụng các tiêu chuẩn dgesdd/ dgesvdthói quen LAPACK - Tôi rất nghi ngờ nó sử dụng dsyevr/ dsyevxlúc đầu).
usεr11852 nói Phục hồi Monic

11

Câu trả lời này trình bày một bản sao kết quả của @ whuber trong Matlab, và cũng là một minh chứng trực tiếp rằng các mối tương quan là một "tạo tác" về cách triển khai SVD chọn ký hiệu cho các thành phần.

Đưa ra chuỗi dài các bình luận có khả năng gây nhầm lẫn, tôi muốn nhấn mạnh cho các độc giả tương lai rằng tôi hoàn toàn đồng ý với những điều sau:

  1. Trong bối cảnh thảo luận này, chắc chắn một biến ngẫu nhiên.U
  2. Các cột của phải có độ dài 1 . Điều này có nghĩa là các yếu tố bên trong mỗi cột không độc lập; hình vuông của họ tổng hợp thành một. Tuy nhiên, điều này không ngụ ý bất kỳ mối tương quan nào giữa U i 1U j 1 đối với i j và tương quan mẫu sẽ rất nhỏ đối với số lượng lớn N r e p của các lần rút ngẫu nhiên.U1Ui1Uj1ijNrep
  3. Các cột của phải trực giao. Điều này có nghĩa là các yếu tố từ các cột khác nhau không độc lập; sản phẩm chấm của họ bằng không. Một lần nữa, điều này không ngụ ý bất kỳ mối tương quan nào giữa U i 1U j 2 , và mối tương quan mẫu sẽ rất nhỏ.UUi1Uj2

Câu hỏi của tôi là: tại sao chúng ta thấy tương quan cao thậm chí với số lượng lớn các lần rút ngẫu nhiên N r e p = 1000 ?0.2Nrep=1000

Đây là một bản sao của ví dụ @ whuber với , k = 2N r e p = 1000 trong Matlab:n=4k=2Nrep=1000

SVD

Bên trái là ma trận tương quan, bên phải - các biểu đồ phân tán tương tự như @ whuber's. Thỏa thuận giữa các mô phỏng của chúng tôi có vẻ hoàn hảo.

Bây giờ, sau một gợi ý khéo léo của @ttnphns, tôi gán các dấu hiệu ngẫu nhiên cho các cột của , tức là sau dòng này:U

[U,S,V] = svd(X,0);

Tôi thêm hai dòng sau:

U(:,1) = U(:,1) * sign(randn(1));
U(:,2) = U(:,2) * sign(randn(1));

Đây là kết quả:

SVD with random signs

Tất cả các mối tương quan tan biến, chính xác như tôi mong đợi từ đầu !

Như @whuber nói, sự thiếu độc lập có thể được nhìn thấy trong hình tròn hoàn hảo của một số ô phân tán (vì độ dài của mỗi cột phải bằng , tổng bình phương của hai phần tử bất kỳ không thể vượt quá 1 ). Nhưng các mối tương quan làm tan biến.11

UU

Tái bút Xin chúc mừng @whuber đã vượt qua danh tiếng 100k ngay hôm nay!


statstat <- function(x) { u <- svd(x)$u; as.vector(sign(runif(1) - 1/2)*u %*% diag(sign(diag(u)))) }U(u11,u22,,ukk)UU

svdssvdUBạnlà các biến ngẫu nhiên và chúng không độc lập. Bạn có đồng ý rằng con số trong câu trả lời của bạn là siêu sai lệch và việc sử dụng các tương quan 0,2 làm đối số trong cuộc tranh luận trước đây của chúng tôi là sai?
amip nói rằng Phục hồi lại

I would not agree with that: the figure accurately shows the results of the default settings of SVD in R. I provided explanations for that behavior that are grounded in the algorithm and underlying theory. If any aspect of that is "super-misleading" I will, of course, strive to correct or clarify the problem, but at this point I am not aware of a specific problem to fix. You might be interested to note that the modified version provided in my previous comment to this question is capable of producing correlations around ±2/3, quite high indeed: there's nothing special about your 0.2.
whuber

1
@ttnphns: whuber's main point is that the elements of U are not independent. The elements inside one column are not independent because their squares must sum to one. The elements of different columns are not independent, because the columns must have a zero dot product. So if you know all elements of the first column apart from the last one, you can compute it; if you further know all the elements of the second column apart from the last two, you can compute those. This means, be definition, that they are not independent.
amoeba says Reinstate Monica

1
Intuitively, that's fair. As soon as the first principal axis is defined in space the rest pr. axes get reduced freedom. In case of 2D data the second (last) PC is tied entirely, except the sign. I'd rather call it constraint, not dependence in statistical sense.
ttnphns

0

Check the norm of your singular vectors U and V, it's 1 by definition. You don't need to go through SVD to get the same exact matrix you plot by simply generating two random variables x and y with the constraint that the sum of their squares is 1:

x2+y2=1

Assume that the means are zero, then

Cov[x,y]=Var[xy]=E[x2y2]E[xy]2

This will not be equal to zero. You can plug the standard normal into x and y to see what's the value of covariance to be expected here.


Mặc dù quan sát này là thích hợp, nó chỉ giải quyết sự phụ thuộc lẫn nhau giữa các thành phần riêng lẻ của mỗi cột (và như vậy được bao gồm trong k(k+1)/2 ràng buộc độc lập trên Bạn). Câu hỏi có tất cả điều này bắt đầu phụ thuộc liên quan giữa các cột khác nhau củaBạn: that's why so little attention has been paid to correlations within each column. Another (perhaps fruitful) way to look at this is to roll D into U and analyze the columns of UD, which are no longer normalized, but are still subject to k(k1)/2 constraints.
whuber

It's the columns of U that have length 1, not the rows (in case when U is not square, but has n rows and k columns with n>k). The columns of U have n elements, and we have been discussing two particular cases in this thread: in my question I suggested to consider n=1000, and in his answer @whuber chose to consider n=4. Your example with x2+y2=1 includes only two random variables, so it does not fit to the rest of the discussion here. If you could make a statement about what should be the correlation between two elements of one column of U, that would be interesting.
amoeba says Reinstate Monica

@Amoeba We can make Asksakal's example pertinent either by taking x to be the first component of a column of U and y to be the norm of the remaining components or by extending the example inductively to more variables. Unfortunately, the conclusion is incorrect: it is perfectly possible for x2+y2=1, each with zero mean, yet for Cov(x,y)=0. Take, for instance, x=cos(θ) and y=sin(θ) for θ uniformly distributed on [0,2π).
whuber

@whuber, yes, I agree. The mistake in Aksakal's argument is that individual elements of U are definitely not standard normal! If the sign of each column is randomized, then (in my simulation) the mean of each Uij is around 0 and the variance is around 1/n, which makes total sense -- add up n variances in one column and you will get n1/n=1, as required by the constraint. This is assuming the elements are uncorrelateed, which they seem to be.
amoeba says Reinstate Monica

1
@Aksakal, I invite you to run a simulation and see for yourself that they are indeed uncorrelated; just be sure to randomize the sign of each column of U on each iteration. If you want an intuitive proof, observe that there is nothing "special" about any particular row of X, meaning that if correlation between U11 and U21 is ρ, then it must be the same for any other pair. So we have n random variables with correlation matrix having all off-diagonal elements equal to ρ. Now, is ρ positive or negative? The problem doesn't seem to offer a choice, hence ρ=0.
amoeba says Reinstate Monica
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.