Вот воспроизводимый пример:
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)
Как видно, pca на data.training и на data.testing дает очень похожие побочные сюжеты, но первые главные компоненты меняют знак, они зеркальны. Можно ли заставить два компонента повернуться на 180 градусов?
Я предполагаю, что 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
, иначе в следующий раз, когда у вас будут данные о температуре, вы можете непреднамеренно изменить значение и вызвать хаос в своем анализе.
Вы не возвращаете повернутые переменные. Измененный код показан ниже. Обратите внимание, что 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)
Для обучения и тестирования были получены следующие результаты.
retx=TRUE
используется по умолчанию, см. ?prcomp
. Не уверен, почему ваши оси PC1 отличаются от моих и OP, но страница справки предупреждает, что это возможно.
@ user2554330 Вы правы. Теперь это заставляет и меня задуматься.
Спасибо за Ваш ответ !
Спасибо за ваш ответ, очень признателен.