[fpr 1939] SASの学術的価値?

小野裕亮

(株)サスインスティチュートジャパン、テクニカルサポート
の小野と申します。

メールが長くなりますことをお許し下さい。


> >一体SASはどのようにpromax 回転しているのでしょうか?
> >SAS社がアルゴリズムを明かさないといってますが,
> >何か秘密があるのでしょうか?
  -- cut by Ono ------
>
>  アルゴリズムの公開についての堀さんの記事に対するSAS社あるいは
> SAS社関係者からのレスがないので、SAS社からの前向きのレスを期待して
> このメールを書きました。
>
> 日本女子大学心理学科
> 岡本安晴
> (金沢大学から転出しました)


ご指摘、有難うござます。

SASマニュアル(SAS/STAT User's Guide Version6 4th Edなど)において、
文献が明示的に記載されていないことを確認しました。

今の段階で把握している情報では、SAS/STATソフトウェアのFACTORプロシジャ
が使っているのは、Referenceに記載されている、、、、
Cureton,E.E. and Mulaik,S.A.(1975)
"The Weighted Varimax Rotation and the Promax Rotation"
Psychometrika,40,183-195
だと思われますが、まだ、正確な確認をとっていません。

なお、私は下記の論文も読んでいません。
> -- cut by Ono --
>Tataryn, Douglas J.; Wood, James M.; Gorsuch, Richard L.(1999).
>Setting the Value of k in Promax: A Monte Carlo Study.
>Educational & Psychological Measurement,  Vol. 59 Issue 3, p384, 8p
それに伴い、「普通」のプロマックス回転というものも、不明です。

計算方法についてはお示しすることができます。

簡単のため、5観測変数で2因子の結果をもとに、具体的に説明したいと思います。

申し訳ございませんが、SAS内部のソースコード(C言語のソースコード)
は非公開です。本当に細かいところの内部的な計算アルゴリズムやプログラ
ミング方法は、公開されていません。残念ながら、オープンソースではないため、
下記以上の情報公開は難しいと思われます。

しかしながら、ここでの数値例や計算式をもとに、その過程を追うことができます。
この情報をもとに、他のテクニックとの比較などの活発な議論が行われれば幸い
です。

FACTORプロシジャを実行すると、計算途中で求められた幾つかの行列は出力さ
れます。

----------------------------------------------------------
プロマックス回転する前の、ある直交回転をした後の因子パタンとして、
次のような行列Fが求まったとします。

行列: F
Rotated Factor Pattern

           FACTOR1   FACTOR2

X1        -0.01728   0.30012
X2        -0.10393   0.15316
X3         0.47062   0.07350
X4         0.06448   0.14678
X5         0.08411   0.20778

このときに使った直交変換行列をT0とします。

行列: T0
Orthogonal Transformation Matrix

              1         2
    1      0.93300   0.35986
    2     -0.35986   0.93300

----------------------------------------------------------
まず、ターゲット行列 F-tar を計算します。
*** この時、次のような!!! 2つ !!! の計算を行ないます。 ***

1 各行を、共通性(communality)の平方根で割る。
2 その後で、各列を、絶対値の最大値で割る。

----------------------------------------------------------
1の計算を行なうと、Fは次のような行列になります。
(この行列はFACTORプロシジャでは出力されていません)。

      FACTOR1   FACTOR2

X1   -0.05748    0.99835
X2   -0.56150    0.82748
X3    0.98802    0.15432
X4    0.40221    0.91555
X5    0.37521    0.92694

なお、直交回転したパターン行列の要素からも計算できますが、ここで
使用した共通性は次の通りです。

                    X1        X2        X3        X4        X5
Communality   0.090372  0.034258  0.226886  0.025703  0.050247

----------------------------------------------------------
次に、2の計算を行なうと次のような感じになります。
各列の最大値は、1列目が0.98802、2列目が0.99835です。
(この行列もFACTORプロシジャでは出力されていません)。

         FACTOR1    FACTOR2

X1      -0.05818    1.00000
X2      -0.56831    0.82885
X3       1.00000    0.15457
X4       0.40709    0.91706
X5       0.37976    0.92847

----------------------------------------------------------
上記2つの計算が終了した後、POWER= オプションに指定された数で、
累乗します。デフォルトは、3乗です(POWER=3)。この行列は出力され
ています。

行列: F-tar

Target Matrix for Procrustean Transformation

           FACTOR1   FACTOR2

X1        -0.00020   1.00000
X2        -0.18355   0.56940
X3         1.00000   0.00369
X4         0.06746   0.77126
X5         0.05477   0.80041

----------------------------------------------------------
次に、「このターゲット行列との差」の要素の2乗和を最小になるように
Fを線形変換させる行列Tを求めます。上で求めたターゲット行列をF-tar
とすると、この変換行列Tは
    inv(F`*F)*(F`*F-tar)
です。ここで、inv(x)はxの逆行列、x`はxの転置行列を表します。

行列: T
Procrustean Transformation Matrix

              1         2
    1      2.06029  -0.44497
    2     -0.09083   3.73048

この時、「直交回転前のパタン行列」に対する変換行列は、直交回転のときに
使った変換行列T0をかけて、

T0*T=
{1.8895645 0.9272935,
 -0.82616 3.6406647}

となります(FACTORプロシジャでは出力されません)。

さらに、「因子の分散は1である」という制約下における因子パタンにする
ため、"規準化"のための行列Nを求めます。この"規準化"のための行列Nは、
対角行列で、その要素はinv(T0*T)*inv(T`*T0`)の対角要素の平方根です。

N=sqrt( diag( inv(T0*T)*inv(T`*T0`) ))

この行列は、この例では、計算すると、

N=
{0.4913932         0,
        0             0.2697408}

となります(FACTORプロシジャでは出力されません)。

"T0*T*N"を求めると、次のような「因子の分散は1である」という制約下に
おける因子パタンをもとめるための変換行列が出ます。なお、この変換行
列は、直交回転前の因子パタンを変換するためのものです。

行列: T0*T*N
Normalized Oblique Transformation Matrix

              1         2
    1      0.92852   0.25013
    2     -0.40598   0.98204

ここでの"規準化(normalized)"は、「因子の分散を1にしますよ」といった意味で
す。

----------------------------------------------------------
最後のほうの説明がぐじゃぐじゃになりましたが、観察変量の分散共分散
行列(もしくは相関行列)をSigma、独自因子の行列をDとすると、
次のような式変形をしているだけです。

Sigma
  =   F0*F0`+D --> 直交回転前
  =   (F0*T0)*(T0`*F0`) + D    --> 直交回転
  =   (F0*T0*T)*inv(T)*inv(T`)*(T`*T0`*F0) + D  --> 最小2乗法
  =   (F0*T0*T*N)*inv(N)*inv(T)*inv(T`)*inv(N`)*(N`*T`*T0`*F0`) + D --> 因子
の分散を1に。

----------------------------------------------------------
因子間の相関行列は、次式です。
  inv(N)*inv(T)*inv(T`)*inv(N`)
これは、Inter-factor Correlationsという箇所に出力されます。

そして、因子パタンは次式です。
   F0*(T0*T*N)
= F*T*N
これは、Rotated Factor Pattern (Std Reg Coefs)という箇所に
出力されます。

----------------------------------------------------------
他の統計量に関する計算については省略します。
長い説明で、すみませんでした。
----------------------------------------------------------

付記:
バージョン8になっても、プロマックス回転に直接的に関係するオプション
は特に増えていません。

しかし、バージョン8.1から斜交および直交の「一般化Crawford-Ferguson
回転」を行なえるようになりました。(そのため、プロマックス回転前に行
なう直交回転のレパートリーは山のように増えました)。

また、最尤推定(METHOD=ML)を選択し、かつ、この一般化
Crawford-Ferguson族に属する回転を選択したとき、正規分布を
仮定したときの漸近的な信頼区間が算出できるようになりました。
(すでに、CEFAでは実現されていました)。

--- 以上です。


スレッド表示 著者別表示 日付順表示 トップページ

ここは心理学研究の基礎メーリングリストに投稿された過去の記事を掲載しているページです。