7

R を使用してデータの PCA 分析を行おうとしています。私のデータは、それぞれ 3 つの生物学的複製 (つまり 6 行) と約 20000 の遺伝子 (つまり変数) を持つ 2 つのサンプル タイプです。まず、ガイドに記載されているコードで PCA モデルを取得してもうまくいきません。prcompggbiplot

>pca=prcomp(data,center=T,scale.=T)
Error in prcomp.default(data, center = T, scale. = T) : 
cannot rescale a constant/zero column to unit variance

ただし、scale. = Tパーツを削除すると、問題なく動作し、モデルが得られます。これはなぜですか? また、これが以下のエラーの原因ですか?

> summary(pca)
Importance of components:
                             PC1       PC2       PC3       PC4       PC5
Standard deviation     4662.8657 3570.7164 2717.8351 1419.3137 819.15844
Proportion of Variance    0.4879    0.2861    0.1658    0.0452   0.01506
Cumulative Proportion     0.4879    0.7740    0.9397    0.9849   1.00000

次に、PCA をプロットします。基本的なコードを使用しただけでも、エラーと空のプロット イメージが表示されます。

> ggbiplot(pca)
Error: invalid 'rot' value

これはどういう意味ですか?どうすれば修正できますか? PCA を作成する際の (非) スケールと関係があるのでしょうか、それとも何か違うのでしょうか? 標準的なサンプル コード (以下) を使用すると、非常に優れた PCA プロットが得られるため、これは私のデータに関係しているに違いないと思います。

> data(wine)
> wine.pca=prcomp(wine,scale.=T)
> print(ggbiplot(wine.pca, obs.scale = 1, var.scale = 1, groups = wine.class, 
  ellipse = TRUE, circle = TRUE))

[編集 1] データを 2 つの方法でサブセット化しようとしました: 1) すべての列を削除するとすべての行が 0 になり、2) すべての列を削除するとすべての行が 0 になります。最初のサブセット化ではエラーが発生しscaleますが、エラーは発生しません。 0 の列を削除したもの。どうしてこれなの?これは PCA にどのように影響しますか?

また、元のデータ(スケーリングされていない)と上記のサブセット化されたデータの両方に対して通常のbiplotコマンドを使用してみましたが、どちらの場合も機能します。だから、それは何かと関係がありggbiplotますか?

[編集 2] すべてのゼロを削除しないとエラーが発生し、削除すると機能するデータのサブセットをアップロードしました。私は以前にgistを使用したことがありませんが、これだと思います。それともこれ...

4

1 に答える 1

11

データを転置した後、エラーを再現することができました。最初のエラーが主な問題です。PCA は各コンポーネントの分散を最大化しようとするため、分散が非常に大きい可能性がある 1 つの変数だけに注目しないことが重要です。最初のエラー:

Error in prcomp.default(tdf, center = T, scale. = T) : 
  cannot rescale a constant/zero column to unit variance

これは、一部の変数の分散がゼロであること (つまり、変動性がないこと) を示しています。PCA が分散を最大化することによって物事をグループ化しようとしている様子を見ると、これらの変数を保持しても意味がありません。次の呼び出しで簡単に削除できます。

df_f <- data[,apply(data, 2, var, na.rm=TRUE) != 0]

このフィルターを実行すると、残りの呼び出しは適切に機能します

pca=prcomp(df_f,center=T,scale.=T)
ggbiplot(pca)
于 2014-12-04T13:34:17.003 に答える