探索的因子分析によるRとSPSS間の矛盾の解釈


14

私はコンピューターサイエンスの大学院生です。私は研究プロジェクトのためにいくつかの探索的因子分析を行ってきました。私の同僚(プロジェクトを率いる)はSPSSを使用しますが、私はRを使用することを好みます。これは、2つの統計パッケージ間に大きな不一致を発見するまで問題ではありませんでした。

抽出方法として主軸ファクタリングを使用しています(PCAと因子分析の違いを十分に認識しており、少なくとも意図的にPCAを使用しいないことに注意してください)。私が読んだことから、これはRの「主軸」メソッド、およびRのドキュメントよると SPSSの「主軸因数分解」または「非加重最小二乗」のいずれかに対応するはずです。相関因子を期待し、パターンマトリックスを解釈しているため、斜め回転法(具体的にはpromax)を使用しています。

RとSPSSで2つの手順を実行すると、大きな違いがあります。パターン行列はさまざまな負荷を与えます。これにより、変数関係にほぼ同じ要因が与えられますが、対応する負荷には最大0.15の差があります。これは、抽出方法とプロマックス回転の異なる実装によって予想されるよりも大きいようです。しかし、それは最も驚くべき違いではありません。

要因によって説明される累積分散は、SPSS結果で約40%、R結果で31%です。これは大きな違いであり、Rの代わりにSPSSを使用することを同僚に求めています。これには問題はありませんが、大きな違いがあるため、何かを間違って解釈している可能性があると思います。これは問題です。

SPSSは、水をさらに濁らせて、非加重最小二乗ファクタリングを実行すると、さまざまな種類の説明された分散を報告します。初期固有値による説明された分散の割合は40%ですが、抽出平方和(SSL)からの説明された分散の割合は33%です。これにより、初期固有値は見るのに適切な数ではないと思うようになります(これは回転の前に説明された分散であると思われますが、それは非常に大きいのですが)。さらに紛らわしいことに、SPSSはRotation SSLも表示しますが、説明された分散の割合を計算しません(相関係数があるため、SSLを追加して合計分散を見つけることができないことを教えてくれます。Rから報告されたSSLはこれらのいずれにも一致せず、Rは合計分散の31%を表すと教えてくれます。RのSSLは、ローテーションSSLと最も密接に一致します。元の相関行列からのRの固有値は、SPSSからの初期固有値と一致します。

また、私はさまざまな方法を使用して遊んでいましたが、SPSSのULSとPAFはRのPA方法に最も近いようです。

私の具体的な質問:

  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

Rの事前回転SSLを比較しましたが、SPSSのULSソリューションの抽出SSLと一致しています(残念ながら、SPSSのPAFソリューションはこれらの値を提供しませんでした)。プロマックスの回転が原因であると思われます。まあ、それか、SPSSがローテーションSSLを出力する方法のどちらかです。Rは最終的なSSLによって説明される合計分散の推定値を作成するかもしれませんが、SPSSはそのような推定値は適切ではないと教えてくれます。
オリバー

回答:


21

まず、回転の前にソリューションを確認することを2番目に推奨します。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)

繰り返しますが、因子行列/群集/二乗負荷の合計を比較します。ここでは、わずかな違いを期待できますが、あなたが説明したほどの違いはありません。これにより、何が起こっているのかがより明確にわかります。

次に、3つの質問に直接回答します。

  1. 私の経験では、異なる用語を理解し、パラメーターをいじるのにしばらく時間を費やした後で、非常に類似した結果を得ることができます。SPSSとRの両方で因子分析を実行する機会が何度かあり(通常はRで作業し、その後SPSSで分析を再現して同僚と共有します)、常に本質的に同じ結果が得られました。したがって、通常大きな違いはないと思いますが、これは問題がデータセットに固有のものであると疑うことにつながります。しかし、私が横たわっているデータセットであなたが提供したコマンドをすばやく試しました(リッカートスケールです)。実際、違いは私が慣れているよりも大きく、あなたが説明したほど大きくはありませんでした。(これで遊ぶ時間が増えたら、答えを更新するかもしれません。)
  2. ほとんどの場合、人々は回転後の二乗荷重の合計を各要因によって説明される「分散の割合」と解釈しますが、これは斜め回転の後では意味がありません(これは心理学ではまったく報告されておらず、SPSSのみの報告ですこの場合の固有値–出力にはそれに関する少しの脚注さえあります)。初期固有値は、因子抽出の前に計算されます。明らかに、彼らはあなたの要因によって説明された分散の割合について何も伝えず、実際には「二乗負荷の合計」でもありません(それらはしばしば保持する要因の数を決定するために使用されます)。SPSS「乗負荷量の抽出の合計は、」しかし、「SS負荷」が提供する一致する必要がありサイケを
  3. これはこの段階では大した推測ではありませんが、因子抽出手順が25回の反復で収束したかどうかを確認しましたか?回転が収束に失敗した場合、SPSSはパターン/構造マトリックスを出力せず、見逃すことはできませんが、抽出が収束に失敗した場合でも、最後の因子マトリックスが表示され、SPSSは回転を快く続行します。ただし、「a。6つの要因を抽出しようとしました。25回以上の反復が必要です。(収束= XXX)。収束値が小さい場合(.005のようなもの、デフォルトの停止条件は「.0001未満」)、報告する差異はまだ考慮されませんが、それが本当に大きい場合は、何か病理学的なものがあります。あなたのデータについて。

2
とてもいい答えです。(可能であれば)著者がサンプルの相関行列を提供して、問題がどこにあるかを確認することを提案します。データを共有するのに十分なほど曖昧にする/ファッジするのが難しすぎてはいけません。また、問題を部分的に特定する同じ相関行列で直接開始したときに問題を再現できない場合。
アンディW

ありがとう、これは素晴らしい答えです。SPSSマシンに戻ったら、これらの手順を実行します。#3に対応して、ソリューションは9回の反復で収束しますが、今後の分析ではこのことを念頭に置いています。違いは通常、私が説明したほど大きくないことを知ることは非常に役に立ちました(5ポイントのリッカートスケールデータも使用しています)。
オリバー

他の誰かが疑問に思う場合fa、R の関数はpsychパッケージからのものです。factanal基本パッケージの関数も同様に実行する必要がpsychありますが、とにかく他の目的に使用する価値があります。実際、これはリッカートデータなので、代わりにpsychパッケージのを使用するのが賢明です。ヘルプドキュメントをfa.poly参照してください。
ニックスタウナー

6

最近、SPSSとR(Psychパッケージを使用)の間のほとんどの因子分析の不一致は、各プログラムでデータがリストごとに欠落している場合に解消され、相関行列はそれぞれ同じになり、斜め回転は使用されないことがわかりました。

残りの不一致の1つは、抽出後の固有値を示すスクリープロットに表示される一連の値にあります。Rの「scree(cor(mydata))」では、これらの「要因」は、「二乗荷重の抽出合計」の下のSPSSの分散説明表にリストされているものと一致しません。Rスクリープロットの「コンポーネント」はSPSSのスクリープロットと一致し、Variance Explainedテーブルの「Initial Eigenvalues」とも一致することに注意してください。

また、各因子によって説明される「比例変数」は、Rで(特定の因子の比率)/(すべての因子によって説明される量)として報告されることもありますが、それ以外の場合(比率与えられた因子に対して)(分析のアイテムの数)。したがって、前者を取得した場合、一致ではありませんが、SPSSが「2乗荷重の抽出合計...%の分散」で報告するものに少なくとも比例し、そこから導出できます。

ただし、各プログラムにオブリミンローテーションを導入すると、アイテムのロードにかなりの不一致が生じたり、解決できなかった要因の変動が説明されたりします。


1

Rのデフォルトの回転方法はobliminであるため、これにより違いが生じる可能性があります。テストとして、SPSSとRでPAF / obliminを実行すると、ほぼ同じ結果が得られます。


0

パターンの負荷の違いの原因はわかりませんが、説明された分散の%の違いは次の理由によるものと想定しています。主成分分析の結果。2番目の部分は、回転されていない因子分析の結果と、回転後の3番目の結果(使用されている場合)の結果を示しています。-fa関数(より正確にはそのprintメソッド)が斜めの因子に対してSSLを誤って計算するという事実。因子によって説明された総分散の%を取得するには、因子による構造負荷の平方和を計算し、変数の数で除算する必要があります。ただし、これらを合計して(斜め回転の場合)、すべての要因によって説明される分散の%を取得することはできません。これを取得するには、


サイト@AlesZibernaへようこそ。質問と回答の形式で統計情報の永続的なリポジトリを構築しようとしています。ですから、私たちが心配しているのはlinkrotです。リンクが切れた場合に、リンクで情報の概要を提供してください。そうすれば、読者は情報を追求するかどうかを判断できますか?
GUNG -復活モニカ

0

この回答は、上記の回答に追加されます。Galaの答えで示唆されているように、ローテーションの前にR(例えば、精神のfa)とSPSSが提供するソリューションが異なるかどうかを最初に判断する必要があります。同じ場合は、各プログラムの回転設定を確認してください。(SPSSの場合、FACTORのリファレンスマニュアルエントリですべての設定を見つけることができます)。

探すべき重要な設定の1つは、カイザー正規化です。デフォルトでは、SPSSは回転中にKaiser正規化を行いますが、「fa」などの一部の R関数は行いません。/ CRITERIA = NOKAISER / KAISERを指定してSPSSの設定を制御し、各プログラムの結果の不一致を排除するかどうかを確認できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.