Как уже упоминалось в комментариях, вы можете использовать
ii <- as.matrix(iris[,1:4])
princomp(covmat=cor(ii))
Это даст вам эквивалентные результаты для princomp(iris,cor=TRUE)
(то есть не , что вы хотите - последний использует полныйматрица данных, но возвращает значение, вычисленное при преобразовании ковариационной матрицы в корреляцию).
Вы также можете выполнить все соответствующие вычисления вручную, если у вас есть матрица корреляции:
cc <- cor(ii)
e1 <- eigen(cc)
Стандартные отклонения:
sqrt(e1$values)
[1] 1.7083611 0.9560494 0.3830886 0.1439265
Отношение отклонений:
e1$values/sum(e1$values)
[1] 0.729624454 0.228507618 0.036689219 0.005178709
Вы можете получить нагрузки через e1$vectors
.Вычислите баллы (в соответствии с этот вопрос CV ) с помощью as.matrix(iris) %*% e1$vectors)
(это будет не дать численно идентичные ответы на princomp()$scores
- собственные векторы масштабируются по-разному - но это дает эквивалентные результаты).