library(psych)library(tidyverse)library(EFAtools)library(psychTools)library(GPArotation)library(psychometric)library(ctv)library(mnormt)library(haven)library(gt)library(DT)library(knitr)library(corrplot)library(paran)library(parameters) WSI <-read_sav("~/Library/CloudStorage/OneDrive-Lycéesetcentresprofessionnelsneuchâtelois/10 - Studium/1 - FHNW/Statistik 1/Faktoren Analyse/WSI.sav")# Die ersten drei Zeilen werden ausgeschlossen, da es sich dabei um allgemeine Angaben handelt WSI_Ready <- WSI %>% dplyr::select(-c(1:3))#embed-resources: true#self-contained-math: true
Explorative Faktorenanalyse
Ich versuche im folgendem diesem Ablauf zu folgen:
Figure 1: Ablaufschema der explorativen Faktorenanalyse
Es soll die Annahme exploriert werden, ob die angenommene Struktur mit drei latenten Faktoren bestätigt werden kann.
Deskriptive Statistik
Der Datensatz beinhaltet 1575 Beobachtungen von 71 Variablen. Damit wäre die erste Voraussetzung aus Figure 1 bereits erfült; wir haben mehr als 300 Beobachtungen. Die Items können in die folgenden Kategorien eingeteilt werden:
Figure 2: Übersicht über die Kategorien der Items
Folgende Tabelle zeigt die wichtigsten deskriptiven Werte der einzelnen Items über alle Beobachtungen an.
Für den Datensatz kann ein KMO Wert von 0.902 festgestellt werden, was für einen exzellenten Fit der Daten für eine FA gilt.
Note
Kaiser-Meyer-Olkin Koeffizient (KMO)
Der KMO Test ist ein Mass dafür, wie gut Daten für eine Faktorenanalyse geeignet sind. Dabei wird die gemeinsame Varianz aller Items bestimmt. Werte zwischen 0 und 1 sind möglich, je grösser desto besser, unter .6 wird als nicht akzeptabel angesehen. Quelle
Betrachtet man die einzelenen Item-Werte der Analyse, so lässt sich feststellen, dass kein Wert unter 0.812 fällt und dass mensch davaon ausgehen kann, dass alle Items sehr gut in diese Skala passen.
Damit ist der zweite Punkt der Checkliste von Figure 1 erfüllt.
Bei der Durchführung einer Faktorenanalyse muss darauf geachtet werden, dass die Items untereinander keine allzu hohe und auch keine zu tiefe Korrelation aufweisen. Sie sollten durchaus etwas korreliert sein, da sie ein ähnliches Konstrukt messen sollten, aber auch nicht zu hoch, da sie ansonsten redundant sind.
Die visuelle Inspektion der Korrelationsmatrix bei 71 Items gestaltet sich sowohl schwierig darzustellen, als auch zu kontrollieren. Die folgende Visualisierung enthält alle Korrelationen farbcodiert und es lässt sich feststellen, dass alle Items schwach bis mittel positiv miteinander korrelieren.
Code anzeigen
corrplot(cor(WSI_Ready), type ="lower", method ="color", tl.pos ='n', diag =FALSE)
Figure 3: Korrelationsmatrix mit Farbcodierung
Ein erster Test zur Überprüfung der Korrelationen unter Items ist der Bartlett-Test, welcher die Hypothese überprüft, dass alle Korrelationen 0 sind. Bei den WSI-Daten erhalten wir einen Chi-Square Wert von 1.6654026^{4} und einen p-Wert von 0, womit dieser Test Korrelationen zwischen den Daten anzeigt.
Code anzeigen
det <-cor(WSI_Ready) %>%determinant(logarithm =FALSE)
Um auszuschliessen, dass die Korrelationen zu hoch sind, kann die Derteminante der Korrelationsmatrix analysiert werden. Diese müsste grösser als 0.00001 sein. In unserem Fall beträgt diese 2.1488339^{-5}, was eiegentlich für zu hohe Korrelationen sprechen würde, aber mir aufgrund der Visualisierung nicht schlüssig erscheint oder ich habe die verwendete Funktion nicht richtig verstanden.
Faktorenextraktion
Mittels der folgenden Analyseverfahren sollen die zu extrahierenden Faktoren ermittelt werden. Ein Schlüsselkonzept hierbei ist der Eigenwert eines Faktors. Dieser Wert drückt den Anteil an der Gesamtvarianz aus, welcher durch die dem Faktor zugeordneten Variablen erklärt werden können.
Note
Eigenwert
(Symbol: λ) n. ein numerischer Index, der häufig in der Faktorenanalyse und der Hauptkomponentenanalyse verwendet wird und den Anteil der Gesamtvarianz zwischen mehreren korrelierten Variablen angibt, der auf eine grundlegendere, zugrunde liegende Variable oder ein Konstrukt zurückzuführen ist. Ein Eigenwert kann als die Summe der quadrierten Faktorladungen für alle Variablen berechnet werden. Eigenwerte sind von zentraler Bedeutung in der linearen Algebra (d. h. der Matrixalgebra). Quelle
Kaiser-Guttman Kriterium
Code anzeigen
KGC_PCA <-KGC(cor(WSI_Ready), eigen_type="PCA")
Dieses Kriterium besagt, dass nur Faktoren berücksichtigt werden sollen, die einen Eigenwert von mindestens 1 aufweisen Quelle. Ursprünglich wurde dieses Kriterium für eine Hauptkomponentenanalyse definiert. Die Hauptkomponentenanalyse (PCA) identifiziert Komponenten, die die grösstmögliche Varianz in den Daten erklären und untereinander nicht korreliert sind. Demgegenüber versucht die Faktorenanalyse (FA) latente Faktoren zu finden, die Kovarianzen und Korrelationen zwischen den Variablen erklären. Es handelt sich also um zwei unterschiedliche Herangehensweisen: Entweder möchte mensch die Gesamtvarianz auf möglichst wenige Komponenten verteilen oder mensch sucht Faktoren, die die Gemeinsamkeiten zwischen den Variablen erklären.
Der Unterschied kann auch mit Hilfe der Kommunalität ausgedrückt werden, welche die gemeinsame Varianz der Items darstellt \(h^2\). Bei einer PCA wird diese von vorn herein auf 1 gesetzt und nicht weiter aufgeteilt. Bei einer Faktorenanalyse wird die Kommunalität weiter aufgeteilt in die Uniqueness, Einzigartigkeit jedes Items, \(1-h^2\), welche ihrerseits in die spezifische Varianz und den Messfehler aufgeteilt werden kann (Figure 4)
Figure 4: Schma zur Varianzaufteilung und Kommunalität
Die folgende Tabelle zeigt die Faktorladungen der ersten 19 Faktoren einer PCA.
Eigenwert
8.049
3.563
2.475
1.526
1.433
1.418
1.296
1.267
1.250
1.190
Eigenwert
1.144
1.131
1.105
1.080
1.070
1.056
1.050
1.031
1.017
Eigenwerte der ersten 19 Faktoren mit einer PCA
Der Scree-Plot hierzu sieht wie folgt aus:
Figure 5: Scree-Plot der PCA Lösung
Auch wenn diese Kriterium ursprünglich für die PCA entwickelt wurde, kann es auch mit einer Korrelationsmatrix, welche die Kommunalitäten der Faktoranalyse verwendet, eingesetzt werden. Auch wenn die Autoren der Funktion darauf hinweisen, dass die Ergebnisse weniger exakt sein könnten, als die einer Parallelanalyse, fallen die Resultate praktisch gleich aus (Vergleiche mit folgendem Abschnitt)
Table 1: Kommunalitäten der sechs extrahierten Faktoren
Und der Scree-Plot für diese Lösung
Figure 6: Scree Plot der Eigenwerte unter Berücksichtigung der Kommualitäten
Parallelanalyse
Das Kaiser-Guttmann-Kriterium beinhaltet die bereits oben angesprochene Problematik der Missachtung von Messfehlern. Eine weitere Möglichkeit zu einer präziseren Schätzung der zu extrahierenden Faktoren zu gelangen besteht in der Anwendung einer Parallelanalyse. Diese vergleicht die Korrelationsmatrix der Stichprobe mit einer Korrelationsmatrix eines Nullmodels (bspw. mit unkorrelierten Variablen). Dadurch sollte eine genauere Faktorenschätzung erzielt werden.
Danger
Eine Parallelanalyse hat die Tendenz bei hoch-korrelierten Variablen, die Anzahl der Faktoren zu unterschätzen.
Quelle: PARALLEL Funktionsbeschreibung nach Braeken & van Assen, 2017
An diesem Punkt war ich zutiefst verunsichert, da die Parallelanalyse ja eigentlich genauere Resultate liefern sollte und ich aufgrund der Aufgabe immer mit einer Lösung nahe bei drei rechnete. Ich habe die Analyse mit drei verschiedenen Tools durchgeführt (EFATools, psych und paran), welche alle Lösungen von +/- 10 Faktoren ergaben. Was grundsätzlich Sinn machen würde, da der Datensatz über 9 skalen verfügt. Allerdings kann bei einer Betrachtung der Eigenwerte auch festgestellt werden, dass meist immer eine Lösung vorliegt, die drei Faktoren nahelegen würde, was sich an den Eigenwerten von über 1 ablesen lässt. Die Argumentation, dass es 10 Skalen, aber eben auch drei hierarchisch höherliegende Faktoren zu geben scheint, liesse sich wohl durchaus vertreten.
Alle drei Analysen verwenden das 95 Perzentil der simulierten Eigenwerte um die Wahrscheinlichkeit der Überschätzung der Faktoren zu vermeiden, wie dies von Glorfeld (1995) vorgeschlagen wurde. Die Analyse wurde schliesslich mit dem paran Package durchgeführt, 1000 Iterationen für die Vergleichsmatrix und die Axtraktionsmethode CFA, welche für eine Faktoranalyse steht.
Die folgen Reiter lassen die verschiedenen Screeplot anzeigen und im letzten Tab können noch die drei Faktorlösungen numerisch verglichen werden.
paran1 <-paran(WSI_Ready, iterations =1000, centile =95, cfa =TRUE, quietly =TRUE, graph =TRUE, status =FALSE)
Using eigendecomposition of correlation matrix.
Figure 7: Plot der Parallelanalyse mit dem paran Package
Es werden 12 Faktoren behalten.
Eine letzte Möglichkeit zur Parallelanalyse habe ich noch mit dem paran Package gefunden. In der Beschreibung zu diesem Package, als auch bei Eid et al. -Eid, Gollwitzer, and Schmitt (2017) bin ich noch auf die Methode von Glorfeld gestossen, welcher vorgeschlagen hat mindestens 50 Datensätze zu erzeugen und nur die Eigenwerte beizubehalten, die über dem 0.95 Perzentil liegen. Der Analyse liegen 100 Iterationen zugrunde und nur Eigenwerte, welche diesem Kriterium entsprechen wurden beibehalten.
Die paran-Funktion gibt einen unkorrigierten Eiegnwert, als auch eine korrigierte Version, wobei die Korrektur den “Bias”finite sample bias” korrigieren soll.
Wie bereits angesprochen, sprechen die Eigenwerte durchaus für eine Lösung mit drei Faktoren.
Code anzeigen
cbind(paran1$Ev[1:10], paran1$AdjEv[1:10]) %>%as.data.frame() %>%rename("unkorrigiert"=V1, "korrigiert"=V2) %>%round(digits=3) %>%kable(caption ="Eigenwerte der Parallelanalyse")
Mit der VSS Funktion (Very Simple Structure) liegt noch eine weitere Möglichkeit vor, um die Zahl der Faktoren zu bestimmen. Hierbei werden zwei weitere Möglichkeiten eingeführt, die Anzahl der Faktoren zu bestimmen: Die Namensgebende VSS und das MAP Kriterium. Ich habe mir nicht die Mühe gemacht, zu versuchen zu verstehen, wie diese genau funktionieren, sondern berichte die Ergbnisse nur noch als weiteren Hinweis zur Faktorenbestimmung.Weitere Erklärungen
Die Funktion wurde wie folgt spezifiziert: 15 zu extrahierende Faktoren (ausgehend von der Lösung der Parallelanalyse, muss der Funktion eine grössere Anzahl Faktoren vorgegeben werden), keine Rotation, minres als Faktormethode
Damit konnten die folgenden Lösungen gefunden werden: Die VSS Komplexität 1 findet eine Lösung mit 3 Faktoren bei einem maximalen Wert von 0.4794757 Die VSS Komplexität 2 findet eine Lösung mit 3 Faktoren bei einem maximalen Wert von 0.5786587 Die MAP Funktion findet eine Lösung mit 3 Faktoren bei einem minimlaen Wert von 0.001903
Der folgende Plot zeigt grafsich die Lösungen der VSS-Werte mit den Maxima bei 3.
Figure 8: Plot der VSS Lösungen für Komplexität 1 und 2
Faktorenanalyse
Nachdem nun die ersten Untersuchungen zu der Anzahl der Faktoren abgeschlossen ist, geht es um die genauere Inspektion der zu extrahierenden Faktoren. Verwendet wird die Funktion fa aus dem psych Package.
Note
Die Kommunalität (“Gemeinsamkeiten”) beschreibt den Anteil an der Gesamtvarianz einer Variablen, der durch alle Faktoren gemeinsam erklärt werden kann. Die Kommunalität gibt folglich an, in welchem Ausmass eine Variable durch die Faktoren erklärt wird. Wie die Kommunalitäten bestimmt werden, hängt von der gewählten Extraktionsmethode ab. Bei einer orthogonalen Rotation entspricht sie der Summe der quadrierten Faktorladungen. Quelle
Aufgrund der gestellten Aufgabe und der Analysen werde ich von drei Faktoren ausgehen. Aufgrund der Informationen in der Funktionsberschreibung von fa werde ich als Extraktionsvariante “minres” verwenden. Es wird eine orthogonale Varimax Rotation und eine oblique Promax Rotation, welche dem Pendant in SPSS entsprechen sollte. Alle weiteren Optionen belasse ich auf den default Angaben.
Der Tucker Lewis Index weist auf einen eher problematischen Fit hin (sollte >0.9 sein), RMSEA (<0.05) ist erfüllt .
Factor analysis with Call: fa(r = WSI_Ready, nfactors = 3, rotate = "varimax", fm = "minres")
Test of the hypothesis that 3 factors are sufficient.
The degrees of freedom for the model is 2275 and the objective function was 2.65
The number of observations was 1575 with Chi Square = 4107.43 with prob < 1.3e-108
The root mean square of the residuals (RMSA) is 0.03
The df corrected root mean square of the residuals is 0.03
Tucker Lewis Index of factoring reliability = 0.859
RMSEA index = 0.023 and the 10 % confidence intervals are 0.022 0.024
BIC = -12641.14
Die erklärte Varianz verteilt sich recht gleichmässig auf die drei Faktoren, allerdings erklären sie gemeinsam nur rund 16% der Gesamtvarianz.
MR1 MR3 MR2
SS loadings 4.30 3.86 3.51
Proportion Var 0.06 0.05 0.05
Cumulative Var 0.06 0.11 0.16
Proportion Explained 0.37 0.33 0.30
Cumulative Proportion 0.37 0.70 1.00
Es fällt auf, dass eine grosse Anzahl der Faktorladungen unter 0.5 liegen. Auch wenn dieser Wert als willkürlich betrachtet wird, so gibt er doch einen Hinweis, dass die drei Faktorenlösung nicht ideal ist. Auch beträgt die höchste Kommunalität der Variablen nur gerade 0.35713. Die Variablen erklären also durch den Faktor im besten Fall nur gerade rund 36% der Varianz.
Bei der Reliabilitätsanalyse mit Cronbachs Alpha kann die interne Konsistenz einer Skala geschätzt werden. Die Werte liegen über .85 was für eine gute Reliabilität der Items spricht.
raw_alpha
std.alpha
G6(smc)
average_r
S/N
mean
sd
median_r
0.86
0.88
0.89
0.09
7.29
0.86
0.20
0.08
Es fällt auf, dass es eine Reihe von Items gibt, die hohe und tiefe Mittelwerte aufweisen. Da diese Items dichotom sind, müsste überlegt werden, ob einige der zu einfachen oder zu schweren Items weggelassen werden könnten.
Aufgrund der durchgeführten Analysen komme ich zum Schluss, dass eine dreifaktorielle Lösung nicht ideal, aber möglich ist. Dagegen sprechen mehrere Punkt: TLI und RMSEA sind nicht ideal und unter den Cut-Off Werten, die Faktorladungen und die Kommunalitäten sind im Mittel eher als tief anzusehen. Hingegen entspricht die vorgeschlagene Lösung sehr genau dem erwarteten Resultat der Items auf die entsprechenden Faktoren (Figure 2) und es gibt auch keine bemerkenswerten Querladungen. Die Reliabilitäten sprechen auch für eine gute Item-Konstruktion.
CFA
Nach einigen Versuchen habe ich auch das CFA Modell, basierend auf dem EFA Modell mit drei Faktoren, gerechnet und einen Plot erstellt. Die Fit Indizes sehen recht gut aus, auch wenn TLI weiterhin unter dem erwünschten bleibt.
---title: "Faktoren Analyse"author: "Urs"format: html: code-fold: true code-summary: "Code anzeigen" code-tools: true code-overflow: wrap toc: true toc-location: left toc-title: "Inhaltsverzeichnis" toc-depth: 3execute: warning: false cache: truefig-cap-location: margintbl-cap-location: marginbibliography: references.bib---```{r, warning=FALSE, message=FALSE}library(psych)library(tidyverse)library(EFAtools)library(psychTools)library(GPArotation)library(psychometric)library(ctv)library(mnormt)library(haven)library(gt)library(DT)library(knitr)library(corrplot)library(paran)library(parameters) WSI <-read_sav("~/Library/CloudStorage/OneDrive-Lycéesetcentresprofessionnelsneuchâtelois/10 - Studium/1 - FHNW/Statistik 1/Faktoren Analyse/WSI.sav")# Die ersten drei Zeilen werden ausgeschlossen, da es sich dabei um allgemeine Angaben handelt WSI_Ready <- WSI %>% dplyr::select(-c(1:3))#embed-resources: true#self-contained-math: true```# Explorative FaktorenanalyseIch versuche im folgendem diesem Ablauf zu folgen:<div>{#fig-1}</div>Es soll die Annahme exploriert werden, ob die angenommene Struktur mit drei latenten Faktoren bestätigt werden kann.## Deskriptive StatistikDer Datensatz beinhaltet 1575 Beobachtungen von 71 Variablen. Damit wäre die erste Voraussetzung aus @fig-1 bereits erfült; wir haben mehr als 300 Beobachtungen. Die Items können in die folgenden Kategorien eingeteilt werden:<div>{#fig-2}</div>Folgende Tabelle zeigt die wichtigsten deskriptiven Werte der einzelnen Items über alle Beobachtungen an.```{r}#| label: tbl-item#| tbl-cap: "Itemstatistik"describe(WSI_Ready) %>% dplyr::add_rownames(var="Item") %>%arrange(vars) %>%mutate(across(c("mean", "sd","trimmed", "skew", "kurtosis", "se" ), round, digits=3)) %>% dplyr::select(-vars, -mad) %>%datatable()```### Kaiser-Meyer-Olkin Test```{r}KMO <-KMO(WSI_Ready)```Für den Datensatz kann ein KMO Wert von `r round(KMO$KMO, digits=3)` festgestellt werden, was für einen exzellenten Fit der Daten für eine FA gilt.::: callout-note**Kaiser-Meyer-Olkin Koeffizient (KMO)**Der **KMO** Test ist ein Mass dafür, wie gut Daten für eine Faktorenanalyse geeignet sind. Dabei wird die gemeinsame Varianz aller Items bestimmt. Werte zwischen 0 und 1 sind möglich, je grösser desto besser, unter .6 wird als nicht akzeptabel angesehen. [Quelle](https://www.statisticshowto.com/kaiser-meyer-olkin/):::Betrachtet man die einzelenen Item-Werte der Analyse, so lässt sich feststellen, dass kein Wert unter `r min(round(KMO$KMO_i, digits=3))` fällt und dass mensch davaon ausgehen kann, dass alle Items sehr gut in diese Skala passen.Damit ist der zweite Punkt der Checkliste von @fig-1 erfüllt.```{r}#| label: tbl-KMO#| tbl-cap: "Item Werte der KMO Analyse"#| layout-ncol: 2kable(round(KMO$KMO_i[1:36], digits=3))kable(round(KMO$KMO_i[37:71], digits=3))```### Multikollinearität```{r}bart <-cortest.bartlett(cor(WSI_Ready), n=1575)```Bei der Durchführung einer Faktorenanalyse muss darauf geachtet werden, dass die Items untereinander keine allzu hohe und auch keine zu tiefe Korrelation aufweisen. Sie sollten durchaus etwas korreliert sein, da sie ein ähnliches Konstrukt messen sollten, aber auch nicht zu hoch, da sie ansonsten redundant sind.Die visuelle Inspektion der Korrelationsmatrix bei 71 Items gestaltet sich sowohl schwierig darzustellen, als auch zu kontrollieren. Die folgende Visualisierung enthält alle Korrelationen farbcodiert und es lässt sich feststellen, dass alle Items schwach bis mittel positiv miteinander korrelieren.```{r}#| label: fig-corrplot#| fig-cap: "Korrelationsmatrix mit Farbcodierung"corrplot(cor(WSI_Ready), type ="lower", method ="color", tl.pos ='n', diag =FALSE)```Ein erster Test zur Überprüfung der Korrelationen unter Items ist der **Bartlett-Test**, welcher die Hypothese überprüft, dass alle Korrelationen 0 sind. Bei den WSI-Daten erhalten wir einen Chi-Square Wert von `r bart$chisq` und einen p-Wert von `r bart$p.value`, womit dieser Test Korrelationen zwischen den Daten anzeigt.```{r}det <-cor(WSI_Ready) %>%determinant(logarithm =FALSE)```Um auszuschliessen, dass die Korrelationen zu hoch sind, kann die Derteminante der Korrelationsmatrix analysiert werden. Diese müsste grösser als 0.00001 sein. In unserem Fall beträgt diese `r det$modulus`, was eiegentlich für zu hohe Korrelationen sprechen würde, aber mir aufgrund der Visualisierung nicht schlüssig erscheint oder ich habe die verwendete Funktion nicht richtig verstanden.## FaktorenextraktionMittels der folgenden Analyseverfahren sollen die zu extrahierenden Faktoren ermittelt werden. Ein Schlüsselkonzept hierbei ist der Eigenwert eines Faktors. Dieser Wert drückt den Anteil an der Gesamtvarianz aus, welcher durch die dem Faktor zugeordneten Variablen erklärt werden können.::: callout-note**Eigenwert**(Symbol: λ) n. ein numerischer Index, der häufig in der Faktorenanalyse und der Hauptkomponentenanalyse verwendet wird und den Anteil der Gesamtvarianz zwischen mehreren korrelierten Variablen angibt, der auf eine grundlegendere, zugrunde liegende Variable oder ein Konstrukt zurückzuführen ist. Ein Eigenwert kann als die Summe der quadrierten Faktorladungen für alle Variablen berechnet werden. Eigenwerte sind von zentraler Bedeutung in der linearen Algebra (d. h. der Matrixalgebra). [Quelle](https://dictionary.apa.org/eigenvalue):::### Kaiser-Guttman Kriterium```{r}KGC_PCA <-KGC(cor(WSI_Ready), eigen_type="PCA")```Dieses Kriterium besagt, dass nur Faktoren berücksichtigt werden sollen, die einen Eigenwert von mindestens 1 aufweisen [Quelle](https://lehrbuch-psychologie.springer.com/glossar/kaiser-guttmann-kriterium). Ursprünglich wurde dieses Kriterium für eine Hauptkomponentenanalyse definiert. Die Hauptkomponentenanalyse (PCA) identifiziert Komponenten, die die grösstmögliche Varianz in den Daten erklären und untereinander nicht korreliert sind. Demgegenüber versucht die Faktorenanalyse (FA) latente Faktoren zu finden, die Kovarianzen und Korrelationen zwischen den Variablen erklären. Es handelt sich also um zwei unterschiedliche Herangehensweisen: Entweder möchte mensch die Gesamtvarianz auf möglichst wenige Komponenten verteilen oder mensch sucht Faktoren, die die Gemeinsamkeiten zwischen den Variablen erklären.Der Unterschied kann auch mit Hilfe der Kommunalität ausgedrückt werden, welche die gemeinsame Varianz der Items darstellt $h^2$. Bei einer PCA wird diese von vorn herein auf 1 gesetzt und nicht weiter aufgeteilt. Bei einer Faktorenanalyse wird die Kommunalität weiter aufgeteilt in die Uniqueness, Einzigartigkeit jedes Items, $1-h^2$, welche ihrerseits in die spezifische Varianz und den Messfehler aufgeteilt werden kann (@fig-3)<div>{#fig-3}</div>Die folgende Tabelle zeigt die Faktorladungen der ersten 19 Faktoren einer PCA.```{r}#| label: tbl-KGC-PCA#| tbl-cap: "Eigenwerte der ersten 19 Faktoren mit einer PCA"#| layout-ncol: 2#| echo: falsekable(KGC_PCA$eigen_PCA[1:10], digits=3, col.names ="Eigenwert")kable(KGC_PCA$eigen_PCA[11:19], digits=3, col.names ="Eigenwert")```Der Scree-Plot hierzu sieht wie folgt aus:```{r}#| label: fig-KGC-PCA#| fig-cap: Scree-Plot der PCA Lösung#| echo: falseplot(KGC_PCA)```Auch wenn diese Kriterium ursprünglich für die PCA entwickelt wurde, kann es auch mit einer Korrelationsmatrix, welche die Kommunalitäten der Faktoranalyse verwendet, eingesetzt werden. Auch wenn die Autoren der Funktion darauf hinweisen, dass die Ergebnisse weniger exakt sein könnten, als die einer Parallelanalyse, fallen die Resultate praktisch gleich aus (Vergleiche mit folgendem Abschnitt)```{r}#| label: tbl-PFA-Eigen#| tbl-cap: "Kommunalitäten der sechs extrahierten Faktoren"#| tbl-colwidths: [50,50]KGC_PFA <-KGC(cor(WSI_Ready), eigen_type="EFA")round(KGC_PFA$eigen_EFA[1:6], digits=3) %>%as.tibble() %>%rename(Eigenwert=value) %>%gt() ```Und der Scree-Plot für diese Lösung```{r}#| label: fig-scree#| fig-cap: "Scree Plot der Eigenwerte unter Berücksichtigung der Kommualitäten"#| echo: falseplot(KGC_PFA)```### ParallelanalyseDas Kaiser-Guttmann-Kriterium beinhaltet die bereits oben angesprochene Problematik der Missachtung von Messfehlern. Eine weitere Möglichkeit zu einer präziseren Schätzung der zu extrahierenden Faktoren zu gelangen besteht in der Anwendung einer Parallelanalyse. Diese vergleicht die Korrelationsmatrix der Stichprobe mit einer Korrelationsmatrix eines Nullmodels (bspw. mit unkorrelierten Variablen). Dadurch sollte eine genauere Faktorenschätzung erzielt werden.::: callout-cautionEine Parallelanalyse hat die Tendenz bei hoch-korrelierten Variablen, die Anzahl der Faktoren zu unterschätzen.Quelle: PARALLEL Funktionsbeschreibung nach Braeken & van Assen, 2017:::An diesem Punkt war ich zutiefst verunsichert, da die Parallelanalyse ja eigentlich genauere Resultate liefern sollte und ich aufgrund der Aufgabe immer mit einer Lösung nahe bei drei rechnete. Ich habe die Analyse mit drei verschiedenen Tools durchgeführt (EFATools, psych und paran), welche alle Lösungen von +/- 10 Faktoren ergaben. Was grundsätzlich Sinn machen würde, da der Datensatz über 9 skalen verfügt. Allerdings kann bei einer Betrachtung der Eigenwerte auch festgestellt werden, dass meist immer eine Lösung vorliegt, die drei Faktoren nahelegen würde, was sich an den Eigenwerten von über 1 ablesen lässt. Die Argumentation, dass es 10 Skalen, aber eben auch drei hierarchisch höherliegende Faktoren zu geben scheint, liesse sich wohl durchaus vertreten.Alle drei Analysen verwenden das 95 Perzentil der simulierten Eigenwerte um die Wahrscheinlichkeit der Überschätzung der Faktoren zu vermeiden, wie dies von Glorfeld (1995) vorgeschlagen wurde. Die Analyse wurde schliesslich mit dem paran Package durchgeführt, 1000 Iterationen für die Vergleichsmatrix und die Axtraktionsmethode CFA, welche für eine Faktoranalyse steht.Die folgen Reiter lassen die verschiedenen Screeplot anzeigen und im letzten Tab können noch die drei Faktorlösungen numerisch verglichen werden.::: panel-tabset## paran Package```{r}#| label: fig-plot_PARA3#| fig-cap: "Plot der Parallelanalyse mit dem paran Package"paran1 <-paran(WSI_Ready, iterations =1000, centile =95, cfa =TRUE, quietly =TRUE, graph =TRUE, status =FALSE)```Es werden **`r paran1$Retained` Faktoren** behalten.Eine letzte Möglichkeit zur Parallelanalyse habe ich noch mit dem paran Package gefunden. In der Beschreibung zu diesem Package, als auch bei Eid et al. -@eidStatistikUndForschungsmethoden2017 bin ich noch auf die Methode von Glorfeld gestossen, welcher vorgeschlagen hat mindestens 50 Datensätze zu erzeugen und nur die Eigenwerte beizubehalten, die über dem 0.95 Perzentil liegen. Der Analyse liegen 100 Iterationen zugrunde und nur Eigenwerte, welche diesem Kriterium entsprechen wurden beibehalten.## EigenwerteDie paran-Funktion gibt einen unkorrigierten Eiegnwert, als auch eine korrigierte Version, wobei die Korrektur den "Bias"finite sample bias" korrigieren soll.Wie bereits angesprochen, sprechen die Eigenwerte durchaus für eine Lösung mit drei Faktoren.```{r}#| label: tbl-Eigen-Para#| tbl-cap: "Vergleich der Eigenwerte"cbind(paran1$Ev[1:10], paran1$AdjEv[1:10]) %>%as.data.frame() %>%rename("unkorrigiert"=V1, "korrigiert"=V2) %>%round(digits=3) %>%kable(caption ="Eigenwerte der Parallelanalyse")```## Bonus VSS```{r}vss <-vss(WSI_Ready, n=15, rotate ="none", fm="minres", plot=FALSE)```Mit der VSS Funktion (Very Simple Structure) liegt noch eine weitere Möglichkeit vor, um die Zahl der Faktoren zu bestimmen. Hierbei werden zwei weitere Möglichkeiten eingeführt, die Anzahl der Faktoren zu bestimmen: Die Namensgebende VSS und das MAP Kriterium. Ich habe mir nicht die Mühe gemacht, zu versuchen zu verstehen, wie diese genau funktionieren, sondern berichte die Ergbnisse nur noch als weiteren Hinweis zur Faktorenbestimmung.[Weitere Erklärungen](https://personality-project.org/r/vss.html)Die Funktion wurde wie folgt spezifiziert: 15 zu extrahierende Faktoren (ausgehend von der Lösung der Parallelanalyse, muss der Funktion eine grössere Anzahl Faktoren vorgegeben werden), keine Rotation, minres als FaktormethodeDamit konnten die folgenden Lösungen gefunden werden: Die VSS Komplexität 1 findet eine Lösung mit **`r which.max(vss$cfit.1)` Faktoren** bei einem maximalen Wert von `r max(vss$cfit.1)` Die VSS Komplexität 2 findet eine Lösung mit **`r which.max(vss$cfit.2)` Faktoren** bei einem maximalen Wert von `r max(vss$cfit.2)` Die MAP Funktion findet eine Lösung mit **`r which.min(vss$map)` Faktoren** bei einem minimlaen Wert von `r min(vss$map)`Der folgende Plot zeigt grafsich die Lösungen der VSS-Werte mit den Maxima bei 3.```{r}#| label: fig-vss#| fig-cap: Plot der VSS Lösungen für Komplexität 1 und 2#| echo: falseVSS.plot(vss)```:::## FaktorenanalyseNachdem nun die ersten Untersuchungen zu der Anzahl der Faktoren abgeschlossen ist, geht es um die genauere Inspektion der zu extrahierenden Faktoren. Verwendet wird die Funktion fa aus dem psych Package.::: callout-noteDie **Kommunalität** ("Gemeinsamkeiten") beschreibt den Anteil an der Gesamtvarianz einer Variablen, der durch alle Faktoren gemeinsam erklärt werden kann. Die Kommunalität gibt folglich an, in welchem Ausmass eine Variable durch die Faktoren erklärt wird. Wie die Kommunalitäten bestimmt werden, hängt von der gewählten Extraktionsmethode ab. Bei einer orthogonalen Rotation entspricht sie der Summe der quadrierten Faktorladungen. [Quelle](https://www.methodenberatung.uzh.ch/de/datenanalyse_spss/interdependenz/reduktion/faktor.html):::Aufgrund der gestellten Aufgabe und der Analysen werde ich von drei Faktoren ausgehen. Aufgrund der Informationen in der Funktionsberschreibung von fa werde ich als Extraktionsvariante "minres" verwenden. Es wird eine orthogonale Varimax Rotation und eine oblique Promax Rotation, welche dem Pendant in SPSS entsprechen sollte. Alle weiteren Optionen belasse ich auf den default Angaben.::: panel-tabset## Übersicht der Ergebnisse```{r}pa1 <-fa(WSI_Ready, fm="minres", nfactors =3, rotate ="varimax")```Der Tucker Lewis Index weist auf einen eher problematischen Fit hin (sollte >0.9 sein), RMSEA (<0.05) ist erfüllt .```{r}#| echo: false#| code-overflow: wrapsummary.psych(pa1)```Die erklärte Varianz verteilt sich recht gleichmässig auf die drei Faktoren, allerdings erklären sie gemeinsam nur rund 16% der Gesamtvarianz.```{r}#| echo: falseround(pa1$Vaccounted, digits =2)```## Faktorladungen VarimaxEs fällt auf, dass eine grosse Anzahl der Faktorladungen unter 0.5 liegen. Auch wenn dieser Wert als willkürlich betrachtet wird, so gibt er doch einen Hinweis, dass die drei Faktorenlösung nicht ideal ist. Auch beträgt die höchste Kommunalität der Variablen nur gerade `r max(pa1$communalities)`. Die Variablen erklären also durch den Faktor im besten Fall nur gerade rund 36% der Varianz.Querladungen sind hingegen nur wenige vorhanden.```{r}model_parameters(pa1,sort =TRUE, threshold =0.19)```## Faktorladungen PromaxÜberlegungen bleiben gleich analog der orthogonalen Rotation.Querladungen sind hingegen nur wenige vorhanden.```{r}#| echo: falsepa2 <-fa(WSI_Ready, fm="minres", nfactors =3, rotate ="promax")model_parameters(pa2,sort =TRUE, threshold =0.19)```:::## Reliabilitätsanalyse```{r}rel1 <- psych::alpha(WSI_Ready)```Bei der Reliabilitätsanalyse mit Cronbachs Alpha kann die interne Konsistenz einer Skala geschätzt werden. Die Werte liegen über .85 was für eine gute Reliabilität der Items spricht.```{r}#| echo: falserel1$total %>% dplyr::select(-6) %>%gt() %>%fmt_number(columns =everything(), rows =everything())```Es fällt auf, dass es eine Reihe von Items gibt, die hohe und tiefe Mittelwerte aufweisen. Da diese Items dichotom sind, müsste überlegt werden, ob einige der zu einfachen oder zu schweren Items weggelassen werden könnten.```{r}rel1$item.stats %>% dplyr::select(-1) %>%round(digits =3) %>%datatable()```## Abschliessende Bemerkung EFAAufgrund der durchgeführten Analysen komme ich zum Schluss, dass eine dreifaktorielle Lösung nicht ideal, aber möglich ist. Dagegen sprechen mehrere Punkt: TLI und RMSEA sind nicht ideal und unter den Cut-Off Werten, die Faktorladungen und die Kommunalitäten sind im Mittel eher als tief anzusehen. Hingegen entspricht die vorgeschlagene Lösung sehr genau dem erwarteten Resultat der Items auf die entsprechenden Faktoren (@fig-2) und es gibt auch keine bemerkenswerten Querladungen. Die Reliabilitäten sprechen auch für eine gute Item-Konstruktion.## CFANach einigen Versuchen habe ich auch das CFA Modell, basierend auf dem EFA Modell mit drei Faktoren, gerechnet und einen Plot erstellt. Die Fit Indizes sehen recht gut aus, auch wenn TLI weiterhin unter dem erwünschten bleibt.```{r}library(lavaan)library(semPlot)library(parameters)library(insight)pa2_mod<-efa_to_cfa(pa2)#sem_pa2 <- sem(pa2_mod, WSI_Ready)#summary(sem_pa2)cfa_1 <-cfa(pa2_mod, WSI_Ready)summary(cfa_1, fit.measures=TRUE)``````{r}semPaths(cfa_1, 'std', 'est', curveAdjacent =TRUE, style ="lisrel", layout="circle")```