Faktoranalyse
=============

Eine vergleichende Abgrenzung der Arten von Faktoranalysen sowie übergreifender Themen zu den verschiedenen Arten der FA findet sich unter 
[fa](../fa/fa.html)


\[ x_1 = l_{11}f_1 + l_{12}f_2 + u_1 \]

\[ s_1^2 = l_{11}^2 + l_{12}^2 + var(u_1) \]

ML Analyse optimiert die Hauptachsen-Faktoranalyse mathematisch auf das optimale Modell.



### Ein paar prinzipielle Bemerkungen

Die FA hat inhaltlich eine andere Zielsetzung als die PCA: 
Auffinden bzw. Erfassen latenter Konstrukte (latent Traits), die nicht direkt beobachtbar sind durch manifeste, messbare und damit beobachtbare Variablen. 
Frage: Reflektieren die erfassten Variablen eine alle gemeinsam beeinflussende Größe.

Alles für die PCA Gesagte behält seine Gültigkeit. Man kann die PCA als einen Spezialfall der FA auffassen.

Der Kernunterschied zur PCA ist, dass Restvarianzen bei den Variablen zugelassen werden (uniquenesses).
Die Gesamtvarianz der Variable wird zerlegt in die gemeinsame Varianz (die auf den zugrunde liegenden Faktor zurückgeht), 
die spezifische Varianz (die spezifisch für dieses Item ist z. B. eine ganz bestimmte Unterkomponente des Konstruktes (z. B. Intelligenz) erfasst) 
und die Messfehlervarianz, die im psychologischen Umfeld normal ist.

Im Vergleich zur FA versucht die PCA grundsätzlich die Gesamtvarianz zu erklären, was im psychologischen Umfeld meist inadäquat ist. 
Daher werden die PCA Lösungen oft auch unstabiler als die FA Lösungen, beispielsweise bei Kreuzvalidierungen.

Eine gefundenen Struktur wird rotiert, um eine möglichst gute Interpretation der Faktoren zu ermöglichen.
Es werden, je nach Rotationstyp, auch Abhängigkeiten zwischen den Faktoren zugelassen.

Gesamt-n ist sehr viel wichtiger, als Daumenregeln zum Verhältnis von Vpn zu Variablenzahl (10 - 15 pro Variable). 
Nach Field (2013, p. 684)[field] sind 300 Vpn ordentlich, 100 Vpn eher mager und 1000 excellent, 
relativ unabhängig von der Anzahl der zu faktorisierenden Variablen. 
Dies zeigt sich in der Stabilität der Faktorstruktur. 
Aber Faktorladungen  und Zahl der Variablen mit diesen Ladungen größer Grenze sind zusätzlicher Einfluss. 
4 oder mehr Ladungsgewichte > 0.6 oder 10 Ladungsgewichte > 0.40 jeweils pro Faktor fürhen bereits bei ca 150 Beobachtungen zu relativ stabilen und damit interpretierbaren Faktoren. 
Auch die Kommunalitäten spielen hier eine Rolle: Alle Kommunalitäten > .6 kann bereits ab ca 150 Vpn zu relativ verlässlichen Ergebnissen führen. 
Kommunalitäten durchgehend > .50 kann mit 100 - 200 Vpn schon relativ stabil werden.

Das Kaiser-Meyer-Olkin schwankt zwischen 0 und 1. 
Empfohlen wird eine Faktorisierung erst bei Werten von über 0.5 (Field, 2013)[field].
Vgl. hierzu auch die Ausführungen zu KMO in fa [Rmd](../fa/fa.Rmd) [html](../fa/fa.html) 

Bartlett's test prüft, ob die vorliegende Korrelationsmatrix sig. verschieden von der Identity-Matrix (alle Nicht-Diagonal-Korrelationen sind null) ist.

Parallalelanalyse als Ansatz für die Festlegung der Faktoranzahl.
Vgl. hierzu auch die Ausführungen zu Parallelanalyse in fa [Rmd](../fa/fa.Rmd) [html](../fa/fa.html)  


#### [Field (2012, p. 755)][field]

Bei orthogonaler Rotation sind die Gewichte der Variablen in den jeweiligen Faktor (coefficients) gleich der Korrelation dieser Variablen mit dem Faktor.
Bei obliquer Rotation finden sich die Korrelationen der Variablen mit dem Faktor in der Strukturmatrix (structure matrix), während sich die Ladungsgewichte in der Ladungsmatrix (pattern matrix) finden.

Faktorwerte (factor scores) sind individuelle Ausprägungen der Faktoren für eine Beobachtung (Person). 
Bei Verwendung der (ungewichteten) b-Gewichte (Matrix A) sind die Werte skalenabhängig und die Korrelation zwischen den Messwerten wird nicht berücksichtigt. 
Gewichtete Ladungskoeffizienten können auf verschiedene Arten gebildet werden. Teilt man Matrix A durch die Korrelationsmatrix (R): \(B = A * R^{-1} \), erhält man die bereinigten Ladungskoeffizienten{}? (unique relationship). (Ungewichtete und Gewichtete Faktorwerte).

Faktorwerte können benutzt werden, um Unterschiede zwischen Personen sparsamer zu beschreiben, als mit den Originalvariablen.
Faktorwerte können bei Kollinearitätsproblemen ein Lösungsansatz sein (PCA).

 
#### Orthogonale Rotation

Die Faktoren bleiben unabhängig (orthogonal). Faktoren müssen 'real' auch unkorreliert sein.

Varimax-Rotation Varianz der quadrierten Faktorladungen pro Faktor (innerhalb) wird maximiert wird. 
Man möchte pro Faktor möglichst viele betraglich hohe oder um Null liegende Ladungen erhalten. 
Faktor besser interpretierbar als das Gemeinsame der hoch auf ihm ladenden Variablen.

Quatrimax-Rotation Pro Variable sollen über die Faktoren hinweg möglichst viele hohe oder Null-Ladungen auftreten, um die Variablen klarer den Faktoren zuordnen zu können (zwischen). 
Klare Zuordnung von Variablen zu Faktoren möglich. 
Führt häufig dazu, dass eine Variable in einen einzigen Faktor hoch lädt.

Equamax ist ein Hybrid aus beiden und wird teils nicht empfohlen (Field, 2013).

 
#### Oblique Rotation

In SPSS wie auch in Statistica: direct oblimin und promax.

Promax ist eine sog. Target-Rotationsmethode, d. h. es kann ein gewünschtes Kriteriums-Ladungsmuster vorge- geben werden. Wird kein bestimmtes Muster vorgegeben, rotiert Promax so, daß möglichst klar voneinander getrennte Item-Gruppen entstehen (ähnlich Varimax, aber eben mit potenziell korrelierten Faktoren).

Direct Oblimin versucht, die Kovarianzen zwischen den quadrierten Faktorladungen aller Paare von Faktoren zu minimieren.

#### Rotation in R

In R: Aus der Hilfe zu `psych::fa()` 
"none", "varimax", "quartimax", "bentlerT", "geominT" and "bifactor" are orthogonal rotations. 
"promax", "oblimin", "simplimax", "bentlerQ, "geominQ" and "biquartimin" and "cluster" are possible rotations or transformations of the solution. 
The default is to do a oblimin transformation, although versions prior to 2009 defaulted to varimax.

R hat auch eigene Packages zur Faktorrotation, z. B. `library(GPArotation)`.


#### Faktorladungen

Koeffizienten für jede Variable, die ausdrücken, welchen Einfluss die Variable auf die Bildung des Faktors hat.
In PCA wenn von der Korrelationsmatrix aus gerechnet wurde: Korrelation der Variablen mit den Faktorwerten (Werte der Personen in diesem Faktor).
Auch berechenbar über die Multiplikation der Loadings (Eigenvektor) mit der Standardabweichung des jeweiligen Faktors.

#### Faktorwerte

Werte der Vpn in dem jeweiligen Faktor.
In R ergebnisobjekt$scores.
In Statistica Faktorwerte genannt.


#### Eigenwerte der Hauptkomponenten

Eigenwert ist die Summe der quadrierten Ladungen eines Faktors (Faktorladungen) über alle Variablen.
Eigenwert ist die Varianz dieses Faktors.
Da die Gesamtvarianz der Variablen auf 1 gesetzt wird ist der Eigenwert zugleich der Anteil, den der Faktor an der Gesamtvarianz der beobachteten Variablen erklärt.
Die Eigenwerte sind die quadrierten Standardabweichungen der Hauptkomponenten, die R im Summary zur PCA ausgibt (ergebnisobjekt$sdev).
In der PCA ist die Gesamtsumme der Eigenwerte = der Menge der Hauptkomponenten. Der Mittelwert der Eigenwerte ist also 1.


#### Eigenvektor - Loadings

Statistica-Ergebnisdialog: Variablen | Eigenvektor entspricht R-Loadings ergebnisobjekt$loadings
Die Summe der quadrierten Loadings über alle Variablen hinweg ergibt 1.
Mit Hilfe der Eigenvektoren können die vorhergesagten Werte (Faktorwerte) errechnet werden.


#### Kommunalität

Parameter der Variablen. Die Summe der quadrierten Ladungen einer Variablen auf allen Faktoren ergibt die Varianz dieser Variablen, die durch die Faktoren gemeinsam erklärt wird. Diese Größe wird als Kommunalität h^2j einer Variablen j bezeichnet.


#### Einfachstruktur

Ziel der Rotation. Für alle Variablen soll erreicht werden, dass sie möglichst nur in einen Faktor hoch laden und in alle anderen Faktoren sehr niedrig. Hierdurch soll eine möglichst gute (einfache) Interpretation bzw. Benennung der Faktoren ermöglicht werden.


#### Reduzierte Korrelationsmatrix als Ausgangsmatrix bei FA

In die Diagonale kommen nicht, wie bei PCA, 1-en sondern Schätzer für die Kommunalitäten. 
Üblich sind die SMC (squared multiple correlations).
Idee hier: Ein Item wird via MR aus allen verbleibenden Items vorhergesagt. 
R^2 ist der SMC-Wert für dieses Item. 

Hier demonstriert am Beispiel der werner-fa, generierte Werte von 15 Items und für 100 Beobachtungen (vgl. Beispiel weiter unten).

```{r}
items <- read.delim(file="http://r.psych.bio.uni-goettingen.de/mv/data/div/werner-fa.txt")
head(round(items, 2))
# take a look at correlation table
head(round(cor(items), 2))
# insert SMC
items.cors.reduced <- cor(items)
# put smc into the diagonal
require(psych)
diag(items.cors.reduced) <- smc(items)
# take a look at the resulting table
head(round(items.cors.reduced, 2))
```


#### Chi^2 Test ob die Anzahl der Faktoren ausreicht

vgl. fa [Rmd](../fa/fa.Rmd) [html](../fa/fa.html)


#### Faktoranalyse in R

Base Package: factanal() 

Für Datenmatrix dd, zwei zu extrahierende Faktoren und Maximum-Likelyhood-Extraktion: 
`factanal(dd,factors=2,method="mle")`

Besser, mächtiger und flexibler und hier durchgängig verwendet: Das Package psych `library(psych)` und hier die Funktion `fa()`

Hier eine kurze Darstellung der wichtigsten Parameter

```{}
require(psych)
fa(
  data,  	# Datenmatrix (oder Korrelationstabelle, die aber auch automatisch generiert wird)
  nfactors=3,	# Anzahl der Faktoren
  fm="ml",	# Extraktionsverfahren (factoring method) ml (maximum likelyhood), 
		# fm="minres" will do a minimum residual (OLS), 
		# fm="wls" will do a weighted least squares (WLS) solution, 
		# fm="gls" does a generalized weighted least squares (GLS), 
		# fm="pa" will do the principal factor solution, 
		# fm="ml" will do a maximum likelihood factor analysis
  rotate="varimax",
		# "none", "varimax", "quartimax", "bentlerT", and "geominT" are orthogonal rotations. 
		# "promax", "oblimin", "simplimax", "bentlerQ, and "geominQ" or "cluster" are possible rotations or transformations of the solution. 
		# The default is to do a oblimin transformation, although prior versions defaulted to varimax.
  SMC=TRUE	# SMC	 Use squared multiple correlations (SMC=TRUE) or use 1 as initial communality estimate. 
		# Try using 1 if imaginary eigen values are reported.
  max.iter=100	# Iterationsstufen
  scores=TRUE	# Factorscores mit berechnen. Default ist scores=FALSE
  )
```





# Beipiel: Wahrnehmung eigener und fremder Gefühle (Emotionale Intelligenzforschung)

Das Beispiel lehnt sich an eine Studie von Tanja Lischetzke et al (2001, Diagnostica Vol 47, No. 4, S. 167 - 177):

Aus dem Abstract: "Das Erkennen der eigenen Gefühle und der Gefühle anderer Menschen ist eine wichtige Kompetenz im Umgang mit Emotionen und Stimmungen. Es werden die bisher vor allem im englischen Sprachraum untersuchten Konstrukte der emotionalen Selbstaufmerksamkeit und der Klarheit über eigene Gefühle vorgestellt und die konzeptuelle Trennung der Konstrukte erstmals auf die Wahrnehmung fremder Gefühle übertragen."

Die Ausführungen hier beziehen sich allerdings nur auf den Teil der Wahrnehmung eigener Gefühle.

Ein erfundener Datensatz findet sich im üblichen tab-delimited Textformat unter: 
[fa-ei.txt](http://r.psych.bio.uni-goettingen.de/mv/data/virt/v_ei.txt)

Die Fragen/Items sind:

- i1	Ich denke über meine Gefühle nach.
- i2	Ich kann meine Gefühle benennen.
- i3 	Ich schenke meinen Gefühlen Aufmerksamkeit.
- i4	Ich bin mir im unklaren darüber, was ich fühle.
- i5	Ich beschäftige mich mit meinen Gefühlen.
- i6	Ich habe Schwierigkeiten, meine Gefühle zu beschreiben.
- i7	Ich denke darüber nach, wie ich mich fühle.
- i8	Ich weiß, was ich fühle.
- i9	Ich beobachte meine Gefühle.
- i10	Ich habe Schwierigkeiten, meinen Gefühlen einen Namen zu geben.
- i11	Ich ache darauf, wie ich mich fühle.
- i12	Ich bin mir unsicher, was ich eigentlich fühle.

Die Items sind skaliert von 1 bis 4 (fast nie/manchmal/oft/fast immer)

Die beiden latenten Konstrukte (latent Traits) um die es hier geht, sind:

- emotionalen Selbstaufmerksamkeit eSA
- Klarheit über eigene Gefühle eC

Auswertung

```{r}
# get data
ddf <- read.delim("http://r.psych.bio.uni-goettingen.de/mv/data/virt/v_ei.txt")
# take a look at the data
head(ddf)
# we need library(psych)
require(psych)

# some descriptives
psych::describe(ddf)

# correlation matrix is base of EFA and with this the solution the reproduced correlation matrix will be compared
# covariance matrix, wrap with round() for better reading
round(var(ddf), 2)
# correlation matrix, wrap with round() for better reading
round(cor(ddf), 2)

# Ask Bartlett test whether correlation matrix is idendity matrix (all elements are 0), should be significant
cortest.bartlett(ddf)
# alternativly on correlation matrix (add n) 
cortest.bartlett(ddf, n=nrow(ddf))

# get kmo: are data good for factorization
psych::KMO(ddf)

# determinant ('area' of data) should be higher than 0.00001, singularity might wait ...
det(cor(ddf))


# number of factors suggested by fa.parallel() is 2
items.parallel <- fa.parallel(ddf, fa="fa")

# we go on with 2 factors
# we start with an unrotated solution using ML (maximum likelihood). SMC is inserted as estimates for communality.
m.ml.u <- fa(ddf, 
	nfactors=2,
	n.obs = nrow(ddf),
  SMC=TRUE,
  fm="ml",
  rotate="none",
  max.iter=100
  )

# get the quality
print(m.ml.u)

# take a closer look at factor loadings, which gives us the structure
print(m.ml.u$loadings)
# we might see the structure clearer by suppressing the output of low loadings by modifying cutoff, default is .1
print(m.ml.u$loadings, cutoff=.4)
 
# at least item i7 seems to stay unclear
# maybe rotation helps
# we do the same model with orthogonal rotation varimax
m.ml.r <- fa(ddf, 
	nfactors=2,
	n.obs = nrow(ddf),
  SMC=TRUE,
  fm="ml",
  rotate="varimax",
  max.iter=100
  )
print(m.ml.r)
# we might see the structure clearer by suppressing the output of low loadings by modifying cutoff, default is .1
print(m.ml.r$loadings, cutoff=.2)

# take a look at the factor scores of the first few observations
head(round(m.ml.r$scores, 2))

# we might want to continue using the factor scores and therefore add them to dataframe with verbose name
colnames(m.ml.r$scores) <-  c('e.unclear.r', 'e.attention')
ddf <- cbind(ddf, m.ml.r$scores)

# descriptives of factor scores might be of interest
psych::describe(m.ml.r$scores)

# we might be interested in the person with lowest emotionional clearness
ddf[m.ml.r$scores[,1] == min(m.ml.r$scores[,1]),]
# its subject 10 who has extreme answers in almost all questions

# finally we might want to visualize the model
# we can use the usual plot() method
plot(m.ml.r)
# or the fa.diagram() of library(psych), parameter cut is equivalent to looking at scores, parameter simple suppresses inclusion of cross-loadings
fa.diagram(m.ml.r, simple=TRUE, cut=.2, digits=2)

```

Alle Indices zeigen die prinzipielle Eignung des Datensatzes für eine Faktorisierung.
- Der Bartlett-Test ob die Korrelationsmatrix von einer Idenditätsmatrix verschieden ist, wird signifikant.
- Der globale KMO-Wert für die Eignung der Daten zur Faktorisierung (overall MSA) liegt mit .81 'im guten Bereich'.
- Jeder einzelne MSA-Wert der Variablen liegt über .5, ein Großteil ebenfalls im 'guten Bereich'.
- Auch die Determinante zeigt keinerlei Hinweis auf Singularität.

Die Parallelanalyse schlägt eine Lösung mit 2 Faktoren als optimal vor.
Das deckt sich mit den konzeptionellen Überlegungen, die in die Itemformulierungen eingegangen sind.

Eine explorative Maximum Likelihood Faktorisierung mit 2 Faktoren kann insgesamt 41% der Varianz aufklären.
Der erste Faktor bindet 26%, der zweite nochmals 15% der Originalvarianz.

Die unrotierte EFA mit 2 Faktoren als Vorgabe zeigt vor allem für Item i7 keine klare Zuordnung.
Nach Rotation werden alle Ladungskoeffizienten höher im Vergleich zur unrotierten Lösung.
Allerdings bleibt der Ladungskoeffizient für Item i7 vergleichsweise niedrig.
Trotzdem passt er tendenziell zur inhaltlichen Vorgabe.

Somit zeigt sich eine klare Faktorstruktur in der rotierten Faktorladungs-Matrix. 
Jedes zweite Item gehört zu je einem Faktor. 
Inhaltlich können die Items klar den beiden intendierten Dimensionen 
eSA (emotional Self Attention, Emotionale Selbstaufmerksamkeit) und 
eC (emotional Clearness, Klarheit über eigene Gefühle) zugeordnet werden. 
Auch die Vorzeichen stimmen mit der Item-Formulierung überein.

Zum `com` Feld in der Ausgabe bei `Pattern Matrix`: 

Laut dem Autor des Pakets William Revelle :  The 'com' column is factor complexity using the index developed by Hofmann (1978).  It is a row wise measure of item. complexity. 

bzw. aus der Hilfe: 

complexity  
Hoffman's index of complexity for each item. This is just \[ \frac{(Σ a_i^2)^2}{Σ a_i^4}  \] where a_i is the factor loading on the ith factor. From Hofmann (1978), MBR. See also Pettersson and Turkheimer (2010).

und aus dem Hofman Artikel:

The complexity index is a positive number indicating on the average how many factors are used to explain each variable in a factor solution.

#### oblique Rotation


```{r}
ddf <- read.delim("http://r.psych.bio.uni-goettingen.de/mv/data/virt/v_ei.txt")
require(psych)

# fit orthogonal and oblique model
m.ml.orth <- fa(ddf, 
	nfactors=2,
	n.obs = nrow(ddf),
  SMC=TRUE,
  fm="ml",
  rotate="varimax",
  max.iter=100
  )
m.ml.obl <- fa(ddf, 
	nfactors=2,
	n.obs = nrow(ddf),
  SMC=TRUE,
  fm="ml",
  rotate="oblimin",
  max.iter=100
  )

# get the quality
print(m.ml.orth)
print(m.ml.obl)

# we might see the structure clearer by suppressing the output of low loadings by modifying cutoff, default is .1
print(m.ml.orth$loadings, cutoff=.2)
print(m.ml.obl$loadings, cutoff=.2)


```

Die Auswirkungen auf die Ladungsmatrix bei orthogonaler bzw. obliquer Rotation, also deren Unterschiede, sind marginal. 



Die Behandlung der EI Daten als Basis einer PCA findet sich unter PCA 
[Rmd](../pca/pca.Rmd) [html](../pca/pca.html)

Die Behandlung der EI Daten als Basis einer CFA findet sich unter CFA.
[Rmd](../cfa/cfa.Rmd) [html](../cfa/cfa.html)







### Beispiel Werner 

[Quelle](http://user.uni-frankfurt.de/~cswerner/multivariate/)

Generierte Werte von 15 Items und für 100 Beobachtungen sollen faktorisiert werden.

```{r}
# we need library(psych)
require("psych")
items <- read.delim(file="http://r.psych.bio.uni-goettingen.de/mv/data/div/werner-fa.txt")
# take a look at the data
head(round(items, 2))
# descriptives of the items to factorize
#summary(items)
psych::describe(items)

# look at the scatterplots for potential problems in raw data
pairs.panels(items, pch=".")
pairs.panels(items[ , 1:5], pch=".")
pairs.panels(items[ , 6:10], pch=".")
pairs.panels(items[ , 11:15], pch=".")

# number of factors to extract: via scree plot
# library(psych) offers VSS.scree()
VSS.scree(items)

# Um einen Vergleich von FA und PCA in einem Plot zu haben
# als Hilfe für die Anzahl der zu extrahierenden Faktoren
# let us see what is recommended by fa.parallel()
items.parallel <- fa.parallel(items, fa="fa") 

# es werden 3 Faktoren vorgeschlagen, mit denen rechnen wir weiter

# Korrelationsmatrix und reduzierte Korrelationsmatrix

# Startmatrix für die PCA
cor(items)

# reduzierte Korrelationsmatrix für PF (principle factors)
# Das psych-Paket stellt mit der smc() Funktion eine Möglichkeit zur Verfügung
# die quadrierten multiplen Korrelationen der Variable mit den Restvariablen zu erhalten
# diese kommen bei der reduzierten Korrelationsmatrix in die Diagonale
# als Schätzwerte für die Kommunalitäten

items.cors.reduced <- cor(items)
diag(items.cors.reduced) <- smc(items)



# Nun eine FA mit 3 Faktoren, Multiplen Korrelationen als Kommunalitäten-Schätzer, 
# Hauptachsen-FA, Iterationsschritte auf 100 erhöht
# Promax-Rotation lässt Korrelationen zwischen den zu findenden Faktoren zu.

items.pa.promax <- fa(items,
                      nfactors=3,
                      SMC=TRUE,
                      fm="pa",
                      rotate="promax",
                      max.iter=100
                      )

# Was ergibt sich?
print(items.pa.promax) 

print(items.pa.promax)

# zunächst sieht man die Faktorladungen
# die Kommunalitäten (h^2) der Variablen in einer eigenen Spalte
# sowie die u^2, also der durch die Gesamtheit der Faktoren nicht erklärte Varianzanteil

# darunter folgen Angaben über die von den Faktoren über alle Variablen zusammen erklärte Varianz, 
# d. h. die Eigenwerte nach der Rotation (SS loadings; sum of squared loadings). 
# Außer den Absolutwerten sind auch die Varianzanteile (Proportion Var) 
# und kumulativen Varianzanteile (Cumulative Var) aufgeführt. 
# Hier werden also insgesamt 31% der Varianz aller Variablen durch die drei Faktoren zusammen erklärt
# Da hier bereits die Rotation erfolgt ist, sind die Eigenwerte nicht nach Größe geordnet 
# und entsprechen auch nicht den initialen Eigenwerten

# sollten die initialen Eigenwerte interessieren, die ja Basis des Scree-Plots sind, 
# kann man die erhalten durch

print(items.pa.promax$values)

# da oblique rotiert wurde folgt die Interkorrelationsmatrix der Faktoren (hier 3) 
# Die Faktoren sind also untereinander deutlich korreliert

# Schließlich erfolgt ein χ2 -Test auf Abweichung zwischen Modell und Daten
# bei (noch) signifikantem Unterschied klären die Faktoren noch nicht genug Varianz auf
# und man kann z.B. noch einen Faktor hinzunehmen.
# (hier ist das nicht mehr nötig)


# Zusammenfassung promax-Lösung:

# Die promax-Lösung liefert eine klare, gut interpretierbare Struktur.
# Zur Erleichterung der Interpretation 
# kann man sich die Faktorladungen ab einer bestimmten Minimalhöhe ausgeben lassen
# z. B. alle Ladungen > 0.2
print(items.pa.promax$loadings, cutoff=.2)

# hier zeigen sich relativ wenige Kreuzladungen (Ladungen derselbem Variable in verschiedene Faktoren.



# Wie liegt der Fall mit einer orthogonalen Rotation 'varimax'.

items.pa.varimax <- fa(items,
                       nfactors=3,
                       SMC=TRUE,
                       fm="pa",
                       rotate="varimax",
                       max.iter=100
                       )

print(items.pa.varimax)



# Ein Vergleich der beiden Lösungen mit einem Cut-Off-Wert von 0.1

print(items.pa.promax$loadings, cutoff=.1)
print(items.pa.varimax$loadings, cutoff=.1)

# bei cutoff +/- .10 gibt es 13 Kreuzladungen bei promax Rotation (oblique)
# und 19 Ladungen bei varimax-Rotation


# Vielleicht ein wenig klarer mit einem Cut-Off-Wert von 0.2 wie oben
print(items.pa.promax$loadings, cutoff=.2)
print(items.pa.varimax$loadings, cutoff=.2)

# jetzt liefert die promax-Rotation 2 Kreuzladungen und
# die varimax-Rotation 7

# in der promax-Lösung zeigen nur 3 Variablen Kreuzladungen,
# in der varimax-Lösung aber 8

# insgesamt zeigt die Lösung mit promax-Rotation die deutlich einfachere und klarere Struktur

# Als Möglichkeit einer grafischen Visualisierung der Struktur 
# bietet das psych-Paket die Funktion fa.diagram()
# simple=T ohne cross-loadings 

fa.diagram(items.pa.promax, simple=TRUE, cut=.2, digits=2)

# oder simple=F mit cross-loadings

fa.diagram(items.pa.promax, simple=FALSE, cut=.2, digits=2)

# Beispielhaft (Zur besseren Vergleichbarkeit mit anderen Paketen) eine FA in R: eine Hauptachsenanalyse mit varimax-Rotation.

items.pa.varimax <- fa(items,
                      nfactors=3,	# extract three factors 
                      SMC=TRUE,		# squared multiple correlations as estimates of communalities
                      fm="pa",		# Principal axes
                      rotate="varimax",	# Varimax rotation (orthogonal)
                      max.iter=100
                      )

# und die Ergebnisse inspizieren
print(items.pa.promax)

## Ein weiterer Vergleich - diesmal eher zur Unterschiedlichkeit der Pakete Maximum-Likelihood FA mit denselben Item-Daten

items.ml.varimax <- fa(items,
                      nfactors=3,	# extract three factors 
                      SMC=TRUE,		# squared multiple correlations as estimates of communalities
                      fm="ml",		# maximum likelihood
                      rotate="varimax",	# Varimax rotation (orthogonal)
                      max.iter=100
                      )

# und die Ergebnisse inspizieren
print(items.ml.varimax)
```


### Ein weiterer Vergleich - diesmal eher zur Unterschiedlichkeit der Pakete Maximum-Likelihood FA mit den crime-Daten aus Everitt (2010)

```{r}
# Daten lesen
d.crime <-  read.delim(file="http://r.psych.bio.uni-goettingen.de/mv/data/be/pca_crime.txt")

crime.ml.varimax <- fa(d.crime[2:8],
                      nfactors=3,	# extract three factors 
                      SMC=TRUE,		# squared multiple correlations as estimates of communalities
                      fm="ml",		# maximum likelihood
                      rotate="varimax",	# Varimax rotation (orthogonal)
                      max.iter=100
                      )

# und die Ergebnisse inspizieren
print(crime.ml.varimax)
```





Übungen / Exercises
===================

Vollziehen Sie die Beispiele der beiden empfohlenen Lehrbücher nach.

Vollziehen Sie die Übungsaufgaben mit Lösungen der beiden empfohlenen Lehrbücher nach.

#### Studierenden STAI Daten

[http://r.psych.bio.uni-goettingen.de/mv/data/div/stud_stai_items_utf8.txt]

Überprüfen Sie das Konzept von State- und Trait-Angst.


Links und Referenzen
====================

lme4 Dokumentation
[http://cran.r-project.org/web/packages/lme4/lme4.pdf]

R-Bloggers Tutorial John Quick
[http://www.r-bloggers.com/r-tutorial-series-exploratory-factor-analysis/]

Tutorial Wollschläger:
[http://www.uni-kiel.de/psychologie/rexrepos/posts/multFA.html]


[Field (2012, p. 112)][field] **Kapitel 3: R Environment**

<!-- this does not appear in html-page. It's used only to arm links and references. -->
[field]: http://www.uk.sagepub.com/dsur/main.htm "Field et al (2012). Discovering Statistics using R"

