Giải thích sự khác biệt giữa R và SPSS với phân tích nhân tố khám phá


14

Tôi là một sinh viên tốt nghiệp ngành khoa học máy tính. Tôi đã làm một số phân tích nhân tố khám phá cho một dự án nghiên cứu. Các đồng nghiệp của tôi (người đang dẫn dắt dự án) sử dụng SPSS, trong khi tôi thích sử dụng R. Điều này không thành vấn đề cho đến khi chúng tôi phát hiện ra sự khác biệt lớn giữa hai gói thống kê.

Chúng tôi đang sử dụng bao thanh toán trục chính làm phương pháp trích xuất (xin lưu ý rằng tôi nhận thức rõ về sự khác biệt giữa PCA và phân tích nhân tố và chúng tôi không sử dụng PCA , ít nhất là không cố ý). Từ những gì tôi đã đọc, điều này phải tương ứng với phương pháp "trục chính" trong R, và một trong hai "bao thanh toán trục chính" hay "bình phương nhỏ nhất không trọng số" trong SPSS, theo tài liệu R . Chúng tôi đang sử dụng một phương pháp xoay xiên (cụ thể là promax ) vì chúng tôi mong đợi các yếu tố tương quan và đang diễn giải ma trận mẫu .

Chạy hai thủ tục trong R và SPSS, có sự khác biệt lớn. Ma trận mẫu cho các tải khác nhau. Mặc dù điều này mang lại ít nhiều yếu tố giống nhau cho các mối quan hệ khác nhau, nhưng có đến 0,15 sự khác biệt giữa các lần tải tương ứng, điều này dường như được mong đợi nhiều hơn chỉ bằng cách thực hiện khác nhau của phương pháp trích xuất và xoay vòng promax. Tuy nhiên, đó không phải là sự khác biệt đáng ngạc nhiên nhất.

Phương sai tích lũy được giải thích bởi các yếu tố là khoảng 40% trong kết quả SPSS và 31% trong kết quả R. Đây là một sự khác biệt rất lớn và đã dẫn đến các đồng nghiệp của tôi muốn sử dụng SPSS thay vì R. Tôi không có vấn đề gì với điều này, nhưng một sự khác biệt lớn khiến tôi nghĩ rằng chúng ta có thể hiểu sai điều gì đó, đó là một vấn đề.

Làm vấy bẩn vùng biển thậm chí nhiều hơn, SPSS báo cáo các loại phương sai được giải thích khác nhau khi chúng tôi chạy bao thanh toán bình phương nhỏ nhất không trọng số. Tỷ lệ phương sai được giải thích theo Eigenvalues ​​ban đầu là 40%, trong khi tỷ lệ phương sai được giải thích từ Trích xuất tổng tải bình phương (SSL) là 33%. Điều này khiến tôi nghĩ rằng Eigenvalues ​​ban đầu không phải là con số thích hợp để xem xét (tôi nghi ngờ đây là phương sai được giải thích trước khi xoay, mặc dù nó quá lớn so với tôi). Khó hiểu hơn nữa, SPSS cũng hiển thị SSL Rotation, nhưng không tính được tỷ lệ phần trăm của phương sai được giải thích (SPSS cho tôi biết rằng có các yếu tố tương quan có nghĩa là tôi không thể thêm SSL để tìm tổng phương sai, điều này hợp lý với toán học tôi đã thấy). Các SSL được báo cáo từ R không khớp với bất kỳ trong số này và R cho tôi biết rằng nó mô tả 31% tổng phương sai. SSL của R khớp với SSL Rotation một cách chặt chẽ nhất. Giá trị riêng của R từ ma trận tương quan ban đầu khớp với Giá trị riêng ban đầu từ SPSS.

Ngoài ra, xin lưu ý rằng tôi đã chơi xung quanh bằng cách sử dụng các phương pháp khác nhau và rằng ULS và PAF của SPSS dường như khớp với phương pháp PA của R gần nhất.

Câu hỏi cụ thể của tôi:

  1. Tôi mong đợi bao nhiêu sự khác biệt giữa R và SPSS với việc triển khai phân tích nhân tố?
  2. Tôi nên diễn giải các phép tính tổng bình phương nào từ SPSS, Giá trị ban đầu, khai thác hoặc phép quay?
  3. Có bất kỳ vấn đề nào khác mà tôi có thể đã bỏ qua?

Các cuộc gọi của tôi đến SPSS và R như sau:

SPSS:

FACTOR
/VARIABLES <variables>
/MISSING PAIRWISE
/ANALYSIS <variables>
/PRINT INITIAL KMO AIC EXTRACTION ROTATION
/FORMAT BLANK(.35)
/CRITERIA FACTORS(6) ITERATE(25)
/EXTRACTION ULS
/CRITERIA ITERATE(25)
/ROTATION PROMAX(4).

R:

library(psych)
fa.results <- fa(data, nfactors=6, rotate="promax",
scores=TRUE, fm="pa", oblique.scores=FALSE, max.iter=25)

Không thể kiểm tra vì tôi không sử dụng R, nhưng tôi nghi ngờ rằng tài liệu này có sai sót. fm = "pa" phải tương ứng với / EXTRACTION PAF. Ngoài ra, hãy thử so sánh các giải pháp trước bất kỳ phép quay nào, bởi vì sự khác biệt nhẹ trong thuật toán xoay có thể trộn lẫn với sự khác biệt của phương pháp trích xuất.
ttnphns

1
Cảm ơn đã dành một cái nhìn! Tôi sẽ thử so sánh các giải pháp trước khi xoay. Tôi nên đề cập rằng tôi đã thử cả / EXTRACTION ULS và / EXTRACTION PAF, và có rất ít sự khác biệt trong các tải (nhưng không thực sự gần với phương pháp R "pa"). Lý do tôi hiển thị / EXTRACTION ULS ở trên là vì đó là lệnh cung cấp các SSL khác nhau.
Oliver

1
Phương pháp trục chính và phương pháp bình phương tối thiểu không trọng số đôi khi có thể cho kết quả tương tự nhưng về cơ bản chúng khác nhau về mặt thuật toán. Tôi tin rằng sự tương đương giữa R và SPSS như sau: "pa" = PAF, "minres" = ULS, "gls" = GLS, "ml" = ML
ttnphns 17/03 '

1
Ngoài ra, kiểm tra điều trị các giá trị còn thiếu. Trong mã SPSS của bạn, bạn xóa chúng theo cặp. Trong mã R của bạn - ...?
ttnphns

Tôi đã so sánh các SSL xoay vòng trước từ R và chúng khớp với các SSL khai thác trong giải pháp ULS từ SPSS (thật không may, giải pháp PAF trong SPSS không cung cấp cho tôi các giá trị này). Tôi nghĩ rằng vòng quay promax dường như là thủ phạm. Chà, đó là hoặc cách SPSS in ra các SSL Xoay vòng. Có thể R đưa ra ước tính về tổng phương sai được giải thích bởi các SSL cuối cùng, trong khi SPSS cho tôi biết rằng không có ước tính nào như vậy là phù hợp.
Oliver

Câu trả lời:


21

Trước hết, tôi đề nghị ttnphns thứ hai để xem xét giải pháp trước khi xoay. Phân tích nhân tố khi được triển khai trong SPSS là một quy trình phức tạp với một số bước, so sánh kết quả của từng bước này sẽ giúp bạn xác định chính xác vấn đề.

Cụ thể bạn có thể chạy

FACTOR
/VARIABLES <variables>
/MISSING PAIRWISE
/ANALYSIS <variables>
/PRINT CORRELATION
/CRITERIA FACTORS(6) ITERATE(25)
/EXTRACTION ULS
/CRITERIA ITERATE(25)
/ROTATION NOROTATE.

để xem ma trận tương quan SPSS đang sử dụng để thực hiện phân tích nhân tố. Sau đó, trong R, tự chuẩn bị ma trận tương quan bằng cách chạy

r <- cor(data)

Bất kỳ sự khác biệt nào trong cách xử lý các giá trị thiếu sẽ được thấy rõ ở giai đoạn này. Khi bạn đã kiểm tra ma trận tương quan là như nhau, bạn có thể đưa nó vào hàm fa và chạy lại phân tích của mình:

fa.results <- fa(r, nfactors=6, rotate="promax",
scores=TRUE, fm="pa", oblique.scores=FALSE, max.iter=25)

Nếu bạn vẫn nhận được các kết quả khác nhau trong SPSS và R, vấn đề không thiếu các giá trị liên quan.

Tiếp theo, bạn có thể so sánh kết quả của phương pháp phân tích / trích xuất nhân tố.

FACTOR
/VARIABLES <variables>
/MISSING PAIRWISE
/ANALYSIS <variables>
/PRINT EXTRACTION
/FORMAT BLANK(.35)
/CRITERIA FACTORS(6) ITERATE(25)
/EXTRACTION ULS
/CRITERIA ITERATE(25)
/ROTATION NOROTATE.

fa.results <- fa(r, nfactors=6, rotate="none", 
scores=TRUE, fm="pa", oblique.scores=FALSE, max.iter=25)

Một lần nữa, so sánh các ma trận yếu tố / cộng đồng / tổng tải trọng bình phương. Ở đây bạn có thể mong đợi một số khác biệt nhỏ nhưng chắc chắn không phải là độ lớn mà bạn mô tả. Tất cả điều này sẽ cho bạn một ý tưởng rõ ràng hơn về những gì đang xảy ra.

Bây giờ, để trả lời trực tiếp ba câu hỏi của bạn:

  1. Theo kinh nghiệm của tôi, có thể thu được kết quả rất giống nhau, đôi khi sau khi dành một chút thời gian để tìm ra các thuật ngữ khác nhau và thay đổi các tham số. Tôi đã có vài lần chạy phân tích nhân tố trong cả SPSS và R (thường làm việc trong R và sau đó sao chép phân tích trong SPSS để chia sẻ nó với các đồng nghiệp) và luôn thu được kết quả cơ bản giống nhau. Do đó, tôi thường không mong đợi sự khác biệt lớn, điều này khiến tôi nghi ngờ vấn đề có thể là cụ thể đối với tập dữ liệu của bạn. Tuy nhiên, tôi đã nhanh chóng thử các lệnh bạn cung cấp trên tập dữ liệu tôi đã đặt xung quanh (đó là thang đo Likert) và sự khác biệt trên thực tế lớn hơn tôi đã từng sử dụng nhưng không lớn như những gì bạn mô tả. (Tôi có thể cập nhật câu trả lời của mình nếu tôi có thêm thời gian để chơi với điều này.)
  2. Hầu hết mọi người thường giải thích tổng tải trọng bình phương sau khi xoay theo tỷ lệ phương sai của giải thích theo từng yếu tố nhưng điều này không có ý nghĩa sau một vòng xoay xiên (đó là lý do tại sao nó không được báo cáo trong tâm lý và chỉ báo cáo SPSS các giá trị riêng trong trường hợp này - thậm chí có một chú thích nhỏ về nó trong đầu ra). Các giá trị riêng ban đầu được tính toán trước khi trích xuất bất kỳ yếu tố nào. Rõ ràng, họ không cho bạn biết bất cứ điều gì về tỷ lệ phương sai được giải thích bởi các yếu tố của bạn và thực sự không phải là tổng của tải trọng bình phương (chúng thường được sử dụng để quyết định số lượng các yếu tố cần giữ lại). Tuy nhiên, SPSS Trích xuất Sums của Squared Loadings Tuy nhiên, phù hợp với các tải trọng SS SS do tâm lý cung cấp .
  3. Đây là một phỏng đoán hoang dã ở giai đoạn này nhưng bạn đã kiểm tra xem quy trình trích xuất nhân tố có hội tụ trong 25 lần lặp không? Nếu xoay không hội tụ, SPSS không xuất bất kỳ ma trận cấu trúc / cấu trúc nào và bạn không thể bỏ lỡ nó nhưng nếu trích xuất không hội tụ, ma trận hệ số cuối cùng sẽ được hiển thị và SPSS vẫn tiếp tục quay vòng. Tuy nhiên, bạn sẽ thấy một ghi chú. Đã cố gắng trích xuất 6 yếu tố. Yêu cầu hơn 25 lần lặp. (Hội tụ = XXX). Khai thác đã bị chấm dứt. Giá trị Nếu giá trị hội tụ nhỏ (ví dụ như 0,005, điều kiện dừng mặc định là Ít hơn 0,0001,), nó vẫn không tính đến sự khác biệt mà bạn báo cáo nhưng nếu nó thực sự lớn thì có gì đó bệnh lý về dữ liệu của bạn.

2
Câu trả lời rất hay. Tôi sẽ đề nghị (nếu có thể) tác giả cung cấp một ma trận tương quan mẫu để xem rắc rối nằm ở đâu. Không nên quá khó khăn để làm mờ nó / làm cho nó đủ mơ hồ để chia sẻ dữ liệu. Ngoài ra, nếu người ta không thể tái tạo vấn đề khi bắt đầu trực tiếp với cùng một ma trận tương quan, một phần xác định vấn đề.
Andy W

Cảm ơn, đây là một câu trả lời tuyệt vời. Tôi sẽ thực hiện các bước này sau khi quay lại máy SPSS của mình. Đáp lại # 3, giải pháp này hội tụ trong 9 lần lặp, nhưng tôi sẽ ghi nhớ điều đó cho bất kỳ phân tích nào trong tương lai tôi làm. Thật hữu ích khi biết rằng sự khác biệt thường không lớn như tôi đã mô tả (Tôi cũng đang làm việc với dữ liệu thang đo Likert, 5 điểm).
Oliver

Trong trường hợp bất cứ ai khác tự hỏi, fachức năng trong R là từ psychgói. Các factanalchức năng từ gói cơ sở nên thực hiện tương tự, nhưng dù sao psychcũng đáng sử dụng cho các mục đích khác. Trên thực tế, vì đây là dữ liệu Likert, nên sẽ tốt hơn nếu sử dụng psychgói fa.polythay thế: xem tài liệu trợ giúp .
Nick Stauner

6

Gần đây tôi đã phát hiện ra rằng hầu hết các khác biệt về phân tích nhân tố giữa SPSS và R (với gói Tâm lý) đều được làm rõ khi dữ liệu được xử lý thiếu trong mỗi chương trình, ma trận tương quan hiển thị giống hệt nhau trong mỗi chương trình và không sử dụng phép xoay xiên.

Một sự khác biệt còn lại là trong chuỗi các giá trị hiển thị trong biểu đồ scree chỉ ra giá trị riêng sau khi trích xuất. Trong "scree (cor (mydata)") của R, các "yếu tố" này không khớp với các yếu tố được liệt kê trong bảng Giải thích phương sai của SPSS trong phần "Trích xuất tổng tải bình phương". Lưu ý rằng các "thành phần" của biểu đồ R scree phù hợp với biểu đồ scree của SPSS, cũng khớp với "Các giá trị ban đầu" của bảng giải thích phương sai.

Tôi cũng thấy rằng "Biến tỷ lệ" được giải thích bởi mỗi yếu tố là, trong R, đôi khi được báo cáo là (tỷ lệ cho một yếu tố nhất định) / (số lượng được giải thích bởi tất cả các yếu tố), trong khi ở thời điểm khác là (tỷ lệ cho một yếu tố nhất định) (số lượng các mục trong phân tích). Vì vậy, nếu bạn có được cái trước, thì, trong khi không phải là một trận đấu, ít nhất là tỷ lệ thuận và có thể lấy được từ những gì SPSS báo cáo trong phần "Trích xuất tổng số bình phương ...% của phương sai".

Tuy nhiên, việc giới thiệu xoay vòng xiên trong mỗi chương trình, tạo ra sự khác biệt lớn về tải trọng vật phẩm hoặc phương sai của các yếu tố giải thích rằng tôi không thể giải quyết.


1

Phương thức xoay mặc định trong R là oblimin, vì vậy điều này có thể sẽ gây ra sự khác biệt. Khi thử nghiệm chạy PAF / oblimin trong SPSS và R và bạn sẽ tìm thấy kết quả gần như giống hệt nhau.


0

Tôi không biết điều gì gây ra sự khác biệt trong tải mẫu, nhưng tôi cho rằng sự khác biệt về% của phương sai được giải thích là do: - có lẽ bạn đang giải thích phần đầu tiên (của 2 hoặc 3) của bảng phương sai được giải thích SPSS thực sự hiển thị kết quả phân tích thành phần chính. Phần thứ hai hiển thị kết quả cho các kết quả phân tích nhân tố không được bảo vệ và kết quả thứ ba sau khi xoay (nếu được sử dụng). - thực tế là hàm fa (hay chính xác hơn là phương thức in của nó) tính sai SSL cho các yếu tố xiên. Để có được% của tổng phương sai được giải thích theo hệ số, bạn nên tính tổng tải trọng cấu trúc bình phương theo hệ số và chia số đó cho số lượng biến. Tuy nhiên, bạn không thể tổng hợp các giá trị này (trong trường hợp xoay xiên) để lấy% phương sai được giải thích bởi tất cả các yếu tố. Để có được điều này,


Chào mừng đến với trang web, @AlesZiberna. Chúng tôi đang cố gắng xây dựng một kho lưu trữ thông tin thống kê vĩnh viễn dưới dạng câu hỏi & câu trả lời. Vì vậy, một điều chúng tôi lo lắng là linkrot. Bạn có thể cung cấp một cái nhìn tổng quan về thông tin tại liên kết trong trường hợp nó bị chết, và vì vậy độc giả có thể quyết định xem họ có muốn theo đuổi nó không?
gung - Phục hồi Monica

0

Câu trả lời này là phụ gia cho những người ở trên. Theo đề xuất của Gala trong câu trả lời của mình, trước tiên, người ta nên xác định xem các giải pháp được cung cấp bởi R (ví dụ: fa in psych) và SPSS có khác nhau trước khi xoay hay không. Nếu chúng giống nhau, thì hãy xem các cài đặt xoay trong mỗi chương trình. (Đối với SPSS, bạn có thể tìm thấy tất cả các cài đặt trong mục nhập thủ công tham chiếu cho FACTOR).

Một thiết lập quan trọng cần tìm là chuẩn hóa Kaiser . Theo mặc định, SPSS thực hiện chuẩn hóa Kaiser trong khi quay, trong khi một số chức năng R như 'fa' thì không. Bạn có thể kiểm soát cài đặt đó trong SPSS bằng cách chỉ định / CRITERIA = NOKAISER / KAISER, để xác minh xem nó có loại bỏ bất kỳ sự khác biệt nào giữa các kết quả với mỗi chương trình hay không.

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.