랜덤 데이터의 SVD 결과에서 이상한 상관 관계; 수학적 설명이 있거나 LAPACK 버그입니까?


21

임의 데이터의 SVD 결과에서 매우 이상한 동작을 관찰했습니다. Matlab과 R 모두에서 재현 할 수 있습니다. LAPACK 라이브러리의 수치 문제처럼 보입니다. 그렇습니까?

제로 평균과 항등 공분산을 갖는 차원 가우스 에서 샘플을 그 립니다 : . 데이터 매트릭스 조립합니다 . (선택적으로 중심 에 둘 수 있으며, 다음에 영향을 미치지 않습니다.) 그런 다음 단일 값 분해 (SVD)를 수행하여 을 얻습니다 . 의 두 가지 특정 요소 ( 예 : 및 )를 가져 와서 의 다른 드로우에서 이들 사이의 상관 관계를 묻습니다 . 나는 숫자가K = 2 X ~ N ( 0 , I ) 1,000 × 2 X X X = U S VU U 11 U 22 X N의 R의 전자 Pn=1000k=2XN(0,I)1000×2XXX=USVUU11U22XNrep무승부의 이 상당히 크면 이러한 모든 상관 관계는 거의 0이어야합니다 (즉, 모집단 상관 관계는 0이어야하고 표본 상관 관계는 작습니다).

그러나, 좀 이상하게 강한 상관 관계 (주위 관찰 사이) , , 및 및 단지 이들 요소 사이. 다른 모든 요소 쌍은 예상 한대로 0 정도의 상관 관계를 갖습니다. 여기서이 방법에 대한 상관 행렬 의 "상부"엘리먼트 (제 1과 같다 다음 첫 번째 열의 요소, 제 번째 열의 요소)U 11 U 12 U 21 U 22 20 U 10 10±0.2U11U12U21U2220U1010

SVD 이상한 상관 관계

각 사분면의 왼쪽 상단에서 이상하게 높은 값을 확인하십시오.

그것은이었다 이 @의 whuber의 코멘트 내 관심이 효과를 가져왔다. @whuber는 PC1과 PC2가 독립적이지 않다고 주장했으며 이에 대한 증거로 이러한 강력한 상관 관계를 제시했습니다. 그러나 LAPACK 라이브러리에서 실수로 수치 버그를 발견했다는 인상을 받았습니다. 무슨 일이야?

@whuber의 R 코드는 다음과 같습니다.

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]);

내 Matlab 코드는 다음과 같습니다.

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 = 4 및 k = 3을 사용하면 상관 관계도 표시됩니다.
Aksakal

@ Aksakal : 예, 정말로 감사합니다. k = 2와 k = 3의 차이를 제거하기 위해 편집했습니다.
amoeba는

답변:


23

이것은 버그가 아닙니다.

주석에서 (확장 적으로) 살펴본 바와 같이 두 가지 일이 발생합니다. 첫 번째는 U 의 열이 SVD 요구 사항을 충족하도록 제한된다는 것입니다. 보기 U 임의의 행렬로부터 생성 된 랜덤 변수 X 의 특정 SVD 알고리즘을 통해, 우리는 따라서 다음 참고 k(k+1)/2 기능적으로 독립 제약의 열 간의 통계적 의존성 생성 U .

이러한 종속성의 구성 요소들 사이의 상관 관계를 연구함으로써 정도의 차이에 공개 될 수 U , 하지만 두 번째 현상이 나타난다 다음 SVD 솔루션은 고유하지 않습니다. 최소한, 각 열의 U 독립적으로 적어도주는 부정 할 수 2k 뚜렷한 해결책을 k 열. 강한 상관 관계 (이하 1/2 적절히 열의 부호를 변화시킴으로써 유도 될 수있다). (이 작업을 수행하는 한 가지 방법 은이 스레드에서 Amoeba의 답변대한 첫 번째 주석 에서 제공됩니다 : 나는 모든 uii,i=1,,k 그들 모두 음수 또는 동일한 확률로 모든 양극을, 같은 부호가있다.) 한편, 모든 상관이 동일한 확률로 독립적으로 임의로 표시를 선택하여 소멸하게된다. (아래의 "편집"섹션에 예가 나와 있습니다.)

주의해서 U 의 성분의 산점도 행렬을 읽을 때 이러한 현상을 부분적으로 식별 할 수 있습니다 . 잘 정의 된 원형 영역 내에 거의 균일하게 분포 된 점의 모양과 같은 특정 특성은 독립성이 결여되어 있습니다. 0이 아닌 명확한 상관 관계를 나타내는 산점도와 같은 다른 알고리즘은 알고리즘에서 선택한 사항에 따라 달라 지지만, 이러한 선택은 처음에 독립성이 없기 때문에 가능합니다.

SVD (또는 Cholesky, LR, LU 등)와 같은 분해 알고리즘의 궁극적 인 테스트는 그것이 주장하는 것을 수행하는지 여부입니다. 이러한 상황에서 그것은 SVD는 행렬의 트리플 반환 할 때 확인하기에 충분 (U,D,V) 것으로, X 제품으로, 최대 예상 부동 소수점 오류, 복구 UDV ; UV 의 열 은 직교 정상이다. 그리고 D 그 대각 요소는 음수이며, 내림차순으로 배열되어, 대각선이다. 그런 테스트를 svd알고리즘에 적용 했습니다.R그리고 그것이 잘못되었다는 것을 결코 발견하지 못했습니다. 그것이 완벽하다고 확신 할 수는 없지만, 많은 사람들이 공유하고 있다고 생각하는 그러한 경험은 어떤 버그라도 나타나기 위해서는 특별한 종류의 입력이 필요하다는 것을 암시합니다.

다음은 질문에서 제기 된 특정 요점에 대한보다 자세한 분석입니다.


Rsvd절차를 사용하여 먼저 k 증가함에 따라 U 계수 간의 상관 관계 가 약해 지지만 여전히 0이 아님을 확인할 수 있습니다. 단순히 더 큰 시뮬레이션을 수행했다면 의미가 크다는 것을 알게 될 것입니다. k=3 일 때 50000 회 반복하면 충분합니다. 문제의 주장과 달리 상관 관계는 "전적으로 사라지지 않습니다".

둘째, 이 현상을 연구하는 더 좋은 방법 은 계수 의 독립성 에 관한 기본 문제로 돌아가는 것 입니다. 대부분의 경우 상관 관계가 거의 0 인 경향이 있지만 독립성이 결여되어 있음이 분명합니다. 이것은 U 계수의 전체 다변량 분포를 연구함으로써 가장 분명해집니다 . 분포의 특성은 0이 아닌 상관 관계를 아직 탐지 할 수없는 작은 시뮬레이션에서도 나타납니다. 예를 들어, 계수의 산점도 행렬을 살펴보십시오. 이를 실현하기 위해 각 시뮬레이션 데이터 세트의 크기를 4 하고 k=2 유지 하여 10004×2 행렬 U 의 실현으로 1000×8 행렬을 생성합니다 . 다음은 내 위치별로 변수가 나열된 전체 산점도 행렬입니다 .

그림

첫 번째 열은 아래에서 스캔 간의 독립성 흥미 결여 밝혀 11 와 다른 나는j :와 산점도의 윗부분 방법을 살펴 21 예를 들어, 거의 비어 단계; 또는 (11,22) 관계와 (21,12) 쌍에 대한 하향 경사 구름을 설명하는 타원형 상향 경사 구름을 조사하십시오 . 면밀히 살펴보면 거의 모든 계수에서 독립성이 명확하지 않습니다. 이들 중 대부분은 거의 제로에 가까운 상관 관계를 보이지만 원격으로 독립적으로 보입니다.

(NB : 대부분의 원형 구름은 각 열의 모든 구성 요소의 제곱합을 통일시키는 정규화 조건에 의해 생성 된 초 구면으로부터의 투영입니다.)

케이=케이=4 산점도 행렬은 유사한 패턴을 나타냅니다. 이러한 현상은 케이=2 제한되지 않으며 각 시뮬레이션 된 데이터 세트의 크기에 의존하지도 않습니다. 생성 및 검사가 더 어려워집니다.

이러한 패턴에 대한 설명 은 특이 값 분해에서 를 얻는 데 사용되는 알고리즘으로 이동 하지만 U 의 매우 정의 된 특성에 따라 이러한 비 독립성 패턴이 존재 해야한다는 것을 알고 있습니다 . 이들 직교 조건은 계수들 사이의 기능적 의존성을 부과하여 대응하는 랜덤 변수들 사이의 통계적 의존성으로 해석된다.


편집하다

의견에 대한 응답으로, 이러한 의존 현상이 (SVD를 계산하기 위해) 기본 알고리즘을 반영하는 정도와 프로세스의 본질에 얼마나 내재되어 있는지에 대해 언급 할 가치가 있습니다.

특정의 계수 사이의 상관 관계의 패턴은 SVD 알고리즘에 의해 임의의 선택에 큰 거래를 의존하는 솔루션은 고유하지 않기 때문에 :의 열 항상 독립적으로 곱한 수 있습니다 1 또는 1 . 기호를 선택하는 본질적인 방법은 없습니다. 따라서, 2 개의 SVD 알고리즘이 상이한 (임의의 또는 임의의 임의의) 부호의 선택을 할 때, (나는j,나는'j') 값의 상이한 산점도 패턴을 초래할 수있다 . 이것을 보려면 stat아래 코드 의 함수를 다음 과 같이 바꾸십시오.

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
}

먼저 관측치를 무작위로 재정렬 x하고 SVD를 수행 한 다음 역순을 적용 u하여 원래 관측 시퀀스와 일치시킵니다. 그 효과는 원래의 산점도의 반사 및 회전 된 버전의 혼합물을 형성하는 것이기 때문에 매트릭스의 산점도는 훨씬 더 균일하게 보입니다. 모든 샘플 상관 관계는 구성에 따라 0에 매우 가깝습니다 (기본 상관 관계는 정확히 0입니다). 그럼에도 불구하고, 독립성의 결여는 여전히 명백 할 것이다 (특히 균일 한 원형 형태, 특히 나는,j나는,j' 사이에 나타남 ).

RSVD 알고리즘이 열의 부호를 선택 하는 방식에서 원래 산점도의 일부 사분면에 데이터가 부족합니다 (위 그림 참조) .

결론에 대해서는 아무것도 바뀌지 않습니다. 의 두 번째 열이 첫 번째 열과 직교하므로 열 (다변량 랜덤 변수로 간주)은 첫 번째 (다변량 랜덤 변수라고도 함 )에 종속 됩니다. 한 열의 모든 구성 요소가 다른 열의 모든 구성 요소와 독립적 일 수는 없습니다. 의존성을 모호하게하는 방식으로 데이터를 보는 것만으로는 의존성이 유지됩니다.


다음은 R사례 케이>2 를 처리 하고 산점도 행렬의 일부를 그리도록 업데이트 된 코드 입니다.

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
SVD 알고리즘이 작동하는 방식이므로 열의 첫 번째 구성 요소간에 상관 관계가 발생 합니다. X 의 행 이 가우시안이라는 것은 중요하지 않습니다 . U 의 계수가 가우시안 이 아님을 확신합니다 . 엑스
whuber

2
그런데 Matlab 코드에서 간단히 바꾸면 효과가 사라진다는 것을 알게 svd(X,0)되었습니다 svds(X)! 내가 아는 한이 두 함수는 서로 다른 SVD 알고리즘을 사용합니다 (둘 다 LAPACK 루틴이지만 분명히 다른 것입니다). R에 Matlab과 비슷한 기능이 있는지는 모르겠지만 여전히 수치 적 문제가 아니라 "실제"효과인지 계속 유지할 것인지 svds궁금합니다 .
amoeba는 Reinstate Monica가

4
여러분 잠시만 기다려주세요. 왜 징조를 말하지 않습니까? 고유 벡터의 부호는 기본적으로 임의적입니다. 그러나 svd의 프로그램은 그것을 무작위로 할당하지 않으며, 부호는 svd의 구현과 데이터에 달려 있습니다. 추출 후 U각 열이 그대로 유지되는지 또는 부호를 변경해야하는지 무작위로 결정하면 상관 관계가 사라지지 않습니까?
ttnphns

2
@ttnphns 내 편집에서 설명한대로 맞습니다. 이로 인해 상관 관계가 사라지더라도 U 열 사이의 종속성 은 사라지지 않습니다. (제공된 향상된 버전은 열의 부호를 임의로 변경하는 것과 같습니다.)stat
whuber

2
사소한 점 (이 위대한 실에!) SVD는 대각선에있는 요소 S들이 특정한 순서에 있을 필요는 없습니다 . 편의의 문제입니다. 다른 루틴에서는이를 보장하지만 (예 : MATLAB 's svds) 일반적인 요구 사항은 아닙니다. @amoeba : svds(이 문제가있는 행동 에서 벗어나는 것처럼 보임) 계산은 실제로 고유 값을 먼저 계산하는 것을 기반으로합니다 (따라서 표준 dgesdd/ dgesvdLAPACK 루틴을 사용하지 않습니다 - 처음 에는 dsyevr/ 사용한다고 강력하게 생각합니다 dsyevx).
usεr11852는 Reinstate Monic이

11

이 답변은 Matlab에서 @whuber의 결과를 복제하고 SVD 구현이 구성 요소의 부호를 선택하는 방법의 "유물"이라는 상관 관계를 직접 보여줍니다.

잠재적으로 혼동되는 의견이 많을 경우, 앞으로 독자들에게 다음 사항에 전적으로 동의 할 것을 강조하고 싶습니다.

  1. 이 논의의 맥락에서, 확실히 이다 임의의 변수입니다.U
  2. 열 길이는 1 이어야 합니다. 이는 각 열 내부의 요소가 독립적이지 않음을 의미합니다. 그들의 제곱은 1에 합산됩니다. 그러나 이것은 i j에 대한 U i 1U j 1 사이의 상관 관계를 의미하지 않으며 , 랜덤 상관도가 많은 N r e p 의 경우 샘플 상관 관계는 작아야합니다.U1Ui1Uj1ij아르 자형이자형
  3. 열은 직교해야합니다. 이는 다른 열의 요소가 독립적이지 않음을 의미합니다. 그들의 내적은 0입니다. 다시 말하지만 이것은 U i 1U j 2 사이의 상관 관계를 의미하지 않으며 샘플 상관 관계는 작아야합니다.나는1j2

내 질문이었다 : 왜 우리는 높은 상관 관계를 보이나요 임의의 많은 수조차 그립니다 N의 r에 전자 P = 1000 ?0.2아르 자형이자형=1000

다음은 Matlab에서 , k = 2N r e p = 1000 인 @whuber 예제의 복제입니다 .=4케이=2아르 자형이자형=1000

SVD

왼쪽에는 @whuber와 유사한 산점도 인 오른쪽에 상관 행렬이 있습니다. 시뮬레이션 간의 합의는 완벽 해 보입니다.

이제 @ttnphns의 독창적 인 제안에 따라 열에 임의의 부호를 할당 합니다.

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

다음 두 줄을 추가합니다.

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

결과는 다음과 같습니다.

임의 부호가있는 SVD

처음부터 예상 한대로 모든 상관 관계가 사라집니다 !

11

추신. 오늘 100k 평판을 통과 한 @whuber에 축하드립니다!


statstat <- function(x) { u <- svd(x)$u; as.vector(sign(runif(1) - 1/2)*u %*% diag(sign(diag(u)))) }(11,22,,케이케이)

svdssvdU

R±2/0.2

1

1
직관적으로, 그것은 공평합니다. 첫 번째 주축이 공간에 정의 되 자마자 나머지 pr. 축의 자유가 줄어 듭니다. 2D 데이터의 경우 두 번째 (마지막) PC는 부호를 제외하고 완전히 연결됩니다. 통계적 의미의 의존성이 아니라 제약이라고 부릅니다.
ttnphns

0

엑스와이

엑스2+와이2=1

기음영형V[엑스,와이]=V에이아르 자형[엑스와이]=이자형[엑스2와이2]이자형[엑스와이]2

엑스와이


케이(케이+1)/2케이(케이1)/2

1케이>케이=1000=4엑스2+와이2=1

엑스와이엑스2+와이2=1코브(엑스,와이)=0엑스=코사인(θ)와이=(θ)θ[0,2π)

나는j01/1/=1

1
엑스1121ρρρρ=0
amoeba는 Reinstate Monica가
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.