Код в исходном сообщении идентифицирует столбцы (измерения), которые наиболее способствуют первому главному компоненту. Чтобы понять строки, которые имеют наибольшую величину по первому компоненту, мы должны объединить оценки факторов с названиями видов и отсортировать по абсолютному значению PC1.
data <-structure(list(X40.45cm = c(0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L), X50.55cm = c(0L, 0L, 0L, 0L, 0L,
3L, 0L, 0L, 0L, 0L, 32L, 0L, 64L, 96L, 0L, 0L),
X60.65cm = c(0L,
3L, 1L, 64L, 3L, 3L, 0L, 0L, 128L, 0L, 0L, 0L, 352L, 512L, 160L,
0L), X70.75cm = c(1L, 7L, 0L, 32L, 33L, 7L, 1L, 0L, 256L, 32L,
0L, 0L, 352L, 544L, 320L, 0L), X80.85cm = c(109L, 1L, 2L, 11L,
164L, 34L, 2L, 64L, 480L, 32L, 160L, 96L, 352L, 1184L, 224L,
32L)), .Names = c("X40.45cm", "X50.55cm", "X60.65cm", "X70.75cm",
"X80.85cm"), class = "data.frame", row.names = c(NA, -16L))
# add column for species names
Species <- paste("Species",LETTERS[1:16])
data <- cbind(Species,data)
# pca
princomp <- prcomp(data[,2:ncol(data)],scale. = TRUE)
stats <- summary(princomp)
# return factor scores for first principal component
x_result <- princomp$x[,"PC1"]
На данный момент x_result
содержит значения коэффициентов для основного компонента 1. Поскольку оценки расположены в порядке исходных наблюдений входного фрейма данных в princomp()
, мы можем просто установить смоделированный Имена видов к вектору с names(x_result)
и сортировка вектора по убыванию абсолютного значения.
names(x_result) <- Species
x_result[order(abs(x_result),decreasing = TRUE)][1:10]
и выходные данные:
> x_result[order(abs(x_result),decreasing = TRUE)][1:10]
Species N Species M Species B Species F Species G Species C Species I
-5.8993459 -2.8787001 1.3925053 1.2874129 1.0017446 1.0012497 -0.9691621
Species P Species H Species J
0.9550311 0.9020930 0.8617220
>
Коэффициенты печати и результаты загрузки
С пакетом pcaMethods
от Bioconductor, мы можем повторить анализ и распечатать пара графиков, иллюстрирующих оценки факторов (наблюдения) и нагрузки (измерения) по первым двум факторам.
Сначала мы устанавливаем Bioconductor и pcaMethods (при необходимости),
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install(version = "3.10")
BiocManager::install("pcaMethods")
library(pcaMethods)
Далее, мы проводим анализ с данными, масштабированными до единичной дисперсии и центрированными, и генерируем графики.
speciesPCA <- pca(data[,2:ncol(data)],scale = "uv", center = TRUE)
slplot(speciesPCA, scoresLoadings = c(T,T))
Наконец, мы извлекаем факторные оценки из объекта speciesPCA
, добавляем имена строк и печатаем в порядке убывания абсолютного значение PC1
. Обратите внимание, что pcaMethods
использует объектную модель S4, поэтому нам нужно использовать форму @
оператора извлечения для доступа к элементам внутри объекта.
theScores <- speciesPCA@scores[,1] # get first column PC1 only
names(theScores) <- Species
theScores[order(abs(theScores),decreasing = TRUE)]
... и выходные данные:
> theScores[order(abs(theScores),decreasing = TRUE)]
Species N Species M Species B Species F Species G Species C Species I Species P Species H Species J Species L
-5.8993459 -2.8787001 1.3925053 1.2874129 1.0017446 1.0012497 -0.9691621 0.9550311 0.9020930 0.8617220 0.8491550
Species O Species A Species D Species E Species K
-0.8414228 0.8247330 0.6781688 0.6302041 0.2046116
>
Обратите внимание, что оценки и порядок соответствуют выводу из prcomp()
версии анализа.