我希望在R中的pca之后summary(pca)将最终解释的方差的累积比例返回到最后一行,但是如何提取该行呢?
summary(prcomp(USArrests, scale = TRUE))
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 1.5749 0.9949 0.59713 0.41645
Proportion of Variance 0.6201 0.2474 0.08914 0.04336
Cumulative Proportion 0.6201 0.8675 0.95664 1.00000
Run Code Online (Sandbox Code Playgroud)
我尝试了s <- summary(prcomp(USArrests, scale = TRUE)) s [3]等,但它没有返回最后一行.
mar*_*c1s 12
你可以试试
pr <- prcomp(USArrests, scale = TRUE)
vars <- apply(pr$x, 2, var)
props <- vars / sum(vars)
cumsum(props)
Run Code Online (Sandbox Code Playgroud)
您也可以直接从特征值(即标准开发:)中提取此信息pr$sdev:
pr <- prcomp(USArrests, scale = TRUE)
cumsum(pr$sdev^2 / sum(pr$sdev^2))
Run Code Online (Sandbox Code Playgroud)
扩展问题评论中 user20650 的答案,因为我相信它最直接地回答了问题(即通过对象本身,而不是重新计算)。长话短说:博士:s$importance[3, ]。
(s <- summary(prcomp(USArrests, scale = TRUE)))
# Importance of components:
# PC1 PC2 PC3 PC4
# Standard deviation 1.5749 0.9949 0.59713 0.41645
# Proportion of Variance 0.6201 0.2474 0.08914 0.04336
# Cumulative Proportion 0.6201 0.8675 0.95664 1.00000
str(s)
# List of 6
# $ sdev : num [1:4] 1.575 0.995 0.597 0.416
# $ rotation : num [1:4, 1:4] -0.536 -0.583 -0.278 -0.543 0.418 ...
# ..- attr(*, "dimnames")=List of 2
# .. ..$ : chr [1:4] "Murder" "Assault" "UrbanPop" "Rape"
# .. ..$ : chr [1:4] "PC1" "PC2" "PC3" "PC4"
# $ center : Named num [1:4] 7.79 170.76 65.54 21.23
# ..- attr(*, "names")= chr [1:4] "Murder" "Assault" "UrbanPop" "Rape"
# $ scale : Named num [1:4] 4.36 83.34 14.47 9.37
# ..- attr(*, "names")= chr [1:4] "Murder" "Assault" "UrbanPop" "Rape"
# $ x : num [1:50, 1:4] -0.976 -1.931 -1.745 0.14 -2.499 ...
# ..- attr(*, "dimnames")=List of 2
# .. ..$ : chr [1:50] "Alabama" "Alaska" "Arizona" "Arkansas" ...
# .. ..$ : chr [1:4] "PC1" "PC2" "PC3" "PC4"
# $ importance: num [1:3, 1:4] 1.575 0.62 0.62 0.995 0.247 ...
# ..- attr(*, "dimnames")=List of 2
# .. ..$ : chr [1:3] "Standard deviation" "Proportion of Variance" "Cumulative Proportion"
# .. ..$ : chr [1:4] "PC1" "PC2" "PC3" "PC4"
# - attr(*, "class")= chr "summary.prcomp"
# We see importance is the relevant feature
s$importance
# PC1 PC2 PC3 PC4
# Standard deviation 1.574878 0.9948694 0.5971291 0.4164494
# Proportion of Variance 0.620060 0.2474400 0.0891400 0.0433600
# Cumulative Proportion 0.620060 0.8675000 0.9566400 1.0000000
# Cool, same as displayed the table. Grab the third row and voila.
s$importance[3, ] # Numeric vector
# PC1 PC2 PC3 PC4
# 0.62006 0.86750 0.95664 1.00000
Run Code Online (Sandbox Code Playgroud)