回答:
たとえば、次のコマンドが返すプロットではどうですか?
biplot(prcomp(USArrests, scale = TRUE))
「はい」の場合、上軸と右軸は、プロットの赤い矢印(変数を表す点)の解釈に使用されることを意味します。
主成分分析の仕組みがわかっていて、Rコードを読むことができる場合、以下のコードは、prcomp()
によるbiplot.prcomp()
最終的なプロットの前に結果が最初に処理される方法を示していますbiplot.default()
。これらの2つの関数は、でプロットするときにバックグラウンドで呼び出され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パッケージビーガンによって提供されます。
biplot.default
バイプロットの視覚化が改善されました。次の図を確認してください。
この実験では、3Dポイントを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
引数で関数が生成するものにもっと対応すると思います。