Ответы:
Вы имеете в виду, например, в сюжете, что возвращает следующая команда?
biplot(prcomp(USArrests, scale = TRUE))
Если да, то верхняя и правая оси предназначены для интерпретации красных стрелок (точек, обозначающих переменные) на графике.
Если вы знаете, как работает анализ основных компонентов, и можете прочитать код R, приведенный ниже код показывает, как исходные результаты prcomp()
обрабатываются biplot.prcomp()
до окончательного построения графика biplot.default()
. Эти две функции вызываются в фоновом режиме, когда вы строите график biplot()
, и следующая отредактированная выдержка кода взята из biplot.prcomp()
.
x<-prcomp(USArrests, scale=TRUE)
choices = 1L:2L
scale = 1
pc.biplot = FALSE
scores<-x$x
lam <- x$sdev[choices]
n <- NROW(scores)
lam <- lam * sqrt(n)
lam <- lam^scale
yy<-t(t(x$rotation[, choices]) * lam)
xx<-t(t(scores[, choices])/lam)
biplot(xx,yy)
Вкратце, в приведенном выше примере матрица переменных нагрузок ( x$rotation
) масштабируется на стандартное отклонение главных компонент ( x$sdev
), умноженное на квадратный корень из числа наблюдений. Это устанавливает масштаб для верхней и правой осей к тому, что видно на графике.
Существуют и другие способы масштабирования переменных нагрузок. Они предлагаются, например, вегетарианским пакетом R.
У меня есть лучшая визуализация для биплота. Пожалуйста, проверьте следующий рисунок.
В эксперименте я пытаюсь отобразить трехмерные точки в 2d (смоделированный набор данных).
Хитрость для понимания биплота в 2d состоит в том, чтобы найти правильный угол, чтобы увидеть то же самое в 3D. Все точки данных пронумерованы, вы можете ясно видеть отображение.
Вот код для воспроизведения результатов.
require(rgl)
set.seed(0)
feature1=round(rnorm(50)*10+20)
feature2=round(rnorm(50)*10+30)
feature3=round(runif(50)*feature1)
d=data.frame(feature1,feature2,feature3)
head(d)
plot(feature1,feature2)
plot(feature2,feature3)
plot(feature1,feature3)
plot3d(d$feature1, d$feature2, d$feature3, type = 'n')
points3d(d$feature1, d$feature2, d$feature3, color = 'red', size = 10)
shift <- matrix(c(-2, 2, 0), 12, 3, byrow = TRUE)
text3d(d+shift,texts=1:50)
grid3d(c("x", "y", "z"))
pr.out=prcomp(d,scale.=T)
biplot(pr.out)
grid()
biplot
командой в R и воспроизведенному на вашей фигуре с правой стороны: там облако точек стандартизировано, но стрелки имеют длины, соответствующие отклонениям.
biplot
производит с scale=0
аргументом.