29

測定/パラメータが計算された主成分の1つにどの程度寄与するかを知りたいです。

実際の説明:

  1. 種の地理的分布に対する5つの気候パラメータがあります
  2. これらの5つのパラメーターを使用してPCAを実行しました
  3. PC1とPC2のプロットは興味深いパターンを示しています

質問:各PCへの(各パラメーターの)貢献度を取得するにはどうすればよいですか?

私が期待すること:PC1は、parameter1の30%、parameter2の50%、parameter3の20%、parameter4の0%、parameter5の0%で構成されています。PC2は構成されています...

5つのダミーパラメータの例:

a <- rnorm(10, 50, 20)
b <- seq(10, 100, 10)
c <- seq(88, 10, -8)
d <- rep(seq(3, 16, 3), 2)
e <- rnorm(10, 61, 27)

my_table <- data.frame(a, b, c, d, e)

pca <- princomp(my_table, cor=T)

biplot(pca) # same: plot(pca$scores[,1], pca$scores[,2])

pca
summary(pca)

私の情報はどこに隠されていますか?

4

1 に答える 1

48

$loadings返されたオブジェクトのコンポーネントが必要です。

R> class(pca$loadings)
[1] "loadings"
R> pca$loadings

Loadings:
  Comp.1 Comp.2 Comp.3 Comp.4 Comp.5
a -0.198  0.713        -0.671       
b  0.600         0.334 -0.170  0.707
c -0.600        -0.334  0.170  0.707
d  0.439        -0.880 -0.180       
e  0.221  0.701         0.678       

               Comp.1 Comp.2 Comp.3 Comp.4 Comp.5
SS loadings       1.0    1.0    1.0    1.0    1.0
Proportion Var    0.2    0.2    0.2    0.2    0.2
Cumulative Var    0.2    0.4    0.6    0.8    1.0

これには、小さな負荷の印刷print()を抑制する特別な方法があることに注意してください。

これを相対的な寄与として求める場合は、列ごとの負荷を合計し、負の負荷を考慮して絶対値を使用するように注意しながら、各負荷を列 (負荷) の合計の割合として表します。

R> load <- with(pca, unclass(loadings))
R> load
      Comp.1       Comp.2      Comp.3     Comp.4        Comp.5
a -0.1980087  0.712680378  0.04606100 -0.6713848  0.000000e+00
b  0.5997346 -0.014945831  0.33353047 -0.1698602  7.071068e-01
c -0.5997346  0.014945831 -0.33353047  0.1698602  7.071068e-01
d  0.4389388  0.009625746 -0.88032515 -0.1796321  5.273559e-16
e  0.2208215  0.701104321 -0.02051507  0.6776944 -1.110223e-16

この最終ステップにより、各主成分への比例寄与が得られます。

R> aload <- abs(load) ## save absolute values
R> sweep(aload, 2, colSums(aload), "/")
      Comp.1      Comp.2     Comp.3     Comp.4       Comp.5
a 0.09624979 0.490386943 0.02853908 0.35933068 0.000000e+00
b 0.29152414 0.010284050 0.20665322 0.09091055 5.000000e-01
c 0.29152414 0.010284050 0.20665322 0.09091055 5.000000e-01
d 0.21336314 0.006623362 0.54544349 0.09614059 3.728970e-16
e 0.10733880 0.482421595 0.01271100 0.36270762 7.850462e-17

R> colSums(sweep(aload, 2, colSums(aload), "/"))
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 
     1      1      1      1      1

優先を使用する場合prcomp()、関連する読み込みは$rotationコンポーネントにあります。

R> pca2 <- prcomp(my_table, scale = TRUE)
R> pca2$rotation
         PC1          PC2         PC3        PC4           PC5
a -0.1980087  0.712680378 -0.04606100 -0.6713848  0.000000e+00
b  0.5997346 -0.014945831 -0.33353047 -0.1698602 -7.071068e-01
c -0.5997346  0.014945831  0.33353047  0.1698602 -7.071068e-01
d  0.4389388  0.009625746  0.88032515 -0.1796321 -3.386180e-15
e  0.2208215  0.701104321  0.02051507  0.6776944  5.551115e-17

そして、関連する呪文は次のとおりです。

R> aload <- abs(pca2$rotation)
R> sweep(aload, 2, colSums(aload), "/")
         PC1         PC2        PC3        PC4          PC5
a 0.09624979 0.490386943 0.02853908 0.35933068 0.000000e+00
b 0.29152414 0.010284050 0.20665322 0.09091055 5.000000e-01
c 0.29152414 0.010284050 0.20665322 0.09091055 5.000000e-01
d 0.21336314 0.006623362 0.54544349 0.09614059 2.394391e-15
e 0.10733880 0.482421595 0.01271100 0.36270762 3.925231e-17
于 2012-10-06T13:45:35.947 に答える