Как извлечь нагрузки из PCA - при сохранении загрузки переменных / имен переменных - PullRequest
0 голосов
/ 06 марта 2019

Я выполнил успешную PCA, и теперь я хочу извлечь нагрузки.

Я управлял PCA

    #Run PCA and plot results
pca <- prcomp(dataset_numeric[c(1:8, 10:11, 13:18),c(1:ncol(data_tsc))], center = TRUE, scale. = TRUE)
summary(pca)

Попытки извлечь нагрузки

loading_PC <- pca$rotation[,2] %>% sort(decreasing = TRUE)

Который вернул это

enter image description here

Впоследствии я попытался организовать это во фрейм данных, используя следующий код:

loading_PC <- pca$rotation[,2]  %>% sort(decreasing = TRUE) %>% as.data.frame(row.names = TRUE)

Который вернул

enter image description here

Как видите, все имена генов (переменные, имена загрузок) отсутствуют, поэтому мне было интересно, есть ли способ сохранить их. Заранее спасибо.

Изменения Я добавил dput для Loading_PC в ответ на вопрос:

    c(A1CF = -0.146219143927011, AACS = -0.231151131955, AATK = -0.485220551393282, 
ABCA1 = -0.222934271967757, ABCA5 = 0.282376223269048, ABCA7 = 0.0779960358397119, 
ABCB9 = -0.389273153643306, ABCC4 = -0.611693335877105, ABCC5 = 0.129182251850867, 
ABCD2 = 0.108813374460373)

1 Ответ

0 голосов
/ 06 марта 2019

Имена отсутствуют, потому что вы передаете атомарный вектор в sort (), а взамен он дает атомный вектор.Переупорядочьте матрицу отверстий / df с порядком, а затем подмножество с drop = FALSE:

> rm(list = ls())
> 
> data(iris)
> 
> iris.pca <- prcomp(iris[colnames(iris) != "Species"], center = TRUE, scale. = TRUE)
> iris.weights <- data.frame(iris.pca$rotation)
> 
> # Names are lost
> NoNames <- sort(iris.weights[, 2], decreasing = TRUE)
> NoNames
[1] -0.02449161 -0.06694199 -0.37741762 -0.92329566
> 
> # Names are preserve
> WithNames <- iris.weights[order(iris.weights[, 2], decreasing = TRUE),][, 2, drop = FALSE]
> WithNames
                     PC2
Petal.Length -0.02449161
Petal.Width  -0.06694199
Sepal.Length -0.37741762
Sepal.Width  -0.92329566
> 

Вот с последним dput ():

> # With dput
> 
> df <- data.frame(c(A1CF = -0.146219143927011, AACS = -0.231151131955, AATK = -0.485220551393282,
+         ABCA1 = -0.222934271967757, ABCA5 = 0.282376223269048, ABCA7 = 0.0779960358397119,
+         ABCB9 = -0.389273153643306, ABCC4 = -0.611693335877105, ABCC5 = 0.129182251850867,
+         ABCD2 = 0.108813374460373))
> 
> colnames(df) <- "weights"
> 
> sort(df$weights, decreasing = TRUE)
 [1]  0.28237622  0.12918225  0.10881337  0.07799604 -0.14621914 -0.22293427 -0.23115113
 [8] -0.38927315 -0.48522055 -0.61169334
> 
> df[order(df$weights, decreasing = TRUE),,drop = FALSE]
          weights
ABCA5  0.28237622
ABCC5  0.12918225
ABCD2  0.10881337
ABCA7  0.07799604
A1CF  -0.14621914
ABCA1 -0.22293427
AACS  -0.23115113
ABCB9 -0.38927315
AATK  -0.48522055
ABCC4 -0.61169334
> 

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...