모든 공분산 행렬이 양의 명확한가?


48

나는 대답이 '그렇다'고 생각하지만 여전히 무언가가 옳지 않다고 느낀다. 문헌에 일반적인 결과가 있어야합니까, 누군가 나를 도울 수 있습니까?


2
모든 공분산 행렬은 양의 반 정밀도입니다. 즉, 모든 공분산 행렬에는 음이 아닌 고유 값이 있어야합니다. 고유 값 중 어느 것도 0이 아닌 경우 공분산 행렬은 추가로 양의 한정입니다.
kaka


4
@Jingjings : 나는 당신이 어떤 대답 도 지지 하거나 받아들이지 않았다는 것을 당신의 프로필에서 볼 수 있습니다 ; 좋은 답변이 많고 좋은 질문이 많다는 점을 감안하면 상당히 주목할 만합니다. 나는 그것이 어떻게 작동하는지 실제로 알지 못한다고 생각합니다. 아이디어는 유용하다고 생각되는 답변을 찬성하고 문제를 해결한다고 생각되는 답변을 받아 들여야한다는 것입니다. 많은 답변을 공표하고 일부 답변을 수락하는 것처럼 보입니다.
amoeba는

답변:


47

아니.

세 개의 변수 , 및 고려하십시오 . 그들의 공분산 행렬 은 가 양수가 아닌 벡터 ( )가 때문에 양의 이 아닙니다.XYZ=X+YMz=(1,1,1)zMz

모집단 공분산 행렬은 양의 반 정밀도입니다.

( 여기서 속성 2 참조 )

불완전한 표본 공분산의 형태로도 볼 수 있기 때문에 전체 표본의 공분산 행렬 (결 측값 없음)에도 동일하게 적용됩니다.

그러나 부동 소수점 수치 계산의 부정확성으로 인해 대수적으로 양의 정한 경우조차도 양의 반정의가 아닌 것으로 계산 될 수 있습니다. 알고리즘을 잘 선택하면 도움이 될 수 있습니다.

보다 일반적으로, 일부 변수에서 결 측값을 처리하는 방법에 따라 표본 공분산 행렬 은 이론적으로도 양의 반정의 일 수도 있고 아닐 수도 있습니다. 예를 들어, 페어 와이즈 삭제가 사용되면 양의 반 정확성을 보장 할 수 없습니다. 또한, 누적 된 수치 오차는 개념적으로 양의 반 정밀도 여야하는 샘플 공분산 행렬이 실패하는 원인이 될 수 있습니다.

이렇게 :

 x <- rnorm(30)
 y <- rnorm(30) - x/10 # it doesn't matter for this if x and y are correlated or not
 z <- x+y
 M <- cov(data.frame(x=x,y=y,z=z))
 z <- rbind(1,1,-1)
 t(z)%*%M%*%z
              [,1]
[1,] -1.110223e-16

이것은 내가 시도한 첫 번째 예에서 발생했습니다 (아마 씨앗을 제공해야하지만 씨앗을 얻기 전에 많은 예를 시도 해야하는 경우는 거의 없습니다).

대수적으로 0이 되더라도 결과는 음으로 나왔습니다 . 다른 숫자 세트는 양수 또는 "정확한"0을 생성 할 수 있습니다.

-

쌍별 결실을 통한 양성 반정의 상실로 이어지는 중등도 결손의 예 :

z <- x + y + rnorm(30)/50  # same x and y as before.
xyz1 <- data.frame(x=x,y=y,z=z) # high correlation but definitely of full rank 

xyz1$x[sample(1:30,5)] <- NA   # make 5 x's missing  

xyz1$y[sample(1:30,5)] <- NA   # make 5 y's missing  

xyz1$z[sample(1:30,5)] <- NA   # make 5 z's missing  

cov(xyz1,use="pairwise")     # the individual pairwise covars are fine ...

           x          y        z
x  1.2107760 -0.2552947 1.255868
y -0.2552947  1.2728156 1.037446
z  1.2558683  1.0374456 2.367978

 chol(cov(xyz1,use="pairwise"))  # ... but leave the matrix not positive semi-definite

Error in chol.default(cov(xyz1, use = "pairwise")) : 
  the leading minor of order 3 is not positive definite

 chol(cov(xyz1,use="complete")) # but deleting even more rows leaves it PSD

          x          y          z
x 0.8760209 -0.2253484 0.64303448
y 0.0000000  1.1088741 1.11270078
z 0.0000000  0.0000000 0.01345364

1
+1 : 그러나 대부분의 말로 표현하면 : 일반적으로 PSD-ness가 보장되지 않는 것 같습니다. sjm.majewski의 답변에서 볼 수 있듯이 "병리학 적"사례 (최고가 아닌)가 필요하며 그 문제가 발생합니다. (나는 숫자 주석에 완전히 동의합니다) 숫자 오류를 고려하더라도 PSD를 보장 할 수없는 조금 더 누락 된 값 문제를 자세히 설명 할 수 있습니까? (저는 말할 때 측정의 희소성에 관심이 없다고 가정합니다)
usεr11852는 Reinstate Monic이

2
물론 그것은 전체 순위가 아니거나 매우 가까운 경우에만 발생합니다. PSD의 정의 (그리고 분산과의 관계에 대한 @ sjm.majewski의 언급)를 살펴보면이 점이 분명합니다. 그러나 병이 아닌 것으로 정의하는 것은 이상한 것처럼 보입니다. 이러한 전체 순위가 아닌 상황은 실제로 항상 발생하기 때문입니다. 이것은 간단한 pedantry가 아닙니다-매일 실제 데이터 세트에 영향을 미치며 결과적으로 여기에서 정기적 인 질문이 생성됩니다. 여기에 공간이 없기 때문에 위의 누락 및 쌍별 삭제에 대해 이야기하겠습니다.
Glen_b

2
나는이 답변에 상황에서 샘플 공분산 행렬이 양의 명확한 값을 갖지 못하도록 보장 할 것임을 명시 적으로 언급하는 것이 좋을 것이라고 생각한다 (낮은 순위가 될 것이다. 이 Q stats.stackexchange.com/questions/198488을 복제본 으로 닫을 수 있는 스레드가 있는지 검색 중이며 이것이 좋은 후보라고 생각하지만 언급하지 않는 것 같습니다. 케이스. n<pn<p
amoeba는

27

모집단의 공분산 행렬이 항상 양의 반 인 이유를 이해하려면 여기서 는 실수이고, 는 실수 값인 임의 변수입니다.

i,j=1nyiyjCov(Xi,Xj)=Var(i=1nyiXi)0
yiXi

이것은 또한 Glen_b가 제시 한 예에서 공분산 행렬이 양의 명확하지 않은 이유를 설명합니다. 우리는 한 및 그래서 , 및 상수 인 랜덤 변수의 분산은 입니다.X 1 = X , X 2 = Y , X 3 = Z = X + Y 3 i = 1 y i X i = 0 0y1=1,y2=1,y3=1X1=X,X2=Y,X3=Z=X+Yi=13yiXi=00


좋은! 공감;)
바다에있는 노인.

이것은 받아 들여야 할 대답이어야합니다. 이 질문은 단지 표본이 아닌 랜덤 변수의 모집단 공분산 행렬을 나타내는 "공분산 행렬"에 관한 것입니다.
user3303

답에 사용한 공식이 무엇인지 물어봐도 될까요?
Aqqqq

분산과 공분산이있는 수식을 의미하는 경우 합의 제곱에 대한 수식에서 합을 구할 수 있습니다 (즉, 합의 제곱은 모든 쌍에 대한 곱의 합과 같습니다).
sjm.majewski
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.