Ich arbeite gerade für ein Forschungsprojekt an einem öffentlichen Forschungsinstitut an einer Syntax, die für einen gegebenen Datensatz sämtliche Arten an Faktorenanalysen automatisiert durchführt. Bis dahin klappt auch alles, weil es nicht so komplex ist und es sich nur um eine Schleife handelt, die dem fa()-Befehl in jedem Schleifendurchlauf andere Parameter übergibt. Ich würde aber gerne den Output, genau genommen die Matrix mit den rotierten Faktorladungen, in einem PDF-Dokument speichern, um später bequem die Ergebnisse durchzusehen und ggf. an Kolleginnen und Kollegen weiterzureichen.
Genau das gleiche habe ich schon mit anderen Berechnungen hinbekommen. Z.b. konnte ich erfolgreich mittels einer Schleife, dem pdf()-Befehl und dev.off() die Histogramme von hunderten von Merkmalen automatisiert mittels einer Schleife in ein PDF speichern. Was die Faktorenanalyse angeht (Output ist ja ein Text, kein Bild) hat das aber nicht geklappt. Im Netz habe ich nur eine Anleitung gefunden, wie ich das Log in eine txt-Datei speichern kann, was schon mal gut ist, aber noch nicht genau das, was ich mr vorstelle, weil ich diese Logfiles nochmal deutlich überarbeiten muss, damit wirklich nur das wichtigste drin steht.
Hier ein reproduzierbarer Code:
Beispieldaten und Pakete laden:
Code: Alles auswählen
# Pakete
library(psy)
library(psych)
library(GPArotation)
# Daten
data(bfi)
bfi <- bfi[, 1: 25]
bfi <- bfi[complete.cases(bfi),]
Hier ein paar Variablen zur Konfiguration der Faktorenanalyse
Code: Alles auswählen
# config
fac_n <- 5
cutoff_lvl <- 0.3
digits_lvl <- 2
Das sind die verschiedenen Rotationsmethoden, von denen fa() in jedem Schleifendurchlauf eine andere erhält.
Code: Alles auswählen
r_methods = c("none", "varimax", "quartimax", "bentlerT", "equamax", "varimin", "geominT", "bifactor", "promax", "oblimin", "bentlerQ", "geominQ", "biquartimin")
Code: Alles auswählen
for(method in r_methods){
print(method)
analysis <- factanal(bfi, fac_n, rotation=method)
print(analysis$loadings,
cutoff = cutoff_lvl,
digits = digits_lvl)
Sys.sleep(1) # optional
}
Und das hier ist die Schleife, mit der ich das ganze in einPDF-File ausgeben lassen wollte. Es werden tatsächlich PDF-Dateien erstellt, aber die sind Müll.
Code: Alles auswählen
############################################################
# PDF-Methode
############################################################
subdir <- "/Results" # Unterordner für die Ergebnisse
dir.create( paste0(getwd(), subdir) , showWarnings = FALSE) # Ordner erstellen
oldwd <- getwd() # Alte Workingdirectory speichern
setwd(paste0(getwd(), subdir)) # neue workingdirectory in den Unterordner Results
for(method in r_methods){
pdf(paste0(method, "_loadings.pdf"), paper="a4") # create pdf
plot.new() # create plot even if it is no plot
analyse <- factanal(bfi, fac_n, rotation=method) # calculate factoranalysis
ladungen <- print(analyse$loadings,
cutoff = cutoff_lvl,
digits = digits_lvl)
text(x=0, labels = ladungen) # print object
dev.off() # close pdf
}
setwd(oldwd) # alte wd wiederherstellen
Ich nehme an, dass das Problem am text() Befehl liegt und ich ihn falsch spezifiziere oder dass er gänzlich ungeeignet ist und ich einen anderen Befehl benötige. Hat jemand Ideen?
Vielen Dank im voraus!