SPSS ときど記(11〜20)

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

(1)〜(10)へ ときど記(メニュー)へ (21)〜(30)へ

  1. SPSS ときど記(20) 2000/ 5/10 対数線形モデル RaschモデルをSPSSで
  2. SPSS ときど記(19) 2000/ 5/ 9 Exact test Fisher の直接法?
  3. SPSS ときど記(18) 2000/ 5/ 6 マニュアル PDF ファイルのspssadv.pdf,spsspro.pdfがない
  4. SPSS ときど記(17) 2000/ 5/ 5 分散分析 oneway,anova,unianova,manova,glm,varcomp
  5. SPSS ときど記(16) 2000/ 5/ 4 マクロ 図を入れる(igraph)
  6. SPSS ときど記(15) 2000/ 5/ 3 スクリプト 重回帰分析変数総当たり
  7. SPSS ときど記(14) 2000/ 5/ 2 syntax,matrix など エラーを起こした行 が分からない
  8. SPSS ときど記(13) 2000/ 4/27 因子分析 斜交回転 kappa, delta
  9. SPSS ときど記(12) 2000/ 4/26 因子分析 RMSEA の区間推定
  10. SPSS ときど記(11) 2000/ 4/24 スクリプト スクリプト作成の困難

SPSS ときど記(20) 2000/ 5/10

対数線形モデル RaschモデルをSPSSで

メーリングリスト SPSS-L で流れてきた話題ですが,項目数が少ない場合はSPSSでRasch モデルを扱うことができるそうです。まだ未確認です。

次の文献
TenVergert, E. and Gillespie, M. and Kingma, J. (1993). Testing the Assumptions and Interpreting the Results of the Rasch Model Using Log-Linear Procedures in SPSS, Behavior Research Methods, Instruments, and Computers, 25, 350--359.

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

SPSS ときど記(19) 2000/ 5/ 9

Exact test Fisher の直接法?

spssに exact test のオプションを入れた状態では,数え上げる方法を使って正確にp値を求める方法を求めることができる。気づいてなかったのですが,
群馬大学青木繁伸さん(このリンクはすぐに間違ったリンクになる。統計学関連なんでもあり「Re^9: 全くの総計素人です。基礎から教えてください。」(2000/05/08 (月)11:25)というタイトルのところです。)の指摘によって,SPSSの出力する 「Fisher の直接法」というのはFisher の直接法じゃないんですよ。ここで求めているのはFreeman and Halton(1951)の方法で,Fisher はその前に言及しているということです。この方法はStatXact Papers の Exact Inference for Categorical Data (sxpaper.pdf) に書いてあるほうがSPSSのマニュアルよりもわかりやすい。

Fisher's Exact Test はいろんな訳語がある。直接法,正確検定,厳密検定などと訳される。

----------------------------------------------------------------------
         値  自由度 漸近有意確率 (両側) 正確有意確率 (両側)
Pearson のカイ2乗 14.998  5   .010         .010
Fisher の直接法  11.633                .018
-----------------------------------------------------------------------

上の出力は大幅に省略していますが,「Pearson のカイ2乗」の「正確有意確率 (両側)」 の出力が青木さんの紹介しているFisher's exact test(extended)です 。これは2×2だけでなく r×c のクロス表を分析できる。もっとも,青木さんのFisher's exact test (Extended)でも分析できます。

2x2であれば「Pearson のカイ2乗の正確有意確率(両側)」も「Fisher の直接法の正確有意確率 (両側)」も同じ値となります。それ以外は違う値になるようです。

A と B のクロス表
----------------------------------------------------
            B           合計
            1.00  2.00  3.00
----------------------------------------------------
A    1.00  度数  25   25   12   62
     調整済み残差 1.6   .6  -2.6
    2.00  度数   0    1    3    4
     調整済み残差 -1.6   -.6   2.6
----------------------------------------------------
合計      度数  25   26   15   66


カイ2乗検定
----------------------------------------------------------------------------
         値  自由度 漸近有意確率 正確有意確率  正確有意確率
                  (両側)     (両側)    (片側)
----------------------------------------------------------------------------
Pearson のカイ2乗 6.956   2   .031      .052
尤度比       6.690   2   .035      .072
Fisher の直接法  5.280               .034
線型と線型による連関
          5.845   1   .016      .018     .018
----------------------------------------------------------------------------

どっちを使うのがいいのかよくわからない。

さすがにAgresti(1990,p64-65)にはFreeman and Halton(1951)がでていました。そして,上のデータは順序性をもつ場合ですが,Agresti の数値とSPSSの出力は一致しました。「線形と線形による関連」の正確有意確率が順序性を仮定したときの数値になってます。おっと,この紹介では,まず順序を仮定した場合のexact p-value, Pearsonのχ2値の exact P-値,その漸近値,Freeman-Halton P-値という順序です。この順序は絶対的でないですが,青木さんの求めている方を優先したほうがよいのかな?

なお,青木繁伸さんの解説,フィッシャーの検定も参照のこと。

《引用文献》
Agresti, A.(1990). Categorical data analysis. Wiley.


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

SPSS ときど記(18) 2000/5/6

マニュアル PDF ファイルのspssadv.pdf,spsspro.pdfがない

spss 10.0J for windows CD-ROM の中にspssadv.pdf,spsspro.pdfがない。前と同じバージョンのものでもspssconj.pdf, spsstbcb.pdf, spssmva.pdfは入っているのでチョンボであろう。今挙げたのは97年のタイムスタンプだ。抜けているのは98年のタイムスタンプのものだ。99年のタイムスタンプのものは当然入っている。まあ,うっかりミスでしょうね。

と書いてから気づいたけど, Advanced models は 10.0 で新しい統計が入っていた。もしかしたらうっかりでないかもしれない。ということで,連休明けに聞いてみよう。


結局聞かなかったが,Baseに3つとも入っていることがわかった。聞かなくてよかった。
2000/5/16

さらに, Regression Models も書籍版のマニュアルは10.0になっている。英語版のマニュアルを比較したところ章の構成は変わらないが,references がなくなっている。なんで。


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

SPSS ときど記(17) 2000/5/5

分散分析 oneway,anova,unianova,manova,glm,varcomp

SPSS の分散分析にはいろんな統計命令がある。おそらく,oneway,anova→manova→glm,varcomp→unianova と追加されてきた。10.0.5 のメニューでサポートされているのは,何なのかもよくわからない。おそらく,unianova, glm,varcomp ではないだろうか?と思ったらもっとあった。

一般線形モデル→一変量 unianova(BASE)
一般線形モデル→多変量 glm (advanced models)
一般線形モデル→反復測定 glm (advanced models)
一般線形モデル→分散成分 varcomp (advanced models)
平均の比較→一元配置分散分析 oneway (BASE)
平均値の比較→グループの平均 means (BASE)

このほかt検定もある。means はオプションを指定しないと分散分析は出力しない。このほかsummarize も分散分析をする。

unianova は glm の univariate 部分をそのまま移したものであるらしい(SPSS Base 10.0J User's Guide 21章では「 GLM-一変量分散分析」というタイトルになっている。最後のp253 に「UNIANOVAコマンドの追加機能」とこれがunianova であることがわかる)。univariate は従属変数が1つということ。多変量分散分析に対して付けたようですね。glm の移植のお陰で,anova では分析できなかった変量変数も分析できるし,事後検定も組み込まれている。anovaから抜けたのは,数量化1類と等価なMCA のオプション。

oneway も必要なくなったかなと思ったが残っている。これでできるのは線形性の判定かな。線形性の判定は means でもできる。

glm が入ったのにmanovaが残っているのも,manovaにしかできない統計があるからだろう。

spssの面倒くささはこのように古いのと新しいのとでどう違うのかはっきりとした比較表を出してくれないこと。昔はマニュアルに old friends という頁があって,そこにどのように改訂されたかわかるようになっている。しかし,今では何が変わったかはっきりとはわからない。特にメニューに載るものが変わっているのにダンマりだ。マニュアルを全部読むしかない。日本語版は全訳でないので,英語版も読まなくてはいけない。

この文章は SPSS 10.0.5J に基づいて書いてます。

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

SPSS ときど記(16) 2000/5/4

マクロ 図を入れる(igraph)

 SPSSジャパンのホームページのなかにサンプルデータ/スクリプトのダウンロードサイトに「林の数量化IV類マクロプログラム 」がある。

これは,igraph を使ってグラフを描くマクロのいい例になっている。私の数量化3類でもぜひ取り入れたい。

igraph(インターラクティブグラフ)はSPSS 10.0.5 においては調子がよくないことが知られている。今 10.0.7 のβ版がいくつかのバグをとったものになっているそうだ。いずれ公開されるだろうから,それを待って入れてみよう。

数量化4類のグラフを見ると3次元のプロットは3次元性を感じさせない。だからどういう布置かまったくわからない。よくあるのはxy平面に垂線をおろして布置がある程度わかるようにする方法だ。もう一つは,図を回転させてみると3次元性が見えてくる。しかし,回転しようと回転ダイヤルを回してみたが図が再表示されない。う〜ん。10.0.5のバグなのかな?

あ,その前にこのプログラム(H4_1.sps)走らない。エラーが一杯でてくる。マクロの中の行列言語にバグがある。といっても,普通のシンタックスでもあるタイプのバグだ。注釈行(* で始まる行)の終了は,一行空白か,《.》(ピリオド)で終わるかしないといけない。この作者はピリオドを入れない。そのため,注釈行の次の行も注釈行と見なされている。このタイプのエラーが数カ所ある。他の注釈行は一行開けているのでエラーにはならない。ピリオドをつける習慣をつけておいたほうがいい。なんで,これが公表されているのかな? release 9 でもうまくいかないはずだが。同じ問題はH4_2.sps のほうにもある。

「疎遠性」という言い方も気になりますね。他でも使っている「距離」をどうして使わないのかな?

林知己夫氏は「親近性」「非親近性」ということばを使ってます。一般的には「類似度」「距離」ではないでしょうか。「疎遠性」などということばを開発する必要はあるのでしょうか?

《引用文献》
林知己夫(1993).『数量化−理論と方法−』朝倉書店

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

SPSS ときど記(15) 2000/5/3

スクリプト 重回帰分析変数総当たり

SPSSジャパンのホームページのなかにサンプルデータ/スクリプトのダウンロードサイト「変数の総当り法による重回帰分析」スクリプトプログラムがある。

10変数に制限されているので,10変数で走らせてみたところ,ありゃりゃ。「サーバーアプリケーションの起動に失敗しました」「空のドキュメントの作成に失敗しました」「Exception 8007000e」となにやらエラーが生じる。

10変数の総当たりだと,1023 通り。どおりで時間がかかる。ところが,287番目回帰分析のときに失敗をしているようです。どうも出力の右側のタイトルを変更しようとして失敗しているようです。左の出力では変数名のタイトルがついています。

変数の数組み合わせ数
23
37
415
531
663
7127
8255
9511
101023

私のシステムの中では,8変数の総当たりが限度ですね。

スクリプトの中を読んでみると次の記述があります。
' 「変数総当り法による重回帰分析」の出力結果は200行に制限してあります。下記の「200」を変更することにより、任意の出力行とすることができます(注意:増やす場合、システムリソースの容量に、ご注意下さい)。
この制限はsummarize を出力するときのものです。

まあ,おそらく,システムリソースの容量が関係しているようですね。summarize の場合なぜ 200に制限しているのかわからないけど。わからないのは総当たりをしているのに出力は計算した順序でだしている。調整済みR2かなにかでsort cases をしておけばいいのに。と思ったら,後ろに余計なものを出力しているのでちゃんとsort されないからか。

システムリソースまたは何かによって総当たりの途中で異常終了するというのはいただけない。287回の出力が限界とすると,bootstrapjackknife が思うようにできないということになる。これからますます,bootstrap や Jackknife は結果を統計的に吟味する手法として重要である。

一度出力し,必要事項をファイルに保存したあと,出力を1回ごとに削除すればいいのかもしれない。しかもやたら遅いのも気にかかる。

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

SPSS ときど記(14) 2000/5/2

syntax,matrix など エラーを起こした行 が分からない

スクリプトで信頼区間を求めるところまでできるかどうか分からないのでシンタックスで作成してみた。その手ならしに Steiger の 分散分析の効果量の信頼区間を求めるシンタックスを作成した。慎重にやって正解であった。効果量の信頼区間を求めるほうがはるかにシンプルだったし,RMSEA を求める基本ルーティンができて,時間を短縮できた。

Steiger は計算上必要なことをきちんと書いてくれていないのでΓのところでかなり時間を費やした。

それ以外にSPSSのシンタックスなどのエラーメッセージに問題がある。どの行で問題が起こったかわからない。とくに256カラム目でわかるエラーというのをなんとかしてほしい。

行列言語などでもすごっく大変なんです。エラーが生じたときは,その行全部を書き出すとかできないのかな? おそらく,生産性が極端に悪いでしょう。2,30年前のspss ならどこでエラーが起こったかはすぐわかったのだが,何とかならないの。

解決編はSPSS ときど記(25) 2000/ 5/18 syntax,matrix など エラーを起こした行 が分からない(解決編) へ

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

SPSS ときど記(13) 2000/4/27

因子分析 斜交回転 kappa, delta

SPSSの斜交回転はながく 直接オブリミン法だけであったが,プロマックス法が使えるようになった。SPSS 6.1 のマニュアルではまだ直接オブリミン法だけなので,release 7以降に追加されている。

SPSSにおいて指定するパラメータのなかにプロマックス法のカッパ(kappa κ?)というのがある。これはSPSS アルゴリズムのfactor の中のpromax を読めばthe power of promax rotation であることはわかるのだが,カッパという言葉はアルゴリズムの中にも, SPSS Base 10.0J User's Guide の中にも,pdf ファイルの reference manual の中にもない。ヘルプファイルにもない。もしかして,k をカッパと読んだのだろうか。それはないよね。アルゴリズムのなかではk が使われているのでちょっと心配だ。何が心配かというと日本語への翻訳スタッフがまた大ポカしたかもしれない。ちなみに,spss-l というSPSS社のサポートスタッフも入っているメーリングリストでなんでkappa か質問したが答えが返ってこなかった。

SASでは power=n で指定し,その説明は
ROTATE=PROMAX の目標パターンを計算するために用いる累乗数を指定する。デフォルトでは3となる。
このようにわかりやすく説明できないのかな? なぜこういう説明を入れないのかな? リザルトコーチのように結果の見方については説明しだしたのに,パラメータについて説明ないのはいかがなものか? そのパラメータの根拠となった文献くらい挙げておいてほしい。

SPSSの既定値は4であり,SASの既定値と異なっている。

この点については浅野(1971,p188)の本が詳しく書いています。

堀 啓造[fpr 767] 直交解か斜交解か?でも引用してますが,浅野(1971,p188)
...したがって、適切な斜交解を得るためには何とおりかのkの値に関し実施してみなければならない。ただ、文献にある経験的知見によるとk=2ではあまりに斜交性が強く、k=3ではカイザー・ディックマン法に近い結果を示し、より広範な数値例の検証からの一般的知見としてk=4が最適といわれている。他面、データがとくに簡単な構造に基づくときは、kの値としては小さいほうがよいということも当然である。このように本項(プロマックス法)の方法は、直交解から非常に速く良い斜交解を得ることを特徴としている。
k=2のほうが斜交性が高いのかな? 少ない分析例で見たところ,k=2,k=3とk=4を比較すると,べき乗が大きいつまりk=4の時の方が角度が直交から遠ざかるようだが。つまり因子間相関が高くなる。Gorsuch(1983, p190)などに,べき乗が高くなるにつれて,因子間の相関が高くなると書いてあります。この点については,浅野(1971)は間違ってますね。ただ,「k=4のが最適」はそのままでいいのだろうか。Gorsuch(1983)などでは4乗が一番のお薦めになっている。通常,2,4,6乗を試してみる。とするとSASの3乗は何だろうか?

Gorsuch(1983, p190)
The higher the power, referred to as k in promax literature,
という部分があるが,k の イタリック体を使っているように見えるが,κ(kappa)には見えない。オリジナルの論文で確かめるしかないか。

直接オブリミン法のデルタについても説明がほとんどない。三宅ほか(1977, p142-143)
DELTA の大きさは因子間の相関係数の程度に効果を及ぼす。DELTA が大きいほど相関は大となる。-5 より小さい値にすると,ほとんど直交解に近くなる。利用者がこの値を指定しなければ,0 が与えられる。
なお,DELTAは0.8より大きい値場合エラーとなる。メニューの場合,即座に指摘される。

Harman(1976, p335)
for direct oblimin, in addition to δ=0, try δ=-5 and δ=.1, .2, ..., .5
Harman(1976, p321) にオリジナルの論文のγの代わりにδを使っているということを言っているのでSPSSはHarman を採用した可能性がある。

Gorsuch(1983, p205)では単純構造がはっきりしていたら,プロマックスまたはHarris-Kaiser規準(orthoblique) を薦めている。

なお,豊田秀樹[fpr 764] 直交解か斜交解か?も一読を勧める。

《引用文献》
浅野長一郎(1971). 因子分析法通論 共立出版

Gorsuch, R.L. (1983). Factor analysis (2nd ed.). Lawrence Erlbaum.

Harman,H.H. (1976). Modern factor analysis (3rd ed.). The University of Chicago Press.


三宅一郎ほか(1977). SPSS統計パッケージ II解説編 東洋経済新報社


《追記》00/04/28
Hendrickson and White(1964) を読んだところ,イタリック体の k でした。

Hendrickson, A. E., and White, P. O. (1964). Promax: A quick method for rotation to oblique simple structure. British Journal of Statistical Psychology, 17, 65-70.

《追記》00/06/25
SPSSジャパンに訊いたところ,Kappa というのは英語版でもKappa ということだ。ではなぜマニュアルにその記述がないのか?


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

SPSS ときど記(12) 2000/4/26

因子分析 RMSEA の区間推定

RMSEAを求めるスクリプトを以前に作成している。 RMSEAの発案者 Steiger がこれは点推定ではなく区間推定で考えるべきものだといっている。これはSteiger(1996)でも言っているし,Steiger and Fouladi(1997)ではもっと徹底して区間推定について言っている。

ということはやはりRMSEA は区間推定するべきですね。spssのsyntax では区間推定できるのですが,script の中でできるかどうか今のところ分からない。

《引用文献》
Steiger, J.H. (1996). 共分散構造分析(SEPATH) STATISTICA ユーザーマニュアル応用統計編 デザインテクノロジーズ p3463-3606 (StatSoft,1995)

Steiger, J.H. (2000). Point estimation, hypothesis testing, and inverval estimation using the RMSEA: Some comments and a reply to Hayduk and Glaser. Structural Equation Modeling, 7, 149-162.

Steiger, J.H. and Fouladi, R.T. (1997). Noncentrality interval estimation and the evaluation of statistical models. in L.L.Harlow, S.A.Mulaik, and J.H.Steiger(eds.) What if there were no siginficance tests? Lawrence Erlbaum


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


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

スクリプト スクリプト作成の困難

スクリプトをつくってみて,いくつか困難があることがわかった。
(1)ole help の例そのままでは動かないことが多い
スクリプト作成には ole help(spssole.hlp)(spss のフォルダにある)を見ながらつくることになる。ヘルプの例をそのままスクリプト窓に移して走らせてもエラーになることが多い。次の(2)にあるエラーになることが間々ある。

(2)何をsetまたは activate していいのかわからない。
ole のヘルプを見ながらつくるのだが,しばしば「そいつぁ,Object var になってねぇよ」(OLE Automation: Object var is "Nothing".) というダイアログメッセージに出会う。
この場合,何かをset または activate してなければならないのだが,何をactivate していないかよくわからない。下の(5)参照

(3)basic の関数が貧弱
vba並の関数は無理にしてもそれに準じる程度はあるのかと思っていたら,関数はほとんど基本関数,演算だけである。数学関数として,abs,atn,cos,exp,fix,int,log,sgn,sin,sqr,tan だけである。という意味で,Spss Base 10.0J User's Guide p425 にある,
スクリプトの機能を使用すると,次のようなタスクを自動化できます。
■ ビューアの出力を自動カスタマイズする
■ データファイルを開くおよび保存する
■ ダイアログボックスを表示および操作する
■ コマンドシンタックスを使用したデータ変換および統計手続きを実行する
■ 各種書式のグラフィックファイルとして図表をエクスポートする
というレベルの使用かな。rmsea.sbs のような使用法は例外ですね。

(4)スクリプトへの自動記録ができない
vba(visual basic for application) ではexcel のキー操作を vba への自動保存ができて,何を記述したらいいかよくわかるが,spssのスクリプトではそれができないので何を記述したらいいかよくわからないことが多い。

(5)訳語の不斉合? おいおい
マニュアルの p436 「図 42.12 オブジェクト・ツリー表示」にある「出力コレクション項目」はp 438 「出力項目全体」また,図の「出力単独項目」はp438 「出力項目」ではなかろか?

オブジェクト名タイプまたはクラス変数名OLE helpのオブジェクト名OLE help の英語名
出力ナビゲータ文書ビューア文書ISpssOutputDocobjOutputDocビューア文書Output Document
出力コレクション項目出力項目全体ISpssItemsobjOutputItems()ビューアのコレクション項目Output Items
出力単独項目出力項目ISpssItemobjOutputItemビューアの単独項目Output Item

 spss社は何を考えて訳しているんじゃ!!

なんにも考えてないからこういうことになったのね。


ところで,上の表の 出力コレクション項目(objOutputItems())および出力単独項目(objOutputItem) は左の窓「アウトラインウィンドウ枠」(一番上に「出力」とでる枠)に出力されるものを指している。
 ピボットテーブル,図表,テキストが右の窓「内容ウィンドウ枠」です。

Pivot の項目にアクセスするには,次のようにset していく

Set objDocuments = objSpssApp.Documents
Set objOutputDoc = objSpssApp.GetDesignatedOutputDoc
Set objItems = objOutputDoc.Items
Set objItem = objItems.GetItem(i)
Set objSelectedPivot = objItem.Activate()
で,最後のがactivate です。

途中にエラーをおこさないようにチェックが入っていきます。その前にdim の指定も必要。global.sbs など例を見るほうがいいでしょう。


(6)現在の項目index が取得できない?
項目index を取得できないようなんですね。できるのかな?取得できれば,今の出力項目に対してスクリプトを書くことが簡単になるのですが。おそらく,出力項目のチェック等はあまり考えていないのでしょうね。

Call GetFirstSelectedPivot(objPivotTable, objItem, bolFoundOutputDoc, bolPivotSelected)

これ(global.sbs の中)を使えば現在アクティブなピボットを捕まえることはできます。
うん。この中を見ると
If intItemType = SPSSPivot And bolSelected = True Then
というので探してますね。やっぱり,index を0 から最後まで調べるということですね。その時キーになるのがbolSelected = True というやつか。


いずれにしても
(a)Spss Base 10.0J User's Guide p425〜 42 スクリプト機能
(b)Sax Basic Language help
(c)spssのole オートメーション処理 help (spssole.hlp) これは直に立ち上げたほうがいい
(d)オブジェクトブラウザ(F2)
(e)*.sbs の例(spssフォルダ\scripts 内と www spss 社)

を見ながらやることになりますね。

それにしてもできる水準が低レベル,低機能に思えるが。これは別に書くことにする。

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

堀 啓造ホームページへ