2012-04-07 13 views
2

私は1000を超える変数を持つデータセットについて主成分分析を行っています。私はR Studioを使用しています。コンポーネントの累積分散を見るためにサマリを実行すると、最後の数百のコンポーネントしか見ることができません。最初の100のコンポーネントだけを表示するように要約を制限するにはどうすればよいですか?R - summary.princompの出力を制限する

+0

あなたは小さな再現可能な例を提供することはできますか? – digEmAll

+0

@digemall実際には、データセットは膨大です。私はちょうど実行しています:prin < - princomp(train [c(2:1777)])概要(prin)これを行うと、1776すべての主要コンポーネントの情報が表示されます。私は最初の100程度しか必要ない。 – user1209675

+0

もちろん、完全なコードではありません。私はあなたのステップを正確に理解するためのリットルの例を意味しました。とにかく@ジョランはポイントを得た;) – digEmAll

答えて

1

これは、これを行うために(あなたがstats:::print.summary.princompを入力して、元のコードを見ることができる)print.summary.princompを変更することは非常に簡単です:nのための賢明な値のための基本的なチェックを含めるように編集

pcaPrint <- function (x, digits = 3, loadings = x$print.loadings, cutoff = x$cutoff,n, ...) 
{ 
    #Check for sensible value of n; default to full output 
    if (missing(n) || n > length(x$sdev) || n < 1){n <- length(x$sdev)} 
    vars <- x$sdev^2 
    vars <- vars/sum(vars) 
    cat("Importance of components:\n") 
    print(rbind(`Standard deviation` = x$sdev[1:n], `Proportion of Variance` = vars[1:n], 
     `Cumulative Proportion` = cumsum(vars)[1:n])) 
    if (loadings) { 
     cat("\nLoadings:\n") 
     cx <- format(round(x$loadings, digits = digits)) 
     cx[abs(x$loadings) < cutoff] <- paste(rep(" ", nchar(cx[1, 
      1], type = "w")), collapse = "") 
     print(cx[,1:n], quote = FALSE, ...) 
    } 
    invisible(x) 
} 

pcaPrint(summary(princomp(USArrests, cor=TRUE), 
       loadings = TRUE, cutoff = 0.2), digits = 2,n = 2) 

を。これをやったので、恒久的な追加としてR Coreに示唆する価値がないのだろうかと思います。シンプルに思え、好きかもしれません。

+0

ありがとうございます。正確に私が必要としたもの。これにより、データマイニングアプリケーションが非常に簡単になります。 – user1209675

+0

@joran:はい、それはRコアチームのIMOに提出する価値がある機能です。 – digEmAll

0

ローディングを行列形式で保存することができます。行列を変数に保存してから、最初の/中/最後のnを表示するためにサブセット(a la matrix[,1:100])を使用できます。この例では、head()を使用しました。各列は主成分です。

head(
    matrix(
    prin$loadings, 
     ncol=length(dimnames(prin$loadings)[[2]]), 
     nrow=length(dimnames(prin$loadings)[[1]]) 
), 
100) 
2

私はこれを試してみましたが、それが動作しているようだ: リットル=負荷(PRIN) L [1:100]

関連する問題