Интерпретация расхождений между R и SPSS с помощью исследовательского факторного анализа

14

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

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

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

Суммарная дисперсия, объясняемая факторами, составляет около 40% в результатах SPSS и 31% в результатах R. Это огромная разница, и это привело к тому, что мои коллеги захотели использовать SPSS вместо R. У меня нет проблем с этим, но такая большая разница заставляет меня думать, что мы можем неправильно что-то интерпретировать, что является проблемой.

Еще больше запутывая воды, SPSS сообщает о различных типах объясненной дисперсии, когда мы запускаем невзвешенный коэффициент наименьших квадратов. Доля объясненной дисперсии по начальным собственным значениям составляет 40%, тогда как доля объясненной дисперсии из сумм извлечения квадратов нагрузок (SSL) составляет 33%. Это заставляет меня думать, что начальные собственные значения не являются подходящим числом для просмотра (я подозреваю, что это дисперсия, объясненная до вращения, хотя она настолько велика, что мне не подходит). Еще более запутанно то, что SPSS также показывает Rotation SSL, но не вычисляет процент объясненной дисперсии (SPSS говорит мне, что наличие коррелированных факторов означает, что я не могу добавить SSL, чтобы найти общую дисперсию, что имеет смысл с математикой, которую я видел). Сообщенные SSL от R не соответствуют ни одному из них, и R говорит мне, что он описывает 31% от общей дисперсии. Rs SSL наиболее точно соответствуют Rotation SSL. Собственные значения R из исходной корреляционной матрицы совпадают с начальными собственными значениями из SPSS.

Кроме того, обратите внимание, что я поиграл с использованием различных методов, и что ULS и PAF SPSS, кажется, соответствуют методу PA R ближе всего.

Мои конкретные вопросы:

  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).

Р:

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 распечатывает Rotation 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 «Суммы извлечения квадратов нагрузок» должны соответствовать «нагрузкам СС», предоставленным Psych .
  3. На этом этапе это дикое предположение, но проверяли ли вы, что процедура извлечения фактора сходится за 25 итераций? Если вращение не сходится, SPSS не выводит какую-либо матрицу структуры / структуры, и вы не можете пропустить ее, но если извлечение не сходится, тем не менее отображается последняя матрица факторов, и SPSS блаженно продолжает вращение. Однако вы бы увидели примечание «а. Попытка извлечь 6 факторов. Требуется более 25 итераций. (Конвергенция = XXX). Извлечение было прекращено ». Если значение сходимости мало (что-то вроде .005, условие остановки по умолчанию« меньше, чем .0001 »), оно все равно не будет учитывать несоответствия, о которых вы сообщаете, но если оно действительно велико, есть что-то патологическое о ваших данных.
гала
источник
2
Очень хороший ответ. Я собирался предложить (если это возможно) автору предоставить образец корреляционной матрицы, чтобы увидеть, в чем проблема. Не должно быть слишком сложно обмануть / сделать его достаточно неоднозначным для обмена данными. Также, если не удается воспроизвести проблему при запуске непосредственно с той же корреляционной матрицей, которая частично идентифицирует проблему.
Энди W
Спасибо, это фантастический ответ. Я выполню эти шаги, как только вернусь к своей машине SPSS. В ответ на № 3 решение сходится за 9 итераций, но я буду помнить об этом при любом будущем анализе, который я делаю. Было очень полезно знать, что различия, как правило, не так велики, как я описал (я также работаю с данными шкалы Лайкерта, 5 баллов).
Оливер
Если кому-то еще интересно, faфункция в R из psychпакета. factanalФункция из базового пакета необходимо выполнить аналогично, но psychхорошо стоит использовать для других целей , в любом случае. Фактически, поскольку это данные Ликерта, было бы разумно использовать вместо этого psychпакет fa.poly: см. Справочную документацию .
Ник Стаунер
6

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

Одно из оставшихся расхождений заключается в серии значений, которые отображаются на графике осыпей, указывая на собственные значения после извлечения. В «scree (cor (mydata))» R эти «факторы» не соответствуют тем, которые перечислены в таблице объяснения отклонений SPSS в разделе «Суммы извлечения квадратов нагрузок». Обратите внимание, что «компоненты» графика R scree соответствуют графику экрана SPSS, который также соответствует «Начальным собственным значениям» таблицы объяснения отклонений.

Я также обнаружил, что «Пропорция Var», объясняемая каждым фактором, в R иногда указывается как (пропорция для данного фактора) / (сумма, объясняемая всеми факторами), тогда как в других случаях это (пропорция для данного фактора) (количество элементов в анализе). Поэтому, если вы получите первое, оно, хотя и не совпадает, по крайней мере пропорционально и выводимо из того, что SPSS сообщает в разделе «Суммы извлечения квадратов нагрузок ...% от отклонения».

Однако введение поворота oblimin в каждой программе приводит к значительным расхождениям в загрузке элементов или дисперсии факторов, которые я не смог устранить.

rolando2
источник
1

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

Стефан Домбровский
источник
0

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

Алеш Жиберна
источник
Добро пожаловать на сайт @AlesZiberna. Мы пытаемся создать постоянное хранилище статистической информации в форме вопросов и ответов. Итак, одна вещь, о которой мы беспокоимся, это linkrot. Не могли бы вы предоставить обзор информации по ссылке, если она не работает, и чтобы читатели могли решить, хотят ли они ее использовать?
gung - Восстановить Монику
0

Этот ответ является дополнением к приведенным выше. Как предполагает Гала в своем ответе, нужно сначала определить, отличаются ли решения, предоставляемые R (например, fa in psych) и SPSS, до вращения. Если они одинаковые, посмотрите на параметры вращения в каждой программе. (Для SPSS вы можете найти все настройки в справочном руководстве для FACTOR).

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

AlexR
источник