使用R的数据帧的奇异值

时间:2019-01-13 16:19:39

标签: r dataframe pca

我正在尝试使用R获取数据帧的奇异值。prcomp方法显示标准差,而svd $ d显示向量。 显示的值正确。但是,在这种情况下,我不确定其中哪一个是奇异值? 我浏览了一些文档,但它们没有指向正确的方向。

iris<-read.table(file.choose(),header=T)
#(i)Plotting singular values
X.pca<-prcomp(iris[,1:4],scale=T) 
X.pca # Displays the Standard Deviations
svd(iris[,1:4])$d # Displays the d values

1 个答案:

答案 0 :(得分:0)

在使用components <- prcomp(iris[,1:4)来获取主要成分时,可以像上面一样使用components$sdev来获取那些值。

data("iris")
iris
components<-prcomp(iris[,1:4]
components$sdev

2.0562689 0.4926162 0.2796596 0.1543862

来自PCA的这四个值与“对角矩阵”成正比,相当于奇异值分解中的svd$d。该比例是因为SVD在计算方差时没有像sdev那样考虑样本数量。但这是PCA的标准化奇异值。

使用components$rotation来自prcomp()的结果数据等同于V matrix

                     PC1         PC2         PC3        PC4
Sepal.Length  0.36138659 -0.65658877  0.58202985  0.3154872
Sepal.Width  -0.08452251 -0.73016143 -0.59791083 -0.3197231
Petal.Length  0.85667061  0.17337266 -0.07623608 -0.4798390
Petal.Width   0.35828920  0.07548102 -0.54583143  0.7536574

如果您需要U组件,则可以使用components$x

            PC1          PC2          PC3           PC4
  [1,] -2.684125626 -0.319397247  0.027914828  0.0022624371
  [2,] -2.714141687  0.177001225  0.210464272  0.0990265503
  [3,] -2.888990569  0.144949426 -0.017900256  0.0199683897
  [4,] -2.745342856  0.318298979 -0.031559374 -0.0755758166
  [5,] -2.728716537 -0.326754513 -0.090079241 -0.0612585926
  [6,] -2.280859633 -0.741330449 -0.168677658 -0.0242008576
  [7,] -2.820537751  0.089461385 -0.257892158 -0.0481431065
  [8,] -2.626144973 -0.163384960  0.021879318 -0.0452978706
  [9,] -2.886382732  0.578311754 -0.020759570 -0.0267447358...(there is more)