1

データのPCA分析を行っています。そして、このタイプの分析を試すのは初めてです。私は数千の列と数千の行の行列を持っており、相関変数(私の場合は列)を取り除くことによって、より小さな行列を作成しようとしています。今まですべてが順調に進んでいますが、次のステップを実行できません。これが私のデータを表示する例です。

         a1    a2    a3    a4    ....    a1000
item1    10    NA     5     3    ....
item2    0.01  0.5    NA   0.07  ....
item3    0.7   0.2    0.8  0.9   ....
                   .
                   .
                   .

princompを適用すると、次の結果が得られます

                         Comp.1     Comp.2     Comp.3     Comp.4     ...   Comp.1000
Standard deviation     24.1605431 7.31176669 5.96709553 3.56507807   ...
Proportion of Variance  0.7580933 0.06943108 0.04624186 0.01650621   ...
Cumulative Proportion   0.7580933 0.82752438 0.87376624 0.89027245   ...
                                       .
                                       .
                                       .

すべてを計算したので...私の質問は、相関のないコンポーネントを選択して新しいマトリックスに貼り付ける(または単に相関のあるコンポーネントを削除する)ためにどのコマンドを使用する必要があるかということです。必要な相関の範囲を指定するにはどうすればよいですか?

ありがとう、

4

1 に答える 1

4

私はあなたが後だと信じていますscores。のヘルプから?princomp、結果のオブジェクトは要素を含むリストになりますscores

スコア

スコア=TRUEの場合、主成分に関する提供されたデータのスコア。xが指定された場合、および共分散リストの場合はcovmatも指定された場合にのみ、これらはnullではありません。数式メソッドの場合、na.actionによって省略された値の処理を処理するためにnapredict()が適用されます。

例を設定しましょう(の例に基づいて?princomp):

summary(pc.cr <- princomp(USArrests, cor = TRUE))
Importance of components:
                          Comp.1    Comp.2    Comp.3     Comp.4
Standard deviation     1.5748783 0.9948694 0.5971291 0.41644938
Proportion of Variance 0.6200604 0.2474413 0.0891408 0.04335752
Cumulative Proportion  0.6200604 0.8675017 0.9566425 1.00000000

結果オブジェクトは次のように調べることができますstr()

str(pc.cr)
List of 7
 $ sdev    : Named num [1:4] 1.575 0.995 0.597 0.416
  ..- attr(*, "names")= chr [1:4] "Comp.1" "Comp.2" "Comp.3" "Comp.4"
 $ loadings: loadings [1:4, 1:4] -0.536 -0.583 -0.278 -0.543 0.418 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:4] "Murder" "Assault" "UrbanPop" "Rape"
  .. ..$ : chr [1:4] "Comp.1" "Comp.2" "Comp.3" "Comp.4"
 $ center  : Named num [1:4] 7.79 170.76 65.54 21.23
  ..- attr(*, "names")= chr [1:4] "Murder" "Assault" "UrbanPop" "Rape"
 $ scale   : Named num [1:4] 4.31 82.5 14.33 9.27
  ..- attr(*, "names")= chr [1:4] "Murder" "Assault" "UrbanPop" "Rape"
 $ n.obs   : int 50
 $ scores  : num [1:50, 1:4] -0.986 -1.95 -1.763 0.141 -2.524 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:50] "Alabama" "Alaska" "Arizona" "Arkansas" ...
  .. ..$ : chr [1:4] "Comp.1" "Comp.2" "Comp.3" "Comp.4"
 $ call    : language princomp(x = USArrests, cor = TRUE)
 - attr(*, "class")= chr "princomp"

次に、スコアを抽出します。

head(pc.cr$scores)
               Comp.1     Comp.2      Comp.3       Comp.4
Alabama    -0.9855659  1.1333924 -0.44426879  0.156267145
Alaska     -1.9501378  1.0732133  2.04000333 -0.438583440
Arizona    -1.7631635 -0.7459568  0.05478082 -0.834652924
Arkansas    0.1414203  1.1197968  0.11457369 -0.182810896
California -2.5239801 -1.5429340  0.59855680 -0.341996478
Colorado   -1.5145629 -0.9875551  1.09500699  0.001464887
于 2012-12-12T10:51:21.183 に答える