2014-03-13 39 views
0

我正在寻找在我的数据集上做PCA后提取协方差。我有SnP500的每月回报,并希望对其执行PCA。但我只是在寻找协方差。有没有办法从R中的prcomp()或princomp()函数中提取这些信息。我真的很感谢帮助。从R中princomp()提取协方差

-Cheers

回答

0
> data(USArrests) 

协方差矩阵是缩放和旋转后的对角矩阵diag(sdev^2)

> sdev <- prcomp(USArrests, scale = TRUE)$sdev 
> diag(sdev^2) 
##   [,1]  [,2]  [,3]  [,4] 
## [1,] 2.480242 0.0000000 0.0000000 0.0000000 
## [2,] 0.000000 0.9897652 0.0000000 0.0000000 
## [3,] 0.000000 0.0000000 0.3565632 0.0000000 
## [4,] 0.000000 0.0000000 0.0000000 0.1734301 

我们可以看到,当未缩放时,它与特征值相同。

> diag(prcomp(USArrests)$sdev^2) 
##   [,1]  [,2]  [,3]  [,4] 
## [1,] 7011.115 0.0000 0.00000 0.000000 
## [2,] 0.000 201.9924 0.00000 0.000000 
## [3,] 0.000 0.0000 42.11265 0.000000 
## [4,] 0.000 0.0000 0.00000 6.164246 

> C1 <- cov(USArrests) 
> eigen(C1)$values 
## [1] 7011.114851 201.992366 42.112651 6.164246 
+0

Thanks @RScriv。有没有办法从princomp()函数本身获取cov?我不想使用cov()函数。 – Rambo223

+0

是的。我编辑了我的答案。 –

+0

非常感谢。这有助于。 – Rambo223