2012-04-07 5 views
2

Ich führe eine Hauptkomponentenanalyse für ein Dataset mit mehr als 1000 Variablen durch. Ich benutze R Studio und wenn ich die Zusammenfassung benutze, um die kumulative Varianz der Komponenten zu sehen, kann ich nur die letzten paar hundert Komponenten sehen. Wie beschränke ich die Zusammenfassung, um nur die ersten 100 Komponenten zu zeigen?R - Limit-Ausgabe von summary.princomp

+0

Können Sie ein kleines reproduzierbares Beispiel nennen? – digEmAll

+0

@digemall Nicht wirklich, der Datensatz ist riesig. Ich laufe nur: prin <- princomp (train [c (2: 1777)]) Zusammenfassung (prin) Wenn ich das mache, zeigt es die Informationen für alle 1776 Hauptkomponenten an. Ich brauche nur die ersten 100 oder so. – user1209675

+0

Ja, natürlich nicht den vollen Code. Ich meinte ein kleines Beispiel, um genau Ihre Schritte zu verstehen. Anyway @joran hat den Punkt;) – digEmAll

Antwort

1

Es ist ziemlich einfach print.summary.princomp zu ändern (können Sie den ursprünglichen Code sehen stats:::print.summary.princomp durch Eingabe), dies zu tun:

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) 

Herausgegeben Um eine grundlegende Überprüfung für einen vernünftigen Wert für n umfassen. Nun, da ich das getan habe, frage ich mich, ob es sich nicht lohnt, R Core als permanente Ergänzung vorzuschlagen; scheint einfach und mag nützlich sein.

+0

Vielen Dank. Genau das, was ich brauchte. Dies macht Datamining-Anwendungen so viel einfacher. – user1209675

+0

@joran: Ja, es ist eine Funktion, die es wert ist, dem R-Core Team IMO zu übergeben. – digEmAll

0

Sie können die Ladungen in Matrixform, Sie könnten die Matrix in eine Variable und dann Teilmenge speichern (a la matrix[,1:100]) es, um die erste/Mitte/letzte n zu sehen. In diesem Beispiel habe ich head() verwendet. Jede Spalte ist eine Hauptkomponente.

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

habe ich versucht, diese und es scheint zu funktionieren: l = Beladungen (prin) l [1: 100]