SPSS ときど記(81〜90)

SPSSを使っていてトラぶったところや変な出力や裏技表技の便利な使い方を中心に書き留めてみる。何回話題があるかわからですが,時々書きます。(Keizo Hori
最終更新日: (2000/9/29から)

(71)〜(80) ときど記(メニュー)へ (91)〜(100)

  1. SPSS ときど記(90) 2001/ 4/ 4 因子分析 高次因子分析と高次因子のもとの変数の因子負荷量
  2. SPSS ときど記(89) 2001/ 4/ 2 因子分析 因子負荷量を入力しての分析(2)syntax編
  3. SPSS ときど記(88) 2001/ 2/19 マクロ 四分相関係数
  4. SPSS ときど記(87) 2000/12/19 因子分析 カテゴリーデータの因子分析
  5. SPSS ときど記(86) 2000/11/24 10.1 SPSS 10.1 日本語版は12月
  6. SPSS ときど記(85) 2000/11/17 因子分析 日心ワークショップ因子分析の基本問題
  7. SPSS ときど記(84) 2000/11/ 1 因子分析 ML, ULS の「1.0 より大きい 1 つまたは複数の共通性推定値が反復間に発生しました」
  8. SPSS ときど記(83) 2000/10/27 因子分析 ML, ULS の「Hessian が正値ではありませんでした」
  9. SPSS ときど記(82) 2000/10/ 7 SPSS SPSSと心理学の統計処理
  10. SPSS ときど記(81) 2000/ 9/29 因子分析 メニューとsyntax での既定値の違い

SPSS ときど記(90) 2001/ 4/ 4

因子分析 高次因子分析と高次因子のもとの変数の因子負荷量

高次因子の求め方は次のようになる。
(1)斜交回転解を求める。oblimin(0)がよいが,promax でもよい。

(2)(1)の解の因子間相関行列を因子分析する。
(この場合,(a)varimax 回転をする (b)斜交回転をするの2つがありうる。

(3)(1)の(回転後の)因子パタン行列×(2)の(回転後の)因子パタン行列を求めると,高次因子のもとの変数の因子負荷量(因子パタン行列)を求めることができる。

行列のかけ算はexcel などの表計算ソフトを使うとよい。excel で計算する場合は,数学三角関数のMMULT を使います。このとき,配列数式を使うので,知らない人はhelpの「配列数式とその入力方法について」などを読んでください。

(4)Thompson(1990),Johnson and Johnson(1995,2000)ではそのあとさらにvarimax回転をしているが,その必要があるかどうかは疑問。もちろん回転しないのがGorsuch(1983)の方式。


*Gorsuch(1983). p100 ability 24 data.
matrix data var= ROWTYPE_ v1 V2 V5 To v26/format =free .
begin data
CORR 1
CORR 0.3258 1
CORR 0.3277 0.2751 1
CORR 0.3416 0.228 0.6217 1
CORR 0.3091 0.1595 0.6539 0.7186 1
CORR 0.3261 0.156 0.5739 0.5205 0.6327 1
CORR 0.3171 0.1947 0.7203 0.7145 0.6853 0.5367 1
CORR 0.1042 0.0664 0.3142 0.2089 0.2539 0.2966 0.1787 1
CORR 0.306 0.1509 0.3425 0.3596 0.248 0.2936 0.2871 0.4676 1
CORR 0.3082 0.1675 0.21 0.1042 0.1981 0.2905 0.122 0.5864 0.4225 1
CORR 0.4868 0.2479 0.3434 0.3144 0.3556 0.4051 0.2718 0.4183 0.5271 0.5284 1
CORR 0.1297 0.0819 0.2614 0.2863 0.2332 0.2427 0.2499 0.157 0.3239 0.131 0.1935 1
CORR 0.2228 0.1349 0.2191 0.249 0.1573 0.1698 0.2133 0.15 0.2384 0.1648 0.1381 0.387 1
CORR 0.4194 0.2892 0.1768 0.2882 0.2007 0.2987 0.236 0.137 0.3144 0.1284 0.2771 0.3817 0.3133 1
CORR 0.169 0.011 0.2127 0.2758 0.2506 0.2707 0.2851 0.3013 0.3571 0.279 0.1906 0.3721 0.3464 0.3395 1
CORR 0.3641 0.2639 0.2593 0.1672 0.1756 0.2576 0.2126 0.3198 0.3463 0.3478 0.3254 0.1987 0.3181 0.3549 0.4524 1
CORR 0.2672 0.1104 0.1957 0.251 0.2414 0.2613 0.2765 0.1989 0.2897 0.1089 0.2523 0.2187 0.1833 0.2538 0.3274 0.3578 1
CORR 0.3601 0.2944 0.4 0.4332 0.4585 0.4303 0.4515 0.1619 0.2035 0.2526 0.2476 0.309 0.2631 0.3939 0.2785 0.3048 0.1702 1
CORR 0.3706 0.2937 0.3192 0.2632 0.3144 0.3608 0.272 0.4018 0.3964 0.3572 0.4309 0.1823 0.2322 0.3541 0.1889 0.357 0.3313 0.4066 1
CORR 0.4137 0.2344 0.4446 0.3893 0.4005 0.3632 0.4917 0.1549 0.317 0.2026 0.2901 0.2494 0.2455 0.2912 0.2958 0.3178 0.3468 0.477 0.374 1
CORR 0.4687 0.3411 0.434 0.4324 0.408 0.4941 0.4958 0.2553 0.251 0.3538 0.3836 0.2508 0.2524 0.3548 0.3 0.2671 0.2982 0.5152 0.4473 0.5079 1
CORR 0.2734 0.2059 0.4156 0.4329 0.44 0.3886 0.4177 0.5294 0.4112 0.4146 0.357 0.2945 0.1609 0.2702 0.3429 0.405 0.3737 0.3691 0.4481 0.3778 0.4311 1
CORR 0.399 0.3128 0.2489 0.2684 0.2272 0.3727 0.1766 -0.075 0.0853 0.1436 0.3162 0.1771 0.0669 0.2619 0.1761 0.2106 0.3118 0.3073 0.1645 0.2555 0.3865 0.2026 1
CORR 0.4651 0.2272 0.2336 0.3304 0.3408 0.385 0.3166 0.0908 0.1101 0.1687 0.3378 0.0621 0.1261 0.3389 0.1934 0.2528 0.1346 0.3458 0.3519 0.379 0.3365 0.2533 0.2989 1
N 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300
end data.


*Gorsuch(1983) promax解 k=4 p193.
FACTOR
/matrix=in (cor=*)
/criteria factors(4)
/extraction paf
/PRINT EXTRACTION ROTATION
/ROTATION promax(4).

*求めた因子間相関行列を入力し分析(この場合1因子なので回転はなし)
matrix data var= v1 to v4 /format =free full /contents=corr.
begin data
1.000 .570 .454 .519
.570 1.000 .494 .571
.454 .494 1.000 .520
.519 .571 .520 1.000
end data.

FACTOR
/matrix=in (cor=*) /ANALYSIS v1 to v4
/PRINT INITIAL EXTRACTION
/CRITERIA FACTORS(1) ITERATE(25)
/EXTRACTION paf
/CRITERIA ITERATE(25).

*求めた行列の積は次のようになる。(転置してある)
Data LIST FREE/rowtype_ (a8) factor_ (f2.0)v1 v2 v5 to v26.
begin data
FACTOR 1 0.550369 0.34434 0.568516 0.577882 0.562499 0.578365 0.57851 0.415003 0.507903 0.433495 0.539466 0.408637 0.378618 0.508985 0.473141 0.507821 0.420233 0.563508 0.544556 0.562218 0.618273 0.579059 0.388517 0.438807
end data.
exec.

《引用文献》
Gorsuch, R. L. (1983). Factor analysis (2nd ed.). Hillsdale, NJ: Lawrence Erlbaum.

Johnson, W. L., & Johnson, A. M. (1995). Using SAS/PC for higher order factoring. Educational and Psychological Measurement, 55(3), 429-434.

Johnson, W. L., & Johnson, A. M. (2000). Using spss/pc for higher order factoring. Educational & Psychological Measurement, 60(4), 648-649

Thompson, B. (1990). SECONDOR: A program that computes a second-order principal components analysis and various interpretation aids. Educational and Psychological Measurement, 50, 575-580.

メニューへ  トップへ (91)へ

SPSS ときど記(89) 2001/ 4/ 2

因子分析 因子負荷量を入力しての分析(2)syntax編

SPSS ときど記( 5) 2000/ 4/ 9 因子分析 因子負荷量を入力しての分析ではデータ窓から因子負荷量行列の入れ方を示した。
次のように指定する。最初の2つの変数 rowtype_ (a8) FACTOR_ (f2.0) が重要である。
----------------------------------------------
Data LIST FREE
/rowtype_ (a8) FACTOR_ (f2.0) v1 v2 v3 v4.
begin data
FACTOR 1 0.563799 0.612381 0.52143 0.565498
FACTOR 2 0.333528 0.320136 0.306499 0.295692
end data.
----------------------------------------------

matrix では入力できない。rowtype_ に factor が許されない。
matrix data var=rowtype_ factor_ v1 to v4 /format =free full .
begin data
FACTOR 1 0.563799 0.612381 0.52143 0.565498
FACTOR 2 0.333528 0.320136 0.306499 0.295692
end data.

を実行すると次のエラーメッセージがでる。

>Warning # 16795. Command name: MATRIX DATA
>データの読み込み中、MATRIX DATA コマンドが、変数 ROWTYPE_に対する認
>識されない値に出会いました。正しい ROWTYPE_の値は以下のとおりです。
>N_SCALAR、N_VECTOR、N_MATRIX、MEAN、STDDEV、MSE、DFE、
>MAT、COV、CORR、COUNT、PROX。さらに、SD は STDDEV に対する
>同義語として認識され、N は N_VECTOR に対する同義語として認識されます。
>レコードは無視されます。

The error occurred on record number 1 while reading row type FACTOR
----------------
つまり,
FACTOR

/matrix=in (fac=*)

と行列入力の命令だが,SPSS的には因子負荷量は行列ではない。

メニューへ  トップへ (90)へ

SPSS ときど記(88) 2001/ 2/19

因子分析 マクロ 四分相関 tetrachoric correlation

前回,多分相関(polychoric correlation) のvba を紹介したのですが,それより簡単な四分相関を求めるマクロがすでにありました。かなりガンバッテマクロにしてますね。私がvba にしたのと元は同じですね。 わたしのvbaのところのリンク. tetrachric correlationpolychoric chorrelation を参考にしてください。

《追記》 2001.4.30
SPSS ときど記(95) 2001/ 4/30 に別の四分相関マクロを紹介した。

メニューへ  トップへ (89)へ

SPSS ときど記(87) 2000/12/19

因子分析 カテゴリーデータの因子分析

spss 10.1日本語版はまだ届いてません。SPSSジャパン側でサーバー用と決めているのでしょうか?

さて,今回は反則技です。SPSSに期待していたのですが,なかなかサポートしないようなので,Excel vbaで組んでしまいました。もちろん既にSASでは計算するものです。

SPSS ときど記(2) 2000/3/29〜2000/4/7 CATPCA(categories)において期待していたものといっていたのは,Lisrel のPrelis で処理する,polychoric correlation(多分相関)やpolyserial correlation を使って因子分析ができるようになることです。ま,SEMでなく因子分析なので多分相関係数だけでとりあえず間に合うでしょう。これは2段階評定,3段階評定,4段階評定などの順序尺度を正規分布するものとして相関係数を計算するものです。Pearsonの相関係数よりもかなり大きい値となる。使用上の注意については,狩野裕さん@大阪大学のコメントを読んでください。

また,計算法や利用法については,John Uebersax氏のThe Tetrachoric and Polychoric Correlation Coefficients が詳しい。
ということで,delphi and excel のページのここに飛んでください。マクロのpoly_corr_Matrix_from_raw_dataを使います。

因子分析はexcel vba で計算した相関行列を因子分析します。catpca はあくまで主成分分析であり,回転もしませんから,このあたりの制約を解除します。おそらく,catpca の処理ででてくる変数間相関行列を使って因子分析をするという手もあるでしょう。使ったデータではcatpca よりも多分相関行列のほうが大きな値になります。

2段階や3段階ならそのままPeasonの相関行列を因子分析するのとちょっと違う結果になるかもしれません。5段階以上ならばほとんど効果はないのではないかな?このあたりチェックしてみてください。

メニューへ  トップへ (88)へ

SPSS ときど記(86) 2000/11/24

10.1 SPSS 10.1 日本語版は12月

SPSS ときど記(79) 2000/ 9/27 において英語版10.1がでていることを報告した。日本心理学会大会においてSPSS社のブースで聞いたところ,日本語版は12月に出すそうです。

やりとりして,SPSS社の人ってSPSSについてあまり知らないのだということを改めて知った。この版はサーバー用だといいはられてしまった。3人いたうちの一人だが,だいぶ抵抗してやっと,隣にいたひとがそうではないと修正してくれた。

そういいはった人の発言だから信用できるかどうかわからないが,この版では日本語の明らかなミスはを変更しないそうだ。間違っていると知っていても互換性のため変えないと言ったNECのBASIC であったような対応ですね。日本語問題をあまり真剣に考えていないようです。日本語の間違いは11版でないと変えないそうです。日本語のために高くしていることを忘れているのね。

そういえば,この点を指摘したときの行動計量学会大会での垂水さん@岡山大学のコメントでは,SPSSの統計学用語の訳がおかしいことの一つは統計学会が訳もしくは用語を統一していないことにあるそうです。たしかにその面はあるでしょうね。しかし,SPSSの中で用語を揺れているのはSPSSの責任でしょう。

もっとも,この問題はSPSSだけにあるわけでなく,Statistica なんかでもダイアログにでてくる訳が間違っていてしばらく何をいっているのかわからないで固まったことがあります。他の場所では正しく訳していたものです。

SASなんかは最新のマニュアルの日本語版がないとかいう話ですね。

メニューへ  トップへ (87)へ

SPSS ときど記(85) 2000/11/17

因子分析 日心ワークショップ因子分析の基本問題

2000年11月6日の日心ワークショップの因子分析の基本問題において使用したパワーポイントファイルやデータ,SPSSシンタックス,参考文献などを公開しました。

http://www.ec.kagawa-u.ac.jp/~hori/spss/pwork.html

主成分分析と因子分析,直交解と斜交解,因子数の決定,必要な変数数,ケース数,モデルなどについて具体例を示しながら論じています。

頭をすっきりさせるのに役立つ狩野裕さん@大阪大学のコメントもあります。

因子分析や主成分分析を使用されるかたの参考になるでしょう。

メニューへ  トップへ (86)へ

SPSS ときど記(84) 2000/11/ 1

因子分析 ML, ULS の「1.0 より大きい 1 つまたは複数の共通性推定値が反復間に発生しました」

因子分析の因子抽出法を「最尤法」「重みなし最小2乗法」を選ぶと次のトラブルが生じることがある。これは「共通性」のところに出力される。

>1.0 より大きい 1 つまたは複数の共通性推定値が反復間に発生しました。結果の解を解
>釈する時は注意してください。

(「反復間」というのは「反復中」でしょうね。または,「反復の間」)

これは不適解であるということです。不適解はさまざまな要因で生じます。

SPSS ときど記(83) 2000/10/27 因子分析 ML, ULS の「Hessian が正値ではありませんでした」 にちょっと変動があった場合にも生じます。

(1)ヘッセ行列が正でない (反転させてコピーして使ってください)

matrix data var= v1 to v7 /format =free full /contents=corr n.
begin data
1.00 0.81 0.81 0.81 0.81 0.00 0.00
0.81 1.00 0.81 0.81 0.81 0.00 0.00
0.81 0.81 1.00 0.81 0.81 0.00 0.00
0.81 0.81 0.81 1.00 0.81 0.00 0.00
0.81 0.81 0.81 0.81 1.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00 1.00 0.81
0.00 0.00 0.00 0.00 0.00 0.81 1.00
1000 1000 1000 1000 1000 1000 1000
end data.

FACTOR
/matrix =in (cor=*) /ANALYSIS v1 to v7
/PRINT correlation INITIAL EXTRACTION
/CRITERIA ITERATE(25)
/EXTRACTION ml.


(2)不適解 反復中に共通性が1より大きくなったの警告 
   (反転させてコピーして使ってください)

matrix data var= v1 to v7 /format =free full /contents=corr n.
begin data
1.0000 0.8104 0.8206 0.8255 0.8134 0.0328 0.0434
0.8104 1.0000 0.8057 0.8265 0.8119 0.0351 0.0308
0.8206 0.8057 1.0000 0.8327 0.8112 0.0172 0.0176
0.8255 0.8265 0.8327 1.0000 0.8245 0.0126 0.0194
0.8134 0.8119 0.8112 0.8245 1.0000 0.0170 0.0289
0.0328 0.0351 0.0172 0.0126 0.0170 1.0000 0.8140
0.0434 0.0308 0.0176 0.0194 0.0289 0.8140 1.0000
500 500 500 500 500 500 500
end data.

FACTOR
/matrix =in (cor=*) /ANALYSIS v1 to v7
/PRINT correlation INITIAL EXTRACTION rotation
/CRITERIA ITERATE(25)
/EXTRACTION ml
/rotation varimax.

(2)の場合,結果としては共通性が1よりも小さくなっているのでいいかというと,やはり問題。期待値はすべて 0.81 因子負荷量は0.9 である。

回転後の因子行列
因子
1 2
V1 .903 .029
V2 .898 .019
V3 .904 .004
V4 .918 .004
V5 .900 .013
V6 .012 .852
V7 .016 .955
因子抽出法: 最尤法
回転法: Kaiser の正規化を伴うバリマックス法
a 3 回の反復で回転が収束しました。

反復主因子解では,

回転後の因子行列
因子
1 2
V1 .903 .028
V2 .898 .023
V3 .904 .005
V4 .918 .003
V5 .900 .011
V6 .011 .902
V7 .017 .902
因子抽出法: 主因子法
回転法: Kaiser の正規化を伴うバリマックス法
a 3 回の反復で回転が収束しました。


V6, V7 の数値がはっきりと違っている。

この結果からもわかるようにこのタイプに対応するには反復主因子法でよい。少ない変数を分析する場合にはml のほかに反復主因子法をやってみるとよい。


この分析を確認するためにstatistica と stata のml を使ってみました。ヘッセ行列が正値でないという純粋の数値計算問題のときです。
statistica は文句をいわずきっちり結果をだします。つまり,あたかも反復主因子法を使ったような結果です。stata も文句をいわず共通性 1.0 の結果をだします。

この点からするとSPSSはよいソフトですね。


《追記 2000/11/ 2,4》
エーと。ときど記(83)(84)の問題は対角の初期値をSMCや相関係数の最大値を入れるとmlでも解けるということです。SASの結果を服部環さん@筑波大学から送っていただきました(データはここに挙げているのとは違います)。(11/4 追記(84)のほうは解けなかったということです。statistica の最尤法は問題なく解きます。)

SPSSにも 対角に値を指定するオプションがあるのですが,これはpaf(反復主因子法)にしかききません。ということでSPSS的解決はここで書いている方法ということになります。つまりpaf を使うということ。せっかく誉めたけどSPSSは因子分析に関してはそれほどいいとはいえませんでせいた。

ということでstatistica の結果はよろしいようです。statistica は minres の場合に不適解の罠にはまってます。

(2000/11/ 4 この件もうちょっと深い問題がありそうです。)

メニューへ  トップへ (85)へ

SPSS ときど記(83) 2000/10/27

因子分析 ML, ULS の「Hessian が正値ではありませんでした」

滅多にでるメッセージではないが,因子分析のML(最尤法)やULS(最小2乗法)を使っていると,次のメッセージがでて終了することがある。

因子行列
>a 4 因子の抽出が試みられました。反復 50 でHessian が正値ではあり
>ませんでした。抽出が終了しました。
(反復数は50を指定してます)

Hessian ということばが断りもなくでてくる。Hessian Matrix ヘッセ行列のことである。ML, uls のときに使っている。第2階偏導関数の行列である。微分ですね。spss のアルゴリズムではHessian ということばはなしに式がそのままでている。

これがでるときは,ある因子に関する変数が2つしかない。その変数は具体的には,変数ごとの Kaiser-Meyer-Olkin 量(sampling adequacy)(
因子分析 /print AIC(MSA)参照)つまりMSA(Measure of Sampling Adequacy)を読めばいい。値が0.50 またはそれに近い値になっている変数がそれである。(下の追記参照)

これに対する対応は
(1)反復主因子法(paf)を使用することである。
(2)または,その因子の変数を増やす
(3)または,その因子に対応する変数をなくすということになる。

(1)がとりあえず自然であろう。

追記 2000/11/1
MSAは各変数のものつまり反イメージ行列の対角部分,標本妥当性の測度と注記してある部分である。

さて,「この値が0.50 またはそれに近い値」というのは直交モデルが当てはまる場合である。斜交モデルが当てはまる場合は 0.5 よりも大きな値(例えば 0.6以上)をとる。

メニューへ  トップへ (84)へ

SPSS ときど記(82) 2000/10/ 7

SPSS SPSSと心理学の統計処理

  • SPSS ときど記(66) 2000/ 8/ 4 SPSS SPSSの強さと弱さ,SPSSへの要望power point版である。少し考察を進めた。私はなぜSASを使わないのかについての部分追加。教育心理学会で使った1頁も追加した。

    日本行動計量学会第28回大会 2000/10/9 において発表するバージョンである。

    次は日本心理学会大会のワークショップだ。

    メニューへ  トップへ (83)へ

    SPSS ときど記(81) 2000/ 9/29

    因子分析 メニューとsyntax での既定値の違い

    因子分析のメニューでの既定値は主成分分析で回転なしである。つまり本来の主成分分析である。syntax の既定値は昔から主成分分析+バリマックス回転である。

    なぜ変えたのかな? いずれにしても因子分析のメニューだから因子分析を既定値にして欲しいものだ。既定値がおかしいからいちいちクリックしてまわらなければならない。
    次に欲しいのは因子分析を指定するスクリプトである。これはオプションが多いので面倒です。

    メニューへ  トップへ (82)へ

    堀 啓造ホームページへ