R中princomp()对象的summary()和loadings()有什么区别?

机器算法验证 r 主成分分析
2022-03-18 03:32:02

示例代码:

(pc.cr <- princomp(USArrests))  
summary(pc.cr)
loadings(pc.cr)  ## note that blank entries are small but not zero

我从每个人那里得到不同的输出,我不确定我理解有什么区别。

这是输出:

> summary(pc.cr)
Importance of components:
                           Comp.1      Comp.2      Comp.3       Comp.4
Standard deviation     82.8908472 14.06956001 6.424204055 2.4578367034
Proportion of Variance  0.9655342  0.02781734 0.005799535 0.0008489079
Cumulative Proportion   0.9655342  0.99335156 0.999151092 1.0000000000


> loadings(pc.cr)  ## note that blank entries are small but not zero

...

               Comp.1 Comp.2 Comp.3 Comp.4
SS loadings      1.00   1.00   1.00   1.00
Proportion Var   0.25   0.25   0.25   0.25
Cumulative Var   0.25   0.50   0.75   1.00

PS:我怎样才能访问由summary(pc.cr)创建的表??(我似乎在 str 中找不到它。)

1个回答

第一个输出是正确且最有用的输出。调用loadings()您的对象只会返回一个摘要,其中 SS 始终等于 1,因此百分比方差只是 SS 负载除以变量数。仅在使用因子分析时才有意义(如factanal)。我从不使用princomp其基于 SVD 的替代方案 ( prcomp),我更喜欢FactoMineRade4包,它们的功能要强大得多!

关于您的第二个问题,该summary()函数仅返回每个组件的 SD(pc.cr$sdev在您的情况下),而表的其余部分似乎是事后计算的(通过printorshow方法,我没有对此进行详细调查)。

> getS3method("summary","princomp")
function (object, loadings = FALSE, cutoff = 0.1, ...)
{
    object$cutoff <- cutoff
    object$print.loadings <- loadings
    class(object) <- "summary.princomp"
    object
}
<environment: namespace:stats>

princomp()可以使用 . 查看其本身所做的事情getAnywhere("princomp.default")