FA: Auswahl der Rotationsmatrix basierend auf „Einfachen Strukturkriterien“

8

Eines der wichtigsten Probleme bei der Verwendung der Faktoranalyse ist ihre Interpretation. Die Faktoranalyse verwendet häufig eine Faktorrotation, um ihre Interpretation zu verbessern. Nach einer zufriedenstellenden Drehung hat die gedrehte Faktorladematrix L ' die gleiche Fähigkeit, die Korrelationsmatrix darzustellen, und sie kann anstelle der nicht gedrehten Matrix L als Faktorladematrix verwendet werden .

Der Zweck der Rotation besteht darin, dass die gedrehte Faktor-Ladematrix einige wünschenswerte Eigenschaften aufweist. Eine der verwendeten Methoden besteht darin, die Faktorladematrix so zu drehen, dass die gedrehte Matrix eine einfache Struktur aufweist .

LL Thurstone führte das Prinzip der einfachen Struktur als allgemeinen Leitfaden für die Faktorrotation ein:

Einfache Strukturkriterien:

  1. Jede Zeile der Faktormatrix sollte mindestens eine Null enthalten
  2. Wenn es m gemeinsame Faktoren gibt, sollte jede Spalte der Faktormatrix mindestens m Nullen haben
  3. Für jedes Spaltenpaar in der Faktormatrix sollten mehrere Variablen vorhanden sein, für die Einträge in der einen Spalte gegen Null gehen, in der anderen jedoch nicht
  4. Für jedes Spaltenpaar in der Faktormatrix sollte ein großer Teil der Variablen Einträge haben, die in beiden Spalten gegen Null gehen, wenn vier oder mehr Faktoren vorhanden sind
  5. Für jedes Spaltenpaar in der Faktormatrix sollte es nur eine kleine Anzahl von Variablen mit Einträgen ungleich Null in beiden Spalten geben

Die ideale einfache Struktur ist so, dass:

  1. Jeder Gegenstand hat eine hohe oder bedeutungsvolle Belastung nur für einen Faktor und
  2. Jeder Faktor hat nur für einige der Elemente hohe oder sinnvolle Belastungen.

Das Problem ist, dass beim Ausprobieren mehrerer Kombinationen von Rotationsmethoden zusammen mit den Parametern, die jede akzeptiert (insbesondere für schräge), die Anzahl der Kandidatenmatrizen zunimmt und es sehr schwierig ist zu erkennen, welche die oben genannten Kriterien besser erfüllt.

Als ich zum ersten Mal mit diesem Problem konfrontiert wurde, stellte ich fest, dass ich nicht in der Lage war, die beste Übereinstimmung auszuwählen, indem ich sie nur "ansah", und dass ich einen Algorithmus brauchte, der mir bei der Entscheidung half. Unter dem Druck der Projektfristen konnte ich höchstens den folgenden Code in MATLAB schreiben, der jeweils eine Rotationsmatrix akzeptiert und (unter bestimmten Annahmen) zurückgibt, ob jedes Kriterium erfüllt ist oder nicht. Eine neue Version (falls ich jemals versuchen würde, sie zu aktualisieren) würde eine 3D-Matrix (eine Reihe von 2D-Matrizen) als Argument akzeptieren, und der Algorithmus sollte diejenige zurückgeben, die den oben genannten Kriterien besser entspricht.

Wie würden Sie einen Algorithmus aus diesen Kriterien extrahieren? Ich frage nur nach Ihrer Meinung (ich denke auch, dass die Nützlichkeit der Methode an sich kritisiert wurde) und vielleicht nach besseren Ansätzen für das Problem der Auswahl der Rotationsmatrix.

Außerdem würde ich gerne wissen, welche Software Sie bevorzugen, um FA durchzuführen. Wenn es R ist, welches Paket verwenden Sie? (Ich muss zugeben, wenn ich FA machen müsste, würde ich mich wieder an SPSS wenden). Wenn jemand Code bereitstellen möchte, würde ich R oder MATLAB bevorzugen.

PS Die obige Formulierung für einfache Strukturkriterien findet sich in dem Buch "Making Sense of Factor Analysis" von PETT, M., LACKEY, N., SULLIVAN, J.

PS2 (aus demselben Buch): "Ein Test für eine erfolgreiche Faktoranalyse ist das Ausmaß, in dem die ursprüngliche Korrelationsmatrix reproduziert werden kann. Wenn Sie auch schräge Lösungen verwendet haben, wählen Sie unter allen diejenige aus, die die größte Anzahl des höchsten und niedrigsten Faktors generiert hat Ladungen. " Dies klingt nach einer weiteren Einschränkung, die der Algorithmus verwenden könnte.

PS3 Diese Frage wurde auch hier gestellt . Ich denke jedoch, dass es besser auf diese Seite passt.

function [] = simple_structure_criteria (my_pattern_table)
%Simple Structure Criteria
%Making Sense of Factor Analysis, page 132

disp(' ');
disp('Simple Structure Criteria (Thurstone):');
disp('1. Each row of the factor matrix should contain at least one zero');
disp( '2. If there are m common factors, each column of the factor matrix should have at least m zeros');
disp( '3. For every pair of columns in the factor matrix, there should be several variables for which entries approach zero in the one column but not in the other');
disp( '4. For every pair of columns in the factor matrix, a large proportion of the variables should have entries approaching zero in both columns when there are four or more factors');
disp( '5. For every pair of columns in the factor matrix, there should be only a small number of variables with nonzero entries in both columns');
disp(' ');
disp( '(additional by Pedhazur and Schmelkin) The ideal simple structure is such that:');
disp( '6. Each item has a high, or meaningful, loading on one factor only and');
disp( '7. Each factor have high, or meaningful, loadings for only some of the items.');

disp('')
disp('Start checking...')

%test matrix
%ct=[76,78,16,7;19,29,10,13;2,6,7,8];
%test it by giving: simple_structure_criteria (ct)

ct=abs(my_pattern_table);

items=size(ct,1);
factors=size(ct,2);
my_zero = 0.1;
approach_zero = 0.2;
several = floor(items / 3);
small_number = ceil(items / 4);
large_proportion = 0.30;
meaningful = 0.4;
some_bottom = 2;
some_top = floor(items / 2);

% CRITERION 1
disp(' ');
disp('CRITERION 1');
for i = 1 : 1 : items
    count = 0;
    for j = 1 : 1 : factors
        if (ct(i,j) < my_zero)
            count = count + 1;
            break
        end
    end
    if (count == 0)
        disp(['Criterion 1 is NOT MET for item ' num2str(i)])
    end
end


% CRITERION 2
disp(' ');
disp('CRITERION 2');
for j = 1 : 1 : factors 
    m=0;
    for i = 1 : 1 : items
        if (ct(i,j) < my_zero)
            m = m + 1;
        end
    end
    if (m < factors)
        disp(['Criterion 2 is NOT MET for factor ' num2str(j) '. m = ' num2str(m)]);
    end
end

% CRITERION 3
disp(' ');
disp('CRITERION 3');
for c1 = 1 : 1 : factors - 1
    for c2 = c1 + 1 : 1 : factors
        test_several = 0;
        for i = 1 : 1 : items
            if ( (ct(i,c1)>my_zero && ct(i,c2)<my_zero) || (ct(i,c1)<my_zero && ct(i,c2)>my_zero) ) % approach zero in one but not in the other
                test_several = test_several + 1;
            end
        end
        disp(['several = ' num2str(test_several) ' for factors ' num2str(c1) ' and ' num2str(c2)]);
        if (test_several < several)
            disp(['Criterion 3 is NOT MET for factors ' num2str(c1) ' and ' num2str(c2)]);
        end
    end
end

% CRITERION 4
disp(' ');
disp('CRITERION 4');
if (factors > 3)
    for c1 = 1 : 1 : factors - 1
        for c2 = c1 + 1 : 1 : factors
            test_several = 0;
            for i = 1 : 1 : items
                if (ct(i,c1)<approach_zero && ct(i,c2)<approach_zero) % approach zero in both
                    test_several = test_several + 1;
                end
            end
            disp(['large proportion = ' num2str((test_several / items)*100) '% for factors ' num2str(c1) ' and ' num2str(c2)]);
            if ((test_several / items) < large_proportion)
                pr = sprintf('%4.2g',  (test_several / items) * 100 );
                disp(['Criterion 4 is NOT MET for factors ' num2str(c1) ' and ' num2str(c2) '. Proportion is ' pr '%']);
            end
        end
    end
end

% CRITERION 5
disp(' ');
disp('CRITERION 5');
for c1 = 1 : 1 : factors - 1
    for c2 = c1 + 1 : 1 : factors
        test_number = 0;
        for i = 1 : 1 : items
            if (ct(i,c1)>approach_zero && ct(i,c2)>approach_zero) % approach zero in both
                test_number = test_number + 1;
            end
        end
        disp(['small number = ' num2str(test_number) ' for factors ' num2str(c1) ' and ' num2str(c2)]);
        if (test_number > small_number)
            disp(['Criterion 5 is NOT MET for factors ' num2str(c1) ' and ' num2str(c2)]);
        end
    end
end

% CRITERION 6
disp(' ');
disp('CRITERION 6');
for i = 1 : 1 : items
    count = 0;
    for j = 1 : 1 : factors
        if (ct(i,j) > meaningful)
            count = count + 1;
        end
    end
    if (count == 0 || count > 1)
        disp(['Criterion 6 is NOT MET for item ' num2str(i)])
    end
end

% CRITERION 7
disp(' ');
disp('CRITERION 7');
for j = 1 : 1 : factors 
    m=0;
    for i = 1 : 1 : items
        if (ct(i,j) > meaningful)
            m = m + 1;
        end
    end
    disp(['some items = ' num2str(m) ' for factor ' num2str(j)]);
    if (m < some_bottom || m > some_top)
        disp(['Criterion 7 is NOT MET for factor ' num2str(j)]);
    end
end
disp('')
disp('Checking completed.')
return
George Dontas
quelle

Antworten:

6

Das R psych- Paket enthält verschiedene Routinen zur Anwendung der Faktoranalyse (ob PCA-, ML- oder FA-basiert), aber siehe meine kurze Übersicht über Krantastik . Die meisten der üblichen Rotationstechniken sowie Algorithmen, die auf einfachen Strukturkriterien beruhen, sind verfügbar. Vielleicht möchten Sie einen Blick auf W. Revelles Artikel zu diesem Thema werfen : Sehr einfache Struktur: Ein alternatives Verfahren zur Schätzung der optimalen Anzahl interpretierbarer Faktoren (MBR 1979 (14)) und der VSS()Funktion.

Viele Autoren verwenden die orthogonale Rotation (VARIMAX) unter Berücksichtigung von Belastungen von beispielsweise 0,3 oder 0,4 (was 9 oder 16% der durch den Faktor erklärten Varianz entspricht), da dies einfachere Strukturen für Interpretations- und Bewertungszwecke bietet (z. B. in Bezug auf die Qualität) der Lebensforschung); andere (z. B. Cattell, 1978; Kline, 1979) würden schräge Rotationen empfehlen, da "in der realen Welt es nicht unangemessen ist zu glauben, dass Faktoren als wichtige Determinanten des Verhaltens korrelieren" (ich zitiere Kline, Intelligence. The Psychometric View , 1991, S. 19).

Meines Wissens beginnen Forscher im Allgemeinen mit FA (oder PCA) und verwenden ein Geröllplot zusammen mit simulierten Daten (parallele Analyse), um die Auswahl der richtigen Anzahl von Faktoren zu erleichtern. Ich habe oft festgestellt, dass Item-Cluster-Analyse und VSS einen solchen Ansatz gut ergänzen. Wenn man an Faktoren zweiter Ordnung interessiert ist oder mit SEM-basierten Methoden weitermachen möchte, muss man natürlich die schräge Rotation verwenden und die resultierende Korrelationsmatrix herausrechnen.

Andere Pakete / Software:

  • Lavaan für die Analyse latenter Variablen in R;
  • OpenMx basiert auf Mx , einer Allzweck-Software mit einem Matrix-Algebra-Interpreter und einem numerischen Optimierer für die Modellierung von Strukturgleichungen.

Literaturhinweise
1. Cattell, RB (1978). Der wissenschaftliche Einsatz der Faktoranalyse in den Verhaltens- und Biowissenschaften. New York, Plenum.
2. Kline, P. (1979). Psychometrie und Psychologie. London, akademische Presse.

chl
quelle
3

Ich verwende routinemäßig parallele Analysen (O'Connor, 2000). Dies löst das Problem, wie viele Faktoren gut extrahiert werden müssen.

Siehe: https://people.ok.ubc.ca/brioconn/nfactors/nfactors.html

O'Connor, BP (2000). SPSS- und SAS-Programme zur Bestimmung der Anzahl der Komponenten mithilfe der parallelen Analyse und des Velicer-MAP-Tests. Methoden, Instrumente und Computer zur Verhaltensforschung, 32, 396-402.


quelle
(+1) Ich bin vor einigen Jahren auf die Website von O'Connor gestoßen, die viele nützliche Ressourcen enthält. Schön, dass Sie es hier verlinken.
Chl
3

Ich müsste mich dem Vorschlag von chl für das Psychopaket anschließen, das äußerst nützlich ist und Implementierungen des MAP und parallele Analysekriterien für die Anzahl der Faktoren enthält. Nach meiner eigenen Erfahrung habe ich festgestellt, dass Sie normalerweise eine relativ optimale Lösung finden, wenn Sie Faktoranalyselösungen für alle Zahlen zwischen den von MAP zurückgegebenen und der parallelen Analyse erstellen.

Ich würde auch die Verwendung von OpenMx für die Analyse von Bestätigungsfaktoren unterstützen, da es die besten Ergebnisse von allen zu liefern scheint und für schlecht benommene Matrizen viel, viel besser ist (wie meine normalerweise sind). Die Syntax ist auch ganz nett, wenn man sich erst einmal daran gewöhnt hat. Das einzige Problem, das ich damit habe, ist, dass der Optimierer nicht Open Source ist und daher nicht auf CRAN verfügbar ist. Anscheinend arbeiten sie an einer Open-Source-Implementierung des Optimierers, so dass dies möglicherweise nicht mehr lange ein Problem darstellt.

richiemorrisroe
quelle
(+1) Danke, dass du deine Erfahrungen geteilt hast. Ich habe oft beobachtet, dass ein guter Kompromiss gefunden wird, wenn man sich nur die Geröllkurve ansieht und dabei Kaysers Regel als Untergrenze und simulierte Daten als Obergrenze betrachtet. Was mir gefällt, psychist, dass es simulierte Geröllplots von PCA und FA anzeigt.
Chl
2

Gute Frage. Dies ist nicht wirklich eine Antwort, sondern nur ein paar Gedanken.

In den meisten Anwendungen, in denen ich die Faktoranalyse verwendet habe, ist es theoretisch sinnvoller, korrelierte Faktoren zuzulassen. Ich neige dazu, mich auf die Proxmax-Rotationsmethode zu verlassen. Früher habe ich das in SPSS gemacht und jetzt benutze ich die factanalFunktion in R.

Jeromy Anglim
quelle