이것은 버그가 아닙니다.
주석에서 (확장 적으로) 살펴본 바와 같이 두 가지 일이 발생합니다. 첫 번째는 유 의 열이 SVD 요구 사항을 충족하도록 제한된다는 것입니다. 보기 유 임의의 행렬로부터 생성 된 랜덤 변수 엑스 의 특정 SVD 알고리즘을 통해, 우리는 따라서 다음 참고 k ( k + 1 ) / 2 기능적으로 독립 제약의 열 간의 통계적 의존성 생성 유 .
이러한 종속성의 구성 요소들 사이의 상관 관계를 연구함으로써 정도의 차이에 공개 될 수 유 , 하지만 두 번째 현상이 나타난다 다음 SVD 솔루션은 고유하지 않습니다. 최소한, 각 열의 유 독립적으로 적어도주는 부정 할 수 2케이 뚜렷한 해결책을 케이 열. 강한 상관 관계 (이하 1 / 2 적절히 열의 부호를 변화시킴으로써 유도 될 수있다). (이 작업을 수행하는 한 가지 방법 은이 스레드에서 Amoeba의 답변 에 대한 첫 번째 주석 에서 제공됩니다 : 나는 모든 유나는 내가, i = 1 , … , k 그들 모두 음수 또는 동일한 확률로 모든 양극을, 같은 부호가있다.) 한편, 모든 상관이 동일한 확률로 독립적으로 임의로 표시를 선택하여 소멸하게된다. (아래의 "편집"섹션에 예가 나와 있습니다.)
주의해서 유 의 성분의 산점도 행렬을 읽을 때 이러한 현상을 부분적으로 식별 할 수 있습니다 . 잘 정의 된 원형 영역 내에 거의 균일하게 분포 된 점의 모양과 같은 특정 특성은 독립성이 결여되어 있습니다. 0이 아닌 명확한 상관 관계를 나타내는 산점도와 같은 다른 알고리즘은 알고리즘에서 선택한 사항에 따라 달라 지지만, 이러한 선택은 처음에 독립성이 없기 때문에 가능합니다.
SVD (또는 Cholesky, LR, LU 등)와 같은 분해 알고리즘의 궁극적 인 테스트는 그것이 주장하는 것을 수행하는지 여부입니다. 이러한 상황에서 그것은 SVD는 행렬의 트리플 반환 할 때 확인하기에 충분 ( U, D , V) 것으로, 엑스 제품으로, 최대 예상 부동 소수점 오류, 복구 유D V' ; 유 와 V 의 열 은 직교 정상이다. 그리고 디 그 대각 요소는 음수이며, 내림차순으로 배열되어, 대각선이다. 그런 테스트를 svd
알고리즘에 적용 했습니다.R
그리고 그것이 잘못되었다는 것을 결코 발견하지 못했습니다. 그것이 완벽하다고 확신 할 수는 없지만, 많은 사람들이 공유하고 있다고 생각하는 그러한 경험은 어떤 버그라도 나타나기 위해서는 특별한 종류의 입력이 필요하다는 것을 암시합니다.
다음은 질문에서 제기 된 특정 요점에 대한보다 자세한 분석입니다.
R
의 svd
절차를 사용하여 먼저 케이 증가함에 따라 유 계수 간의 상관 관계 가 약해 지지만 여전히 0이 아님을 확인할 수 있습니다. 단순히 더 큰 시뮬레이션을 수행했다면 의미가 크다는 것을 알게 될 것입니다. k = 3 일 때 50000 회 반복하면 충분합니다. 문제의 주장과 달리 상관 관계는 "전적으로 사라지지 않습니다".
둘째, 이 현상을 연구하는 더 좋은 방법 은 계수 의 독립성 에 관한 기본 문제로 돌아가는 것 입니다. 대부분의 경우 상관 관계가 거의 0 인 경향이 있지만 독립성이 결여되어 있음이 분명합니다. 이것은 유 계수의 전체 다변량 분포를 연구함으로써 가장 분명해집니다 . 분포의 특성은 0이 아닌 상관 관계를 아직 탐지 할 수없는 작은 시뮬레이션에서도 나타납니다. 예를 들어, 계수의 산점도 행렬을 살펴보십시오. 이를 실현하기 위해 각 시뮬레이션 데이터 세트의 크기를 4 하고 k = 2 유지 하여 10004 × 2 행렬 유 의 실현으로 1000 × 8 행렬을 생성합니다 . 다음은 유 내 위치별로 변수가 나열된 전체 산점도 행렬입니다 .
첫 번째 열은 아래에서 스캔 간의 독립성 흥미 결여 밝혀 유11 와 다른 유나는 j :와 산점도의 윗부분 방법을 살펴 유21 예를 들어, 거의 비어 단계; 또는 ( u11, U22) 관계와 ( u21, U12) 쌍에 대한 하향 경사 구름을 설명하는 타원형 상향 경사 구름을 조사하십시오 . 면밀히 살펴보면 거의 모든 계수에서 독립성이 명확하지 않습니다. 이들 중 대부분은 거의 제로에 가까운 상관 관계를 보이지만 원격으로 독립적으로 보입니다.
(NB : 대부분의 원형 구름은 각 열의 모든 구성 요소의 제곱합을 통일시키는 정규화 조건에 의해 생성 된 초 구면으로부터의 투영입니다.)
k = 3 및 k = 4 산점도 행렬은 유사한 패턴을 나타냅니다. 이러한 현상은 k = 2 제한되지 않으며 각 시뮬레이션 된 데이터 세트의 크기에 의존하지도 않습니다. 생성 및 검사가 더 어려워집니다.
이러한 패턴에 대한 설명 은 특이 값 분해에서 유 를 얻는 데 사용되는 알고리즘으로 이동 하지만 U 의 매우 정의 된 특성에 따라 이러한 비 독립성 패턴이 존재 해야한다는 것을 알고 있습니다 . 이들 직교 조건은 계수들 사이의 기능적 의존성을 부과하여 대응하는 랜덤 변수들 사이의 통계적 의존성으로 해석된다.유
편집하다
의견에 대한 응답으로, 이러한 의존 현상이 (SVD를 계산하기 위해) 기본 알고리즘을 반영하는 정도와 프로세스의 본질에 얼마나 내재되어 있는지에 대해 언급 할 가치가 있습니다.
특정의 계수 사이의 상관 관계의 패턴은 SVD 알고리즘에 의해 임의의 선택에 큰 거래를 의존하는 솔루션은 고유하지 않기 때문에 :의 열 유 항상 독립적으로 곱한 수 있습니다 − 1 또는 1 . 기호를 선택하는 본질적인 방법은 없습니다. 따라서, 2 개의 SVD 알고리즘이 상이한 (임의의 또는 임의의 임의의) 부호의 선택을 할 때, ( u나는 j, U나는'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입니다). 그럼에도 불구하고, 독립성의 결여는 여전히 명백 할 것이다 (특히 균일 한 원형 형태, 특히 유I , J 및 유I , J' 사이에 나타남 ).
R
SVD 알고리즘이 열의 부호를 선택 하는 방식에서 원래 산점도의 일부 사분면에 데이터가 부족합니다 (위 그림 참조) .
결론에 대해서는 아무것도 바뀌지 않습니다. 유 의 두 번째 열이 첫 번째 열과 직교하므로 열 (다변량 랜덤 변수로 간주)은 첫 번째 (다변량 랜덤 변수라고도 함 )에 종속 됩니다. 한 열의 모든 구성 요소가 다른 열의 모든 구성 요소와 독립적 일 수는 없습니다. 의존성을 모호하게하는 방식으로 데이터를 보는 것만으로는 의존성이 유지됩니다.
다음은 R
사례 k > 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=".")