我正在尝试使用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
答案 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)