16

23 個の変数を持つ一連の観測値があります。

prcomp と biplot を使用して結果をプロットすると、いくつかの問題が発生します。

  1. 実際のプロットはフレームの半分 (x < 0) しか占有しませんが、プロットは 0 を中心にしているため、スペースの半分が無駄になっています

  2. 2 つの変数が明らかに結果を支配しているため、他のすべての矢印がまとまってしまい、何も読み取れません。

広告 1. xlim および/または ylim を設定しようとしましたが、設定するとプロットがすべて台無しになるため、明らかに何か間違ったことをしています。

広告 2. どうにかして矢印のラベルをもっと離して、読めるようにすることはできますか? それとも、2 つの最も長い矢印 (ズームインのようなもの) なしで矢印をプロットすることもできますか?

私のPCAプロット

補遺: バイプロットでラベルを矢印とは異なる色で描画することは可能ですか?

また、x軸とy軸が比例していない場合は問題があります(グラフはxとyで異なる長さの間隔を示しています)。これは天使を矢印の間でゆがめると思います。そのようなサイズ変更は相似変換ではありません。バイプロットに 1:1 のアスペクト比を維持させたり、プロットを正方形ではなく長方形として描画させたりすることはできますか?

4

1 に答える 1

26

xlimと が使えると思いますylim。また、 のexpand引数を見てください?biplot。残念ながら、あなたはデータを提供していないので、いくつかのサンプルデータを取りましょう:

a <- princomp(USArrests)

呼び出した結果の下biplot

biplot(a)

ここに画像の説明を入力

そして今、「ズームイン」して「殺人」と「レイプ」を詳しく見ることができます と のスケーリング引数も使用しxlimます:ylimexpand?biplot

biplot(a, expand=10, xlim=c(-0.30, 0.0), ylim=c(-0.1, 0.1))

ここに画像の説明を入力

expand係数により、上軸と右軸のスケーリングが異なることに注意してください。

これは、プロットを読みやすくするのに役立ちますか?

編集

また、ラベルと矢印に異なる色を使用できるかどうかも尋ねました。biplotはこれをサポートしていません。できることは、 のコードをコピーしstats:::biplot.defaultて、必要に応じて変更することです (とが使用されている場合はcol引数を変更します)。plotaxistext

または、バイプロットに使用できますggplotここの投稿では、単純なバイプロット関数が実装されています。次のようにコードを変更できます。

PCbiplot <- function(PC, x="PC1", y="PC2", colors=c('black', 'black', 'red', 'red')) {
    # PC being a prcomp object
    data <- data.frame(obsnames=row.names(PC$x), PC$x)
    plot <- ggplot(data, aes_string(x=x, y=y)) + geom_text(alpha=.4, size=3, aes(label=obsnames), color=colors[1])
    plot <- plot + geom_hline(aes(0), size=.2) + geom_vline(aes(0), size=.2, color=colors[2])
    datapc <- data.frame(varnames=rownames(PC$rotation), PC$rotation)
    mult <- min(
        (max(data[,y]) - min(data[,y])/(max(datapc[,y])-min(datapc[,y]))),
        (max(data[,x]) - min(data[,x])/(max(datapc[,x])-min(datapc[,x])))
        )
    datapc <- transform(datapc,
            v1 = .7 * mult * (get(x)),
            v2 = .7 * mult * (get(y))
            )
    plot <- plot + coord_equal() + geom_text(data=datapc, aes(x=v1, y=v2, label=varnames), size = 5, vjust=1, color=colors[3])
    plot <- plot + geom_segment(data=datapc, aes(x=0, y=0, xend=v1, yend=v2), arrow=arrow(length=unit(0.2,"cm")), alpha=0.75, color=colors[4])
    plot
}

次のようにプロットします。

fit <- prcomp(USArrests, scale=T)
PCbiplot(fit, colors=c("black", "black", "red", "yellow"))

ここに画像の説明を入力

xlimこの関数を少しいじってみると、設定方法やylim値などを理解できると思います。

于 2013-06-12T12:14:17.027 に答える