FA: Chọn ma trận Xoay, dựa trên Tiêu chí Cấu trúc Đơn giản


8

Một trong những vấn đề quan trọng nhất trong việc sử dụng phân tích nhân tố là giải thích nó. Phân tích nhân tố thường sử dụng luân chuyển nhân tố để tăng cường giải thích. Sau một vòng quay đạt yêu cầu, các yếu tố xoay bốc ma trận L' sẽ có khả năng tương tự để đại diện cho ma trận tương quan và nó có thể được sử dụng như ma trận yếu tố tải, thay vì ma trận không xoay L .

Mục đích của phép quay là làm cho ma trận tải nhân tố xoay có một số thuộc tính mong muốn. Một trong những phương pháp được sử dụng là xoay ma trận tải nhân tố sao cho ma trận xoay sẽ có cấu trúc đơn giản .

LL Thurstone đã giới thiệu Nguyên tắc cấu trúc đơn giản, như một hướng dẫn chung cho xoay vòng nhân tố:

Tiêu chí cấu trúc đơn giản:

  1. Mỗi hàng của ma trận nhân tố phải chứa ít nhất một số không
  2. Nếu có m yếu tố chung, mỗi cột của ma trận nhân tố phải có ít nhất m số không
  3. Đối với mỗi cặp cột trong ma trận nhân tố, cần có một số biến để các mục nhập tiếp cận 0 trong một cột nhưng không có trong các cột khác
  4. Đối với mỗi cặp cột trong ma trận nhân tố, một tỷ lệ lớn các biến sẽ có các mục nhập gần bằng 0 trong cả hai cột khi có bốn hoặc nhiều yếu tố
  5. Đối với mỗi cặp cột trong ma trận nhân tố, chỉ nên có một số lượng nhỏ các biến có mục nhập khác trong cả hai cột

Cấu trúc đơn giản lý tưởng là:

  1. mỗi mục có mức cao, hoặc có ý nghĩa, chỉ tải trên một yếu tố và
  2. mỗi yếu tố có tải trọng cao, hoặc có ý nghĩa, chỉ cho một số mặt hàng.

Vấn đề là, khi thử một số kết hợp các phương pháp xoay cùng với các tham số mà mỗi phương thức chấp nhận (đặc biệt đối với các phương pháp xiên), số lượng ma trận ứng cử viên tăng lên và rất khó để xem phương pháp nào đáp ứng tốt hơn các tiêu chí trên.

Khi tôi lần đầu tiên đối mặt với vấn đề đó, tôi nhận ra rằng tôi không thể chọn trận đấu tốt nhất bằng cách chỉ 'nhìn' họ và tôi cần một thuật toán để giúp tôi quyết định. Dưới áp lực của thời hạn dự án, điều tôi có thể làm nhất là viết mã sau đây trong MATLAB, chấp nhận một ma trận xoay tại một thời điểm và trả về (theo một số giả định) cho dù mỗi tiêu chí có được đáp ứng hay không. Một phiên bản mới (Nếu tôi từng cố nâng cấp nó) sẽ chấp nhận ma trận 3d (một bộ ma trận 2d) làm đối số và thuật toán sẽ trả về một ma trận phù hợp hơn với các tiêu chí trên.

Làm thế nào bạn sẽ trích xuất một thuật toán ra khỏi các tiêu chí đó? Tôi chỉ hỏi ý kiến ​​của bạn (tôi cũng nghĩ rằng đã có sự chỉ trích về tính hữu ích của phương pháp) và có lẽ cách tiếp cận tốt hơn cho vấn đề lựa chọn ma trận xoay vòng.

Ngoài ra, tôi muốn biết phần mềm nào bạn thích thực hiện FA. Nếu là R, bạn sử dụng gói nào? (Tôi phải thừa nhận rằng nếu tôi phải làm FA, tôi sẽ chuyển sang SPSS một lần nữa). Nếu ai đó muốn cung cấp một số mã, tôi thích R hoặc MATLAB.

PS Công thức tiêu chí cấu trúc đơn giản ở trên có thể được tìm thấy trong cuốn sách "Tạo cảm giác phân tích nhân tố" của PETT, M., LACKEY, N., SULLIVAN, J.

PS2 (từ cùng một cuốn sách): "Một thử nghiệm phân tích nhân tố thành công là mức độ mà nó có thể tái tạo ma trận đúng ban đầu. Nếu bạn cũng sử dụng các giải pháp xiên, trong số tất cả, hãy chọn một trong số đó tạo ra số lượng lớn nhất của yếu tố cao nhất và thấp nhất tải trọng. " Điều này nghe có vẻ như một ràng buộc khác mà thuật toán có thể sử dụng.

PS3 Câu hỏi này cũng đã được hỏi ở đây . Tuy nhiên, tôi nghĩ rằng nó phù hợp hơn trên trang web này.

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

Câu trả lời:


6

Gói tâm lý R bao gồm các thói quen khác nhau để áp dụng Phân tích nhân tố (cho dù đó là PCA-, ML- hay FA), nhưng hãy xem đánh giá ngắn của tôi về crantastic . Hầu hết các kỹ thuật xoay thông thường đều có sẵn, cũng như thuật toán dựa trên các tiêu chí cấu trúc đơn giản; bạn có thể muốn xem bài viết của W. Revelle về chủ đề này, Cấu trúc rất đơn giản: Một thủ tục thay thế để ước tính số lượng tối ưu của các yếu tố có thể giải thích (MBR 1979 (14)) và VSS()chức năng.

Nhiều tác giả đang sử dụng phép quay trực giao (VARIMAX), xem xét tải trọng cao hơn, nói 0,3 hoặc 0,4 (chiếm tới 9 hoặc 16% phương sai được giải thích bởi yếu tố này), vì nó cung cấp các cấu trúc đơn giản hơn cho mục đích giải thích và chấm điểm (ví dụ, về chất lượng của nghiên cứu cuộc sống); những người khác (ví dụ Cattell, 1978; Kline, 1979) sẽ khuyến nghị xoay xiên vì "trong thế giới thực, không có lý khi nghĩ rằng các yếu tố, như các yếu tố quyết định quan trọng của hành vi, sẽ tương quan" (Tôi đang trích dẫn Kline, Intelligence. Quan điểm tâm lý học , 1991, trang 19).

Theo hiểu biết của tôi, các nhà nghiên cứu thường bắt đầu với FA (hoặc PCA), sử dụng biểu đồ scree cùng với dữ liệu mô phỏng (phân tích song song) để giúp chọn đúng số lượng các yếu tố. Tôi thường thấy rằng phân tích cụm mục và VSS bổ sung độc đáo cho cách tiếp cận như vậy. Khi một người quan tâm đến các yếu tố bậc hai hoặc tiếp tục với các phương pháp dựa trên SEM, thì rõ ràng bạn cần sử dụng phép xoay xiên và đưa ra ma trận tương quan kết quả.

Các gói / phần mềm khác:

  • dung nham , để phân tích biến tiềm ẩn trong R;
  • OpenMx dựa trên Mx , một phần mềm có mục đích chung bao gồm trình thông dịch đại số ma trận và trình tối ưu hóa số cho mô hình phương trình cấu trúc.

Tài liệu tham khảo
1. Cattell, RB (1978). Việc sử dụng khoa học của phân tích nhân tố trong khoa học hành vi và cuộc sống. New York, Hội nghị Trung ương.
2. Kline, P. (1979). Tâm lý học và Tâm lý học. London, Nhà xuất bản Học thuật.


3

Tôi thấy mình thường xuyên sử dụng phân tích song song (O'Connor, 2000). Điều này giải quyết vấn đề có bao nhiêu yếu tố để trích xuất độc đáo.

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

O'Connor, BP (2000). Các chương trình SPSS và SAS để xác định số lượng thành phần sử dụng phân tích song song và kiểm tra MAP của Velicer's. Phương pháp nghiên cứu hành vi, thiết bị và máy tính, 32, 396-402.


(+1) Tôi đã xem qua trang web của O'Connor vài năm trước và nó có rất nhiều tài nguyên hữu ích. Rất vui khi bạn liên kết nó ở đây.
chl

3

Tôi sẽ phải đề nghị thứ hai về gói tâm lý, nó cực kỳ hữu ích và có triển khai MAP và tiêu chí phân tích song song cho số lượng các yếu tố. Theo kinh nghiệm của riêng tôi, tôi đã thấy rằng nếu bạn tạo các giải pháp phân tích nhân tố cho tất cả các số giữa các số được trả về bởi MAP và phân tích song song, thông thường bạn có thể tìm thấy một giải pháp tương đối tối ưu.

Tôi cũng sẽ thứ hai việc sử dụng OpenMx để phân tích nhân tố xác nhận, vì nó dường như mang lại kết quả tốt nhất cho tất cả chúng, và tốt hơn nhiều cho các ma trận có hành vi xấu (như tôi có xu hướng). Cú pháp cũng khá hay, một khi bạn đã quen với nó. Vấn đề duy nhất mà tôi có với nó là trình tối ưu hóa không phải là nguồn mở và do đó nó không có sẵn trên CRAN. Rõ ràng họ đang làm việc trên một triển khai mã nguồn mở của trình tối ưu hóa, do đó có thể không phải là vấn đề lâu hơn nữa.


(+1) Cảm ơn bạn đã chia sẻ kinh nghiệm của bạn. Tôi thường quan sát thấy rằng một sự thỏa hiệp tốt được tìm thấy chỉ bằng cách xem xét âm mưu scree trong khi coi quy tắc của Kayser là giới hạn thấp hơn và dữ liệu mô phỏng là giới hạn trên. Những gì tôi thích psychlà nó hiển thị các lô scree mô phỏng từ cả PCA và FA.
chl

2

Câu hỏi tuyệt vời. Đây không thực sự là một câu trả lời, mà chỉ là một vài suy nghĩ.

Trong hầu hết các ứng dụng mà tôi đã sử dụng phân tích nhân tố, việc cho phép các yếu tố tương quan có ý nghĩa lý thuyết hơn. Tôi có xu hướng dựa vào phương pháp xoay proxmax. Tôi đã từng làm điều này trong SPSS và bây giờ tôi sử dụng factanalhàm trong R.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.