Воспроизведение stats :: biplot с помощью ggplot2 :: autoplot из пакета ggfortify R

Я пытаюсь воспроизвести следующий stats::biplot сюжет с ggplot2::autoplot из пакета ggfortify R.

biplot(prcomp(USArrests, scale = TRUE))

введите описание изображения здесь

Вот мой ggplot2::autoplot код из ggfortify R пакета с его выводом.

devtools::install_github("sinhrks/ggfortify")
 library(ggfortify)
ggplot2::autoplot(stats::prcomp(USArrests, scale=TRUE), label = TRUE, loadings.label = TRUE)

введите описание изображения здесь

Вопросы

  1. Почему два сюжета разные? Как воспроизвести базовый сюжет?
  2. Как добавить метки, как показано на базовом графике?

person MYaseen208    schedule 08.02.2015    source источник
comment
Пожалуйста, предоставьте некоторые данные, чтобы мы могли решить эту проблему.   -  person lawyeR    schedule 08.02.2015
comment
@lawyeR: USArrests поставляется с R.   -  person MYaseen208    schedule 08.02.2015
comment
Извини, я должен был это знать. Может быть, отредактируйте свой вопрос, чтобы это знали и другие. :)   -  person lawyeR    schedule 08.02.2015
comment
Только что опубликовал, как мне кажется, более точный ответ   -  person Tom Wenseleers    schedule 15.08.2015


Ответы (3)


Спасибо за использование пакета. Проблема зависит от версии {dplyr} и исправлена ​​в {ggfortify}. Не могли бы вы обновить пакет, а затем попробовать?

Я прикрепил результат после исправления по ссылке ниже:

https://github.com/sinhrks/ggfortify/pull/21

person sinhrks    schedule 09.02.2015
comment
Отличная работа и спасибо за исправление ошибки. Почему масштабы двух графиков разные? Есть предположения. - person MYaseen208; 09.02.2015

Чтобы воссоздать этот график в ggplot2, вам просто нужно извлечь нужные данные из объекта prcomp. В этом случае вы наносите на график исходные данные, а также переменные нагрузки вращения, поэтому вам понадобятся два фрейма данных.

Попробуй это:

x <- prcomp(USArrests, scale = TRUE)
z1 <- data.frame(State = rownames(x$x), x$x[, 1:2])
z2 <- data.frame(State = rownames(x$rotation), x$rotation[, 1:2])

library(ggplot2)
ggplot(z1, aes(PC1, PC2, label=State)) + 
  geom_text(size=3) +
  geom_segment(data=z2, aes(PC1, PC2, xend=0, yend=0), col="red") +
  geom_text(data=z2, aes(PC1, PC2, label=State), col="red") +
  theme_bw()

введите описание изображения здесь

person Andrie    schedule 08.02.2015
comment
(+1): Спасибо @Andrie за ответ. sinhrks исправил ошибку в ggfortify. Но все же масштабы двух графиков разные. Есть предположения. - person MYaseen208; 09.02.2015

Автоплот имитирует поведение / масштабирование, которое вы получаете с biplot.prcomp опцией pc.biplot = TRUE:

devtools::install_github("sinhrks/ggfortify")
 library(ggfortify)
ggplot2::autoplot(stats::prcomp(USArrests, scale=TRUE), label = TRUE, loadings.label = TRUE)

введите описание изображения здесь

biplot(prcomp(USArrests, scale = TRUE), pc.biplot = TRUE)

введите описание изображения здесь

Затем он создает «двойной график главных компонент» Габриэля (1971), в соответствии с которым наблюдения увеличиваются на sqrt (n), а переменные уменьшаются на sqrt (n). Тогда внутренние произведения между переменными приблизительно равны ковариациям, а расстояния между наблюдениями приблизительно равны расстоянию Махаланобиса. Обычно это именно то, что вам нужно, см. Также подробное раскрытие здесь .

ggord, кстати, тоже отличный пакет для создания биплотов, как и ggbiplot.

PS: ответ, помеченный выше как правильный, я считаю не совсем правильным.

person Tom Wenseleers    schedule 10.08.2015