我一直在尝试在 R 中重现类似 Cholesky 的协方差分解 - 就像在 Matlab 中使用cholcov()
. 示例取自https://uk.mathworks.com/help/stats/cholcov.html。
作为示例的原始cholcov()
函数的结果:
T =
-0.2113 0.7887 -0.5774 0
0.7887 -0.2113 -0.5774 0
1.1547 1.1547 1.1547 1.7321
我试图T
在 R 中复制它。我试过:
C1 <- cbind(c(2,1,1,2), c(1,2,1,2), c(1,1,2,2), c(2,2,2,3))
T1 <- chol(C1)
C2 <- t(T1) %*% T1
我的结果:
[,1] [,2] [,3] [,4]
[1,] 1.414214 0.7071068 0.7071068 1.414214e+00
[2,] 0.000000 1.2247449 0.4082483 8.164966e-01
[3,] 0.000000 0.0000000 1.1547005 5.773503e-01
[4,] 0.000000 0.0000000 0.0000000 1.290478e-08
C2
恢复C1
,但T1
与 MATLAB 的解决方案完全不同。然后我想也许这将是协方差矩阵的 Cholesky 组合:
T1 <- chol(cov(C1))
但我明白了
[,1] [,2] [,3] [,4]
[1,] 0.5773503 0.0000000 0.0000000 2.886751e-01
[2,] 0.0000000 0.5773503 0.0000000 2.886751e-01
[3,] 0.0000000 0.0000000 0.5773503 2.886751e-01
[4,] 0.0000000 0.0000000 0.0000000 3.725290e-09
这也不对。
谁能给我一个提示如何cholcov()
在 Matlab 中计算以便我可以在 R 中复制它?