Yanıtlar:
Örneğin, aşağıdaki komutun döndürdüğü grafikte mi demek istediniz?
biplot(prcomp(USArrests, scale = TRUE))
Evet ise, o zaman üst ve sağ eksenler grafikteki kırmızı okları (değişkenleri gösteren noktalar) yorumlamak için kullanılır.
Eğer temel bileşen analizi nasıl çalıştığını biliyorum ve R kodu, elde edilen sonuçlar nasıl gösterileri aşağıdaki kodu okuyabiliyorsanız prcomp()
başlangıçta tedavi edilir biplot.prcomp()
nihai komplo önce biplot.default()
. Bu iki fonksiyon, çizim yaptığınızda arka planda çağrılır biplot()
ve aşağıdaki değiştirilmiş kod alıntısı şuradan gelir 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)
Kısaca, yukarıdaki örnekte, değişken yüklerin ( x$rotation
) matrisi , ana bileşenlerin standart sapması (x$sdev
, gözlem sayısının ) çarpı karekökünün . Bu, üst ve sağ eksenler için ölçeği çizimde görünene göre ayarlar.
Değişken yükleri ölçeklendirmek için başka yöntemler de vardır. Bunlar, örneğin R paketi vegan tarafından sunulmaktadır.
biplot.default
). Bunun son derece kafa karıştırıcı olduğunu düşünüyorum.
Biplot için daha iyi bir görselleştirmem var. Lütfen aşağıdaki şekli kontrol edin.
Deneyde, 3d noktaları 2d'ye (simüle veri seti) eşlemeye çalışıyorum.
2d'de biplotu anlamanın hilesi, aynı şeyi 3d olarak görmek için doğru açıyı bulmaktır. Tüm veri noktaları numaralandırılmıştır, eşleştirmeyi açıkça görebilirsiniz.
Sonuçları yeniden oluşturmak için kod İşte.
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
komut tarafından üretilen ve sağ taraftaki şekilde çoğaltılan biplotta durum böyle değildir : orada nokta bulutu standartlaştırılmıştır, ancak okların varyanslara karşılık gelen uzunlukları vardır.
biplot
produces with scale=0
argument.