Covariance
每個協方差矩陣都是正定的嗎?
我想答案應該是肯定的,但我還是覺得有些不對勁。文獻中應該有一些一般性的結果,有人可以幫助我嗎?
不。
考慮三個變量,,和. 他們的協方差矩陣,, 不是正定的,因為有一個向量() 其中不是積極的。
總體協方差矩陣是半正定的。
(請參閱此處的屬性 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
這發生在我嘗試的第一個示例中(我可能應該提供一個種子,但它並不少見,以至於您必須在獲得一個之前嘗試很多示例)。
結果是負數,即使它在代數上應該為零。一組不同的數字可能會產生正數或“精確”零。
–
通過成對刪除導致正半定性丟失的中度缺失示例:
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