Інтерпретація розбіжностей між R та SPSS з аналітичним факторним аналізом


14

Я аспірант з інформатики. Я робив аналіз дослідницьких факторів для дослідницького проекту. Мої колеги (які ведуть проект) використовують SPSS, тоді як я вважаю за краще використовувати R. Це не мало значення, поки ми не виявили значної розбіжності між двома статистичними пакетами.

Ми використовуємо фактори основного осі як метод вилучення (будь ласка, зауважте, що я добре знаю різницю між PCA та факторним аналізом, і що ми не використовуємо PCA , принаймні, навмисно). З того, що я прочитав, це повинно відповідати методу «основний осі» в R, і як «головна вісь факторинг» або «незважений найменших квадратів» в SPSS, в відповідно до R документації . Ми використовуємо метод косого обертання (конкретно, promax ), тому що ми очікуємо корельованих факторів та інтерпретуємо матрицю шаблону .

Виконуючи дві процедури в R та SPSS, існують великі відмінності. Матриця малюнка дає різні навантаження. Хоча це дає більш-менш однаковий коефіцієнт змінним співвідношенням, існує різниця в 0,15 між відповідними навантаженнями, що, здається, більше, ніж можна було б очікувати від простої реалізації способу вилучення та промакс-обертання. Однак це не найдивовижніша різниця.

Сукупна дисперсія, пояснена факторами, становить приблизно 40% у результатах SPSS та 31% у результатах R. Це величезна різниця, і це призвело до того, що мої колеги хочуть використовувати SPSS замість R. У мене немає проблем з цим, але велика різниця змушує мене думати, що ми можемо трактувати щось неправильно, що є проблемою.

Забруднюючи води ще більше, SPSS повідомляє про різні типи поясненої дисперсії, коли ми виконуємо невагомі найменші квадрати фактори. Частка поясненої дисперсії за початковими власними значеннями становить 40%, тоді як частка поясненої дисперсії від суми вилучення квадратних навантажень (SSL) становить 33%. Це змушує мене думати, що початкові власні значення не є відповідним числом, на яке слід дивитись (я підозрюю, що це дисперсія, що пояснюється перед обертанням, хоча ця велика кількість є поза мною). Ще більше заплутаним є те, що SPSS також показує SSL обертання, але не обчислює відсоток поясненої дисперсії (SPSS каже мені, що наявність співвідносних факторів означає, що я не можу додати SSL, щоб знайти загальну дисперсію, що має сенс з математикою, яку я бачив). Повідомлені SSL з R не відповідають жодному з них, і R каже мені, що він описує 31% від загальної дисперсії. SSL R мають найбільшу відповідність SSL-ротації. Власні значення R з оригінальної матриці кореляції відповідають початковим власним значенням з SPSS.

Крім того, зауважте, що я розігрувався з використанням різних методів, і що ULS та PAF SPSS, схоже, відповідають методу ПА П-Р найближчим.

Мої конкретні запитання:

  1. Яку різницю я повинен очікувати між R та SPSS з реалізацією факторного аналізу?
  2. Яку із сум квадратних навантажень від SPSS я повинен тлумачити, початкові власні значення, видобуток чи обертання?
  3. Чи є інші проблеми, які я, можливо, не помітив?

Мої дзвінки до SPSS та R такі:

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)

Неможливо перевірити це, оскільки я не використовую R, але я підозрюю, що в документації є проміжок. fm = "pa" має відповідати / EXTRACTION PAF. Крім того, спробуйте порівняти розчини перед будь-яким обертанням, оскільки легкі відмінності в алгоритмах обертання можуть поєднуватися з відмінностями методу вилучення.
ttnphns

1
Дякуємо, що подивилися! Я спробую порівняти рішення перед обертанням. Я мушу зазначити, що я спробував і / EXTRACTION ULS, і / EXTRACTION PAF, і різниця в навантаженнях є дуже малою (але жоден із насправді не близький до методу R "pa"). Причина, яку я показую / EXTRACTION ULS вище, полягає в тому, що це команда, яка дає різні SSL.
Олівер

1
Метод основної осі та методи незважених найменших квадратів іноді можуть дати подібні результати, але алгоритмічно вони принципово відрізняються. Я вважаю, що еквіваленти між R та SPSS такі: "pa" = PAF, "minres" = ULS, "gls" = GLS, "ml" = ML
ttnphns

1
Також перевірте обробку відсутніх значень. У коді SPSS ви видаляєте їх попарно. У вас R код - ...?
ttnphns

Я порівняв попередньо обертові SSL з R, і вони відповідають екстракційним SSL в розчині ULS з SPSS (на жаль, рішення PAF у SPSS не дало мені цих значень). Я думаю, що винуватцем обертання promax здається. Ну, або це, або те, як SPSS виводить SSL обертання. Можливо, R робить оцінку загальної дисперсії, поясненої кінцевими SSL, тоді як SPSS каже мені, що така оцінка не підходить.
Олівер

Відповіді:


21

Перш за все, я друге рекомендую ttnphns переглянути рішення перед обертанням. Факторний аналіз під час його впровадження в SPSS - це складна процедура з декількома кроками, порівняння результатів кожного з цих етапів повинно допомогти вам визначити проблему.

Конкретно можна запустити

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

щоб побачити кореляційну матрицю SPSS використовується для проведення факторного аналізу. Потім у R підготуйте кореляційну матрицю самостійно, запустивши

r <- cor(data)

Будь-яка невідповідність способу обробки відсутніх значень повинна бути очевидною на цьому етапі. Після того, як ви перевірите, чи відповідає матриця кореляції, ви можете подати її до функції fa та запустити аналіз ще раз:

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

Якщо ви все одно отримаєте різні результати в SPSS та R, проблема не пропускає значення, пов’язані із значеннями.

Далі ви можете порівняти результати самого факторного аналізу / методу вилучення.

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)

Знову ж таки порівняйте факторні матриці / спільності / суму навантажень у квадраті. Тут ви можете очікувати невеликих відмінностей, але, безумовно, не від тієї величини, яку ви описуєте. Все це дало б вам чіткіше уявлення про те, що відбувається.

Тепер, щоб відповісти на три питання безпосередньо:

  1. На мій досвід, можна отримати дуже схожі результати, іноді витрачаючи деякий час на розбір різних термінологій та наведення параметрів. У мене було кілька разів проводити факторний аналіз і в SPSS, і в R (як правило, працюючи в R, а потім відтворювати аналіз в SPSS, щоб поділитися ним з колегами) і завжди отримував по суті однакові результати. Тому я б взагалі ні чекаю великих розбіжностей, через що я підозрюю, що проблема може бути специфічною для вашого набору даних. Проте я швидко спробував команди, які ви подали на наборі даних, в якому я лежав (це шкала Лікерта), і відмінності насправді були більшими, ніж я звик, але не такі великі, як ті, які ви описуєте. (Я можу оновити свою відповідь, якщо отримаю більше часу, щоб пограти з цим.)
  2. Здебільшого люди трактують суму навантажень у квадраті після обертання як "частку дисперсії, що пояснюється" кожним фактором, але це не має сенсу після косого обертання (саме тому про це взагалі не повідомляється в психіці, а лише у звітах SPSS власні значення в цьому випадку - про це є навіть невелика виноска у висновку). Початкові власні значення обчислюються до вилучення будь-яких факторів. Очевидно, вони нічого не розповідають про частку дисперсії, пояснену вашими факторами, і насправді не є "сумою навантажень у квадраті" (їх часто використовують для визначення кількості факторів, які потрібно зберегти). SPSS "Сума видобутку навантажень у квадраті" повинна, однак, відповідати "SS завантаженням", передбаченим психікою .
  3. Це дика здогадка на цьому етапі, але чи перевірили ви, чи збіглася процедура вилучення фактора за 25 ітерацій? Якщо обертання не вдається конвергувати, SPSS не виводить жодної матриці структури / структури, і ви не можете її пропустити, але якщо видобуток не зможе конвергуватися, остання факторна матриця все-таки відображається, і SPSS блаженно продовжує обертання. Однак ви побачите примітку «а. Спроба витягти 6 факторів. Потрібно більше 25 повторень. (Конвергенція = XXX). Видобуток припинено ». Якщо значення конвергенції невелике (щось на зразок .005, умова зупинки за замовчуванням "менше .0001"), воно все одно не враховуватиме розбіжності, про які ви повідомляєте, але якщо воно дійсно велике, у ваших даних є щось патологічне.

2
Дуже приємна відповідь. Я збирався запропонувати (якщо можливо) автор надати зразкову кореляційну матрицю, щоб побачити, де криється проблема. Не повинно бути занадто складно підробити це / зробити досить неоднозначним обмін даними. Крім того, якщо не вдається відтворити проблему при запуску безпосередньо з тієї ж кореляційної матриці, яка частково ідентифікує проблему.
Andy W

Дякую, це фантастична відповідь. Я пройду ці кроки, як тільки повернусь до своєї машини SPSS. У відповідь на №3 рішення збігається за 9 ітерацій, але я маю це на увазі для будь-яких майбутніх аналізів, які я роблю. Було дуже корисно знати, що різниці зазвичай не такі великі, як я описав (я також працюю з даними шкали Лікерта, 5-бальна).
Олівер

Якщо хтось цікавиться, faфункція в R - від psychпакета. factanalФункція з базового пакету необхідно виконати аналогічно, але psychдобре варто використовувати для інших цілей , в будь-якому випадку. Насправді, оскільки це дані Likert, було б розумно використовувати замість цього psychпакета fa.poly: дивіться довідкову документацію .
Нік Стаунер

6

Нещодавно я виявив, що більшість розбіжностей аналізу факторів між SPSS та R (з пакетом Psych) виявляються, коли дані обробляються відсутніми в списку в кожній програмі, кореляційна матриця виявляється абсолютно однаковою для кожної, і не застосовується косою поворотом.

Одне залишилося розбіжність у ряді значень, які відображаються у графіку обсипу, що вказує власні значення після вилучення. У "екрані (кор (міда))" R "ці" фактори "не відповідають тим, які вказані в таблиці пояснень варіабельності SPSS у розділі" Суми вилучення квадратних навантажень ". Зауважте, що "компоненти" ділянки екрану R відповідають загальній графіці обстеження SPSS, яка також відповідає таблиці "Початкові власні значення".

Я також виявив, що "Варіант пропорцій", що пояснюється кожним фактором, в R іноді повідомляється як (частка для даного фактора) / (сума, що пояснюється всіма чинниками), а в інший час - (пропорція для заданого фактора) (кількість елементів в аналізі). Тож якщо ви отримаєте перше, воно, хоча і не відповідає, принаймні пропорційне та виходить із того, про що повідомляє SPSS у розділі "Суми вилучення квадратних навантажень ...% від варіації".

Впровадження обертання обліміна в кожній програмі створює значні розбіжності в завантаженні елементів або різниці факторів, пояснених, що я не змогла вирішити.


1

Метод обертання за замовчуванням у R - це наближений, тому це, ймовірно, спричинить різницю. Як тест запустіть PAF / oblimin в SPSS і R, і ви знайдете майже однакові результати.


0

Я не знаю, що викликає відмінності в навантаженні шаблону, але я припускаю, що різниця у% поясненої дисперсії пояснюється: - Ви, можливо, інтерпретуєте першу частину (2 або 3) таблиці поясненої дисперсії SPSS, яка насправді показує результати аналізу основних компонентів. Друга частина показує результати для неврахованих результатів аналізу факторів, а третя результати після обертання (якщо вони використовуються). - той факт, що функція fa (а точніше її метод друку) неправильно обчислює SSL для косих факторів. Щоб отримати% від загальної дисперсії, пояснену фактором, слід обчислити суму квадратних структурних навантажень на коефіцієнт і поділити їх на кількість змінних. Однак ви не можете підсумовувати ці підсумки (у випадку косих поворотів), щоб отримати% дисперсії, пояснену всіма чинниками. Щоб отримати це,


Ласкаво просимо на сайт, @AlesZiberna. Ми намагаємось створити постійний сховище статистичної інформації у вигляді запитань та відповідей. Тож одне, про що ми хвилюємось - це linkrot. Чи можете ви надати огляд інформації за посиланням, якщо вона загине, і тому читачі можуть вирішити, чи хочуть вони її шукати?
gung - Відновіть Моніку

0

Ця відповідь є доповненням до наведених вище. Як запропонував Гала у своїй відповіді, спершу слід визначити, чи рішення, надані R (наприклад, fa в психіці) та SPSS, різняться перед обертанням. Якщо вони однакові, то подивіться налаштування обертання в кожній програмі. (Для SPSS ви можете знайти всі налаштування в посібнику з посилань на FACTOR).

Одним з важливих параметрів, на який слід звернути увагу, є нормалізація Кайзера . За замовчуванням SPSS робить нормалізацію Кайзера під час обертання, тоді як деякі функції R, такі як 'fa', не роблять. Ви можете керувати цим параметром у SPSS, вказавши / CRITERIA = NOKAISER / KAISER, щоб перевірити, чи не усуває це розбіжність між результатами для кожної програми.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.