FA: Memilih matriks Rotasi, berdasarkan “Kriteria Struktur Sederhana”

8

Salah satu masalah terpenting dalam menggunakan analisis faktor adalah interpretasinya. Analisis faktor sering menggunakan rotasi faktor untuk meningkatkan interpretasinya. Setelah rotasi yang memuaskan, matriks pemuatan faktor yang diputar L ' akan memiliki kemampuan yang sama untuk mewakili matriks korelasi dan dapat digunakan sebagai matriks pemuatan faktor, bukan matriks L yang tidak diputar .

Tujuan rotasi adalah untuk membuat matriks loading factor yang diputar memiliki beberapa sifat yang diinginkan. Salah satu metode yang digunakan adalah memutar matriks pemuatan faktor sehingga matriks yang diputar akan memiliki struktur sederhana .

LL Thurstone memperkenalkan Prinsip Struktur Sederhana, sebagai panduan umum untuk rotasi faktor:

Kriteria Struktur Sederhana:

  1. Setiap baris matriks faktor harus mengandung setidaknya satu nol
  2. Jika ada faktor-faktor umum m, setiap kolom dari matriks faktor harus memiliki setidaknya m nol
  3. Untuk setiap pasangan kolom dalam matriks faktor, harus ada beberapa variabel yang entri mendekati nol di satu kolom tetapi tidak di yang lain
  4. Untuk setiap pasangan kolom dalam matriks faktor, sebagian besar variabel harus memiliki entri mendekati nol di kedua kolom ketika ada empat atau lebih faktor
  5. Untuk setiap pasangan kolom dalam matriks faktor, seharusnya hanya ada sejumlah kecil variabel dengan entri nol di kedua kolom

Struktur sederhana yang ideal adalah sedemikian rupa sehingga:

  1. setiap item memiliki muatan tinggi, atau bermakna, dengan satu faktor saja dan
  2. setiap faktor memiliki muatan tinggi, atau bermakna, hanya untuk beberapa item.

Masalahnya adalah bahwa, mencoba beberapa kombinasi metode rotasi bersama dengan parameter yang diterima masing-masing (terutama untuk yang miring), jumlah matriks kandidat meningkat dan sangat sulit untuk melihat mana yang lebih baik memenuhi kriteria di atas.

Ketika saya pertama kali menghadapi masalah itu, saya menyadari bahwa saya tidak dapat memilih pasangan yang cocok hanya dengan 'melihat' mereka, dan bahwa saya membutuhkan algoritma untuk membantu saya memutuskan. Di bawah tekanan tenggat waktu proyek, yang paling bisa saya lakukan adalah menulis kode berikut dalam MATLAB, yang menerima satu matriks rotasi pada suatu waktu dan mengembalikan (berdasarkan beberapa asumsi) apakah setiap kriteria terpenuhi atau tidak. Versi baru (Jika saya pernah mencoba untuk memutakhirkannya) akan menerima matriks 3d (seperangkat matriks 2d) sebagai argumen, dan algoritma harus mengembalikan yang lebih sesuai dengan kriteria di atas.

Bagaimana Anda mengekstrak algoritma dari kriteria tersebut? Saya hanya meminta pendapat Anda (saya juga berpikir bahwa ada kritik atas kegunaan metode dengan sendirinya) dan mungkin pendekatan yang lebih baik untuk masalah pemilihan matriks rotasi.

Saya juga ingin tahu perangkat lunak apa yang Anda sukai untuk melakukan FA. Jika R, paket apa yang Anda gunakan? (Saya harus mengakui bahwa jika saya harus melakukan FA, saya akan beralih ke SPSS lagi). Jika seseorang ingin memberikan beberapa kode, saya lebih suka R atau MATLAB.

PS Formulasi Kriteria Struktur Sederhana di atas dapat ditemukan dalam buku "Membuat Analisis Faktor Akal" oleh PETT, M., LACKEY, N., SULLIVAN, J.

PS2 (dari buku yang sama): "Tes analisis faktor yang berhasil adalah sejauh mana ia dapat mereproduksi matriks kor asli. Jika Anda juga menggunakan solusi miring, di antara semua pilih yang menghasilkan jumlah terbesar dari faktor tertinggi dan terendah. pemuatan. " Ini terdengar seperti kendala lain yang bisa digunakan algoritma.

PS3 Pertanyaan ini juga telah ditanyakan di sini . Namun, saya pikir ini lebih cocok di situs ini.

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
sumber

Jawaban:

6

Paket R psik mencakup berbagai rutinitas untuk menerapkan Analisis Faktor (apakah itu berbasis PCA, ML- atau FA), tetapi lihat ulasan singkat saya tentang crantastic . Sebagian besar teknik rotasi biasa tersedia, serta algoritma bergantung pada kriteria struktur sederhana; Anda mungkin ingin melihat makalah W. Revelle tentang topik ini, Struktur Sangat Sederhana: Sebuah Prosedur Alternatif Untuk Memperkirakan Jumlah Optimal Dari Faktor Yang Dapat Diinterpretasikan (MBR 1979 (14)) dan VSS()fungsinya.

Banyak penulis menggunakan rotasi ortogonal (VARIMAX), mempertimbangkan memuat lebih tinggi dari, katakanlah 0,3 atau 0,4 (yang berjumlah 9 atau 16% dari perbedaan dijelaskan oleh faktor), karena memberikan struktur yang lebih sederhana untuk interpretasi dan tujuan penilaian (misalnya, dalam kualitas penelitian kehidupan); yang lain (misalnya Cattell, 1978; Kline, 1979) akan merekomendasikan rotasi miring karena "di dunia nyata, tidak masuk akal untuk berpikir bahwa faktor-faktor, sebagai penentu perilaku yang penting, akan berkorelasi" (Saya mengutip Kline, Intelligence. The Psychometric View , 1991, hlm. 19).

Sepengetahuan saya, para peneliti umumnya mulai dengan FA (atau PCA), menggunakan plot scree bersama dengan data simulasi (analisis paralel) untuk membantu memilih jumlah faktor yang tepat. Saya sering menemukan bahwa analisis item cluster dan VSS melengkapi pendekatan semacam itu. Ketika seseorang tertarik pada faktor orde kedua, atau melanjutkan dengan metode berbasis SEM, maka jelas Anda perlu menggunakan rotasi miring dan faktor keluar matriks korelasi yang dihasilkan.

Paket / perangkat lunak lain:

  • lavaan , untuk analisis variabel laten dalam R;
  • OpenMx berdasarkan Mx , perangkat lunak tujuan umum termasuk juru bahasa aljabar matriks dan pengoptimal numerik untuk pemodelan persamaan struktural.

Referensi
1. Cattell, RB (1978). Penggunaan analisis faktor secara ilmiah dalam ilmu perilaku dan kehidupan. New York, Plenum.
2. Kline, P. (1979). Psikometri dan Psikologi. London, Academic Press.

chl
sumber
3

Saya menemukan diri saya secara rutin menggunakan analisis paralel (O'Connor, 2000). Ini memecahkan masalah berapa banyak faktor untuk diekstrak dengan baik.

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

O'Connor, BP (2000). Program SPSS dan SAS untuk menentukan jumlah komponen menggunakan analisis paralel dan tes MAP Velicer's. Metode Penelitian Perilaku, Instrumentasi, dan Komputer, 32, 396-402.


sumber
(+1) Saya menemukan situs web O'Connor beberapa tahun yang lalu dan memiliki banyak sumber daya yang bermanfaat. Senang Anda menghubungkannya di sini.
chl
3

Saya harus saran chl kedua paket psik, yang sangat berguna dan memiliki implementasi dari MAP dan kriteria analisis paralel untuk sejumlah faktor. Dalam pengalaman saya sendiri, saya telah menemukan bahwa jika Anda membuat solusi analisis faktor untuk semua angka antara yang dikembalikan oleh MAP dan analisis paralel, Anda biasanya dapat menemukan solusi yang relatif optimal.

Saya juga akan menggunakan OpenMx kedua untuk analisis faktor konfirmasi, karena tampaknya memberikan hasil terbaik dari semuanya, dan jauh, jauh lebih baik untuk matriks berperilaku buruk (seperti yang cenderung terjadi pada saya). Sintaksnya juga cukup bagus, setelah Anda terbiasa. Satu-satunya masalah yang saya miliki adalah optimizer bukan open source, dan karenanya tidak tersedia pada CRAN. Tampaknya mereka sedang mengerjakan implementasi open source dari optimiser, sehingga mungkin tidak menjadi masalah lebih lama.

richiemorrisroe
sumber
(+1) Terima kasih telah berbagi pengalaman Anda. Saya sering mengamati bahwa kompromi yang baik ditemukan hanya dengan melihat plot scree sambil mempertimbangkan aturan Kayser sebagai batas bawah dan data simulasi sebagai batas atas. Apa yang saya suka psychadalah bahwa ia menampilkan plot scree simulasi dari PCA dan FA.
chl
2

Pertanyaan bagus Ini sebenarnya bukan jawaban, tetapi hanya beberapa pemikiran.

Dalam sebagian besar aplikasi di mana saya telah menggunakan analisis faktor, mengizinkan faktor berkorelasi lebih masuk akal secara teoritis. Saya cenderung mengandalkan metode rotasi proxmax. Saya dulu melakukan ini di SPSS dan sekarang saya menggunakan factanalfungsi di R.

Jeromy Anglim
sumber