PCA: Могу ли я повернуть ось первого главного компонента в R?

Вот воспроизводимый пример:

set.seed(10)
pick <- sample(nrow(iris),nrow(iris)/2)
iris.training <- iris[pick,] 
iris.testing <- iris[-pick,]
pca.training <- prcomp(iris.training[-5])
pca.testing <- prcomp(iris.testing[-5])
autoplot(pca.training,loadings.label=T,loadings=T)
autoplot(pca.testing,loadings.label=T,loadings=T)

Что дает следующий вывод: biplot_pca_training biplot_pca_testing

Как видно, pca на data.training и на data.testing дает очень похожие побочные сюжеты, но первые главные компоненты меняют знак, они зеркальны. Можно ли заставить два компонента повернуться на 180 градусов?


person Jean de Léry    schedule 14.12.2020    source источник


Ответы (2)


Вы не возвращаете повернутые переменные. Измененный код показан ниже. Обратите внимание, что retx=TRUE

set.seed(10)
pick <- sample(nrow(iris),nrow(iris)/2)
iris.training <- iris[pick,] 
iris.testing <- iris[-pick,]
pca.training <- prcomp(iris.training[-5], retx=TRUE)
pca.testing <- prcomp(iris.testing[-5], retx=TRUE)
autoplot(pca.training,loadings.label=TRUE,loadings=TRUE)
autoplot(pca.testing,loadings.label=TRUE,loadings=TRUE)

Для обучения и тестирования были получены следующие результаты. Обучающий сюжет PCA Тестирование графика PCA

person Amit    schedule 14.12.2020
comment
retx=TRUE используется по умолчанию, см. ?prcomp. Не уверен, почему ваши оси PC1 отличаются от моих и OP, но страница справки предупреждает, что это возможно. - person user2554330; 14.12.2020
comment
@ user2554330 Вы правы. Теперь это заставляет и меня задуматься. - person Amit; 14.12.2020
comment
Спасибо за Ваш ответ ! - person Jean de Léry; 14.12.2020

Я предполагаю, что autoplot — это функция из пакета ggfortify. Вероятно, есть два способа сделать это. Самый простой способ — просто попросить перевернуть ось x, написав

autoplot(pca.testing,loadings.label=TRUE,loadings=TRUE) + scale_x_reverse()

скриншот

Обратите внимание, что это не изменило никаких значений: ось X теперь движется от положительного к отрицательному, а не в обычном направлении.

Второй — изменить объект pca.testing, чтобы поменять местами знаки на оси x. Это статистически достоверно: PCA не определяет знаки каких-либо компонентов, но это немного сложно, потому что знаки появляются в двух местах: компонент x для точек данных и компонент rotation для стрелок:

pca.testing$x[,1] <- - pca.testing$x[,1]
pca.testing$rotation[,1] <- -pca.testing$rotation[,1]
autoplot(pca.testing,loadings.label=TRUE,loadings=TRUE)

скриншот

Не относится к вашему вопросу, но есть совет: не используйте T, используйте TRUE, иначе в следующий раз, когда у вас будут данные о температуре, вы можете непреднамеренно изменить значение и вызвать хаос в своем анализе.

person user2554330    schedule 14.12.2020
comment
Спасибо за ваш ответ, очень признателен. - person Jean de Léry; 14.12.2020