2016-06-25 18 views
0

Datensatz, an dem ich gerade arbeite, sieht aus wie DATA Es gibt 6 verschiedene Länder und r_1..r_13 gibt die Gründe an. Ich möchte PCA auf diesen Datensatz anwenden, um die wesentlichen Gründe für jedes Land zu ermitteln. Die Frage, die ich stellen möchte, ist wie ich PCA für jedes Land ausführen kann, ohne Datei für jedes Land zu lesen, stattdessen möchte ich die gesamte Datei wie oben gezeigt lesen . Auch überprüfen Sie bitte den Code verwende ich für PCA- tunDaten nur einmal lesen und gleiche Funktion für verschiedene Variablen anwenden

pca<-prcomp(numeric,center=T,scale=T) 
    summary(pca) 
    eigen_val<-pca$sdev ^2 
    sum(eigen_val) 
    prop_var<-round(eigen_val/sum(eigen_val),4) 
    round(sum(prop_var[1:13]),4) 
    load<-pca$rotation 

Nach Berechnung Rotationsmatrix werde ich prüfen, welche PCs sind die meisten korreliert mit der Variablen beobachtet und dementsprechend werde ich die Bedeutung der Variablen entscheiden. (Auf der Grundlage von mehr als Nr. von PCs korreliert mit Variable ist mehr die Bedeutung der Variablen) Bitte schlagen Sie vor, ob der Ansatz richtig ist oder nicht! Danke !!

+0

Willkommen bei stackOverflow. Diese Frage enthält wenig Details (Code und Daten). Bitte werfen Sie einen Blick auf diese Tipps zum Erstellen eines [minimalen Beispiels] (http://stackoverflow.com/help/mcve). Davon abgesehen, Gregors Post auf [mit einer Liste von data.frames arbeiten] (http://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data-frames) gibt die R Best Practices mit 'split' und' lapply', um Ihre Frage zu beantworten. – lmo

Antwort

0

Hier ist ein einfacher Ausgangspunkt für eine Lösung, die Sie optimieren können, um die Ergebnisse in Ihrem gewünschten Format zu erhalten. Nehmen wir an, Sie arbeiten mit dem Datensatz iris in R, und Sie möchten pca für jede Species tun, eine Art, wie Sie wollen pca von jedem Land in Ihren Daten zu tun.

library(caret) 
data(iris) 
Iris <- split(iris, iris$Species) 
for(i in 1:length(Iris)){ 
    assign(paste0("pca", i), prcomp(Iris[[i]][which(names(iris)!="Species")], center=T, scale.=T)) 
} 
+0

Danke alott Gaurav !! Können Sie mir bitte vorschlagen, ob meine Vorgehensweise korrekt ist oder nicht? Wie kann ich die Ergebnisse der for-Schleife speichern, anstatt sie auf dem Bildschirm zu drucken, und wie kann ich die obersten 6 und die am weitesten unten stehenden Elemente aus der Rotationsmatrix jedes Landes/jeder Spezies berechnen? – Kavya

+0

Es scheint, als ob Ihre Vorgehensweise in Ordnung ist. Ich habe meinen obigen Code bearbeitet, um 'pca' zu speichern, anstatt ihn zu drucken. Sie können den gleichen Zuweisungsansatz verwenden, um mehr Berechnungen innerhalb der 'for'-Schleife auszuführen und sie in Variablen zu speichern. Um die wichtigsten Elemente der Rotationen zu sehen, können Sie den Befehl 'summary' verwenden. Dieser Link kann mit den Details helfen: http://www.r-bloggers.com/computing-and-visualizing-pca-in-r/ –

+0

Kann jemand vorschlagen, wenn ich an verschiedenen Dateien arbeite, die in einer Liste dann gespeichert werden, wie kann Ich spalte diese Dateien länderweise (Variable weise). – Kavya