答えはイエスだと思いますが、それでも何か間違っていると感じています。文献にはいくつかの一般的な結果があるはずですが、誰か助けてもらえますか?
答えはイエスだと思いますが、それでも何か間違っていると感じています。文献にはいくつかの一般的な結果があるはずですが、誰か助けてもらえますか?
回答:
番号。
、、 3つの変数を考えます。それらの共分散行列、が正でないベクトル()があるため、はありません。
母集団共分散行列は、半正定です。
(プロパティ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
さて、母集団の共分散行列が常に正の半正定である理由を理解するには、次のことに注意してください。 ここで、は実数で、は実数値のランダム変数です。
これはまた、Glen_bによって与えられた例で共分散行列が正定ではなかった理由を説明します。我々が持っていた、及び、そう、および定数である確率変数の分散はです。