SPSS ときど記(251〜260)

SPSSを使っていてトラぶったところや変な出力や裏技表技の便利な使い方を中心に書き留めてみる。時々書きます。(Keizo Hori
最終更新日: (2007/ 2/ 6から)

(241)〜(250) ときど記(メニュー)へ  (261)〜(270)

  1. SPSS ときど記(260) 2007/ 3/ 5 OMS  OMS(出力管理システム)初歩
  2. SPSS ときど記(259) 2007/ 3/ 2 SPLIT File  8 個よりも多いスプリット ファイル変数
  3. SPSS ときど記(258) 2007/ 2/27 スクリプト 正規分布する乱数変数作成スクリプト(ransu.SBS)
  4. SPSS ときど記(257) 2007/ 2/18 度数分布表 度数分布表の情報量(分散)を求めるスクリプト(infofreq.SBS)
  5. SPSS ときど記(256) 2007/ 2/15 Python 外部プログラムPythonを使ってみる
  6. SPSS ときど記(255) 2007/ 2/14 スクリプト 多変量正規分布検定・多変量外れ値チェック script(normtest.sbs) マイナーチェンジ
  7. SPSS ときど記(254) 2007/ 2/13 スクリプト catdap マイナーチェンジ
  8. SPSS ときど記(253) 2007/ 2/13 スクリプト dialog グループオプション
  9. SPSS ときど記(252) 2007/ 2/13 スクリプト dialog キャンセルボタン
  10. SPSS ときど記(251) 2007/ 2/ 6 スクリプト パラメータが間違ってます

SPSS ときど記(260) 2007/ 3/ 5

OMS  OMS(出力管理システム)初歩

OMS(Output Management System 出力管理システム)は比較的最近追加された機能である。おそらくSPSS12からである。解説はC:\spss\japanese\SPSS Base User's Guide 15.0.pdf(49 出力管理システム)とC:\spss\english\SPSS Programming and Data Management.pdfにある。後者の本にも日本語訳本がある(正確にはpdfファイルよりも古い本に対応しているが、8章は同じはずだ)。SPSS Programming and Data Management SPSSユーザーとSASユーザーのためにというタイトルでSPSS社からでている。とても高い。8章がOMSの解説である。

 出力の管理はSPSSの出力の一部をいろんな形式のファイルに書き出すことにある。
 過去に一度解説してあるが、ややこしいのでもっともシンプルな形を示す。
 単なる例のためにSPSS15に入っているデータを使う。C:\spss\Tutorial\sample_files\demo.sav

 次のシンタックス(
http://www.spss.com/corpinfo/newsletter/0705_tip1.htm参照)はクロス集計表の調整済み残差をSPSSファイルに保存し、保存したファイルをデータ窓に呼び出す。
 データ窓に\spss\Tutorial\sample_files\demo.savを呼び出しておいて、テーブルの中のシンタックスをシンタックスエディタにコピーして、走らせる。
OMS
  /SELECT TABLES
  /IF COMMANDS = ["Crosstabs"]
  SUBTYPES = ["Crosstabulation"]
  /DESTINATION FORMAT = SAV NUMBERED = TableNumber_
  OUTFILE = "C:\spss\OMS.sav".
CROSSTABS
  /TABLES= 収入カテゴリ 車カテゴリ 教育  BY 婚姻状況
  /CELLS= ASRESID.
OMSEND.
GET FILE='C:\spss\OMS.sav'
SPSSは半角カナを変数名に使っている。これはネットでは自動的に全角になっていることがあるのでコピーして使うときは要注意

  1. OMS … 統計命令OMSの開始。
    • SELECT TABLES … 表を選択する。これらの指定は
      シンタックスエディタのユーティリティ→OMSコントロールパネル→出力の種類→テーブル表(反転)
    • IF COMMANDS = ["Crosstabs"] クロス集計表 の場合(統計命令に対応)
      OMSコントロールパネルコマンド識別子→Crosstabs(反転)
    • SUBTYPES = ["Crosstabulation"]
      OMSコントロールパネル選択したマンドのテーブルのサブタイプ→Crosstabulation(反転)
    • DESTINATION FORMAT = SAV NUMBERED = TableNumber_
      OUTFILE = "C:\spss\OMS.sav"
      OMSコントロールパネル→出力先→新しいデータセットをチェック→ファイル名(OMS.sav)入力

    • 追加をクリック
    • あとは貼り付け (OK でもいいがシンタックスを作ってしまう)
  2. CROSSTABS
    /TABLES= 収入カテゴリ 車カテゴリ 教育 BY 婚姻状況
    /CELLS= ASRESID.
    統計命令の記述。
  3. OMSEND.
    OMS命令終了。
  4. GET FILE='C:\spss\OMS.sav'

    何が保存されたか確認しよう。

いろいろ書き換えてどんなものが保存されるか見てみよう。結局、表のタイトルの英語表記がわからないとSUBTYPESの指定ができないのは困りものだ。ま、そこでOMSコントロールパネルはかならず利用することになる。
 まずは初歩でした。


TableNumber_Command_Subtype_Label_ItemCategoryVar3未婚既婚p
1CrosstabsCrosstabulation世帯全体の収入カテゴリ (千ドル) と 婚姻状況 のクロス表世帯全体の収入カテゴリ (千ドル)25未満調整済み残差-0.90.90.39
1CrosstabsCrosstabulation世帯全体の収入カテゴリ (千ドル) と 婚姻状況 のクロス表世帯全体の収入カテゴリ (千ドル)25 - 49調整済み残差1.3-1.30.20
1CrosstabsCrosstabulation世帯全体の収入カテゴリ (千ドル) と 婚姻状況 のクロス表世帯全体の収入カテゴリ (千ドル)50 - 74調整済み残差-0.80.80.42
1CrosstabsCrosstabulation世帯全体の収入カテゴリ (千ドル) と 婚姻状況 のクロス表世帯全体の収入カテゴリ (千ドル)75以上調整済み残差0.00.00.97
2CrosstabsCrosstabulation車の価格カテゴリ と 婚姻状況 のクロス表車の価格カテゴリ安い調整済み残差0.3-0.30.80
2CrosstabsCrosstabulation車の価格カテゴリ と 婚姻状況 のクロス表車の価格カテゴリ普通調整済み残差0.1-0.10.96
2CrosstabsCrosstabulation車の価格カテゴリ と 婚姻状況 のクロス表車の価格カテゴリ高い調整済み残差-0.30.30.77
3CrosstabsCrosstabulation教育のレベル と 婚姻状況 のクロス表教育のレベル中学調整済み残差-3.03.00.00
3CrosstabsCrosstabulation教育のレベル と 婚姻状況 のクロス表教育のレベル高校調整済み残差-0.10.10.95
3CrosstabsCrosstabulation教育のレベル と 婚姻状況 のクロス表教育のレベル専門学校調整済み残差2.1-2.10.04
3CrosstabsCrosstabulation教育のレベル と 婚姻状況 のクロス表教育のレベル大学調整済み残差1.1-1.10.29
3CrosstabsCrosstabulation教育のレベル と 婚姻状況 のクロス表教育のレベル大学院調整済み残差-0.10.10.93

 http://www.spss.com/corpinfo/newsletter/0705_tip1.htmでは、できたSPSSファイルをさらに分析して結果をだしている。
COMPUTE p=SIG.CHISQ(未婚**2,1).
RENAME VARIABLES Var1=Item Var2=Category.
SPLIT FILE BY Item.
SUMMARIZE
  /TABLES=Category 未婚 p
  /FORMAT=LIST NOCASENUM NOTOTAL
  /TITLE='Group comparisons for response categories'
  /MISSING=VARIABLE
  /CELLS=NONE.


最終結果

Group comparisons for response categories
Item
Category 婚姻状況
未婚
   p
世帯全体の収入カテゴリ (千ドル) 1 25未満 -.9 .39
2 25 - 49 1.3 .20
3 50 - 74 -.8 .42
4 75以上 .0 .97
車の価格カテゴリ 1 安い .3 .80
2 普通 .1 .96
3 高い -.3 .77
教育のレベル 1 中学 -3.0 .00
2 高校 -.1 .95
3 専門学校 2.1 .04
4 大学 1.1 .29
5 大学院 -.1 .93
 
 ブートストラップをするときなどもOMSでできたSPSSファイルのデータをさらに分析することによる統計となる。

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


SPSS ときど記(259) 2007/ 3/ 2

SPLIT File  8 個よりも多いスプリット ファイル変数

split file 命令を使っていて、

  >Error # 4757 in column 256. Text: (End of Command)
>SPLIT FILE コマンド上において、 8 個よりも多いスプリット ファ
>イル変数が要求されました。長い文字列変数は複数個のスピリット ファイル
>変数であると見なされます。

というエラーに遭遇した。どうみても1つしか変数を使っていない。ヘルプのファイルの分割 をよく見てみると、
長い文字型変数 (8 バイトを超える文字型変数) の場合は 8 バイトが 1 つの変数としてカウントされ、8 つまでがグループ化変数として使用できます。
というのに引っかかっていた。長い(実際は変数ラベルが入っていた))のためこういう問題が生じてしまった。エラーメッセージにもいちいち調べなくてもいいような工夫が欲しい。

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


SPSS ときど記(258) 2007/ 2/27

スクリプト 正規分布する乱数変数作成スクリプト(ransu.SBS)

正規分布する乱数変数作成するスクリプトを作った。今までのスクリプトの中で一番シンプルなものとなっている。変数の数サンプルサイズを指定しOKをクリックすると望みのサンプルサイズの任意の数の変数が作成される。

 スクリプトの作成の実験台に丁度いいののではないか。

  1. ダイアログの作成法について検討する
  2. 正規分布の平均値、分散を指定できるようにする RV.NORMAL(mean, stddev)。
  3. 他の分布のオプションをつける

    1. 一様分布 UNIFORM(max)
    2. 対数正規分布 RV.LNORMAL(a, b)。
    3. ポアソン分布 RV.POISSON(mean)。
      などSPSSの乱数生成関数を使っていろんな分布の乱数を作ってみよう。
       ヘルプのRandom Variable Functionsを参照のこと。
       NORMAL RV.BERNOULLI: RV.BERNOULLI(prob)。 RV.BETA: RV.BETA(shape1, shape2)。 RV.BINOM: RV.BINOM(n, prob)。 RV.CAUCHY: RV.CAUCHY(loc, scale)。 RV.CHISQ: RV.CHISQ(df)。 RV.EXP: RV.EXP(scale)。 RV.F: RV.F(df1, df2)。 RV.GAMMA: RV.GAMMA(shape, scale)。 RV.GEOM: RV.GEOM(prob)。 RV.HALFNRM: RV.HALFNRM(mean, stddev) RV.HYPER: RV.HYPER(total, sample, hits)。 RV.IGAUSS: RV.IGAUSS(loc, scale) RV.LAPLACE: RV.LAPLACE(mean, scale)。 RV.LOGISTIC: RV.LOGISTIC(mean, scale)。 RV.LNORMAL: RV.LNORMAL(a, b)。 RV.NEGBIN: RV.NEGBIN(threshold, prob)。 RV.NORMAL: RV.NORMAL(mean, stddev)。 RV.PARETO: RV.PARETO(threshold, shape)。 RV.POISSON: RV.POISSON(mean)。 RV.T: RV.T(df)。 RV.UNIFORM: RV.UNIFORM(min, max)。 WEIBULL: RV.WEIBULL(a, b)。 UNIFORM: UNIFORM(max)。
       

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


      SPSS ときど記(257) 2007/ 2/18

      度数分布表 度数分布表の情報量(分散)を求めるスクリプト

      度数分布表の情報量(分散)マクロ をスクリプトにした。詳しくはマクロの説明を読んでください。

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


      SPSS ときど記(256) 2007/ 2/15

      Python 外部プログラムPythonを使ってみる

      spss 14から外部プログラムPython が使えるようになっている。15からはCD-ROM についてくるようになったし、インターフェイスのマニュアルがついている。help→programmabiity でSPSS-Python Integration Package というマニュアルを読むことができる。spss\help\programmabilityのフィルダーに入っている。

       Python の説明は別途SPSS ときど記(227) 2006/ 1/10 外部プログラム 14の新機能などを見て知る必要がある。日本語のページがすでに変わっている。ここ(Pythonのお勉強)からいろいろ情報を得る必要があるだろう。
       SPSSからの提供物は SPSS Developer Centralにある。
        でspssaux.pyをnetscape でダウンロードしたらファイル名をspssaux.py.cfcに変更されていた。これは要注意だ。おっとほとんどの人はIEだから関係ないか。spssaux.pyに戻してc:\python24\lib\site-packagesに保存し、シンタックス窓に次のシンタックスを入れて走らせる。
      BEGIN PROGRAM.
      import spssaux
      help (spssaux)
      END PROGRAM.

      としたら無事動いた。

      さて、マニュアルのほうの例を多少変更して実際に動かしてみよう。
      シンタックスエディタに次のシンタックスを入れて走らせてみよう。

      data list free/v1 to v3.
      begin data
      1 2 3
      4 5 6
      7 8 9
      end data.

      BEGIN PROGRAM PYTHON.
      import spss
      string1="DESCRIPTIVES VARIABLES="
      N=spss.GetVariableCount()
      scaleVarList=[]
      for i in xrange(N):
      scaleVarList.append(spss.GetVariableName(i))
      string2="."
      spss.Submit([string1, ' '.join(scaleVarList), string2])
      END PROGRAM.
      Pythonではインデントが重要なので、forの次の行のscaleVarList.append(spss.GetVariableName(i))にはインデントをしておく必要がある。マニュアルはそのようになっていないので要注意である。ただし6ページに説明はしてある。
      同様に4頁の例もそのままコピーして走らせるとエラーメッセージがでる。
      >IndentationError: expected an indented block
      というエラーメッセージがでる。
       
      set printback off mprint off.
      
      DATA LIST FREE /var1.
      BEGIN DATA
      1
      END DATA.
      DATASET NAME File1.
      BEGIN PROGRAM PYTHON.
      
      import spss
      File1N=spss.GetVariableCount()
      END PROGRAM.
      
      DATA LIST FREE /var1 var2 var3.
      BEGIN DATA
      1 2 3
      END DATA.
      DATASET NAME File2.
      
      BEGIN PROGRAM PYTHON.
      File2N=spss.GetVariableCount()
      if File2N > File1N:
       message="File2 は File1 よりも変数が多い."
      elif File1N > File2N:
       message="File1 has more variables than File2."
      else:
        message="Both files have the same number of variables."
      
      print message
      END PROGRAM.
      
      というようにインデントをきちんとつける必要がある。
       
       Pythonを使うとスクリプトと違いより制御できる度合いが大きい。自ら表を作ったりすることもできる。また、インターラクティブにいろいろできることも便利なところであろう。統計プログラムを書くことも可能であろう。可能性は開けてきたが、今更そこまでやるだろうか。行列言語をもっと便利にするだけで切り開かれるとことは大きいだろう。Pythonで行列計算をまた書くのは面倒だよ。ま、可能性が開かれたことは大きい。
       
       あとはPython Usage Examplesである、PythonTests.spsをダウンロードして走らせてみよう。
       Power point の解説も読む必要がある。SPSS14からspss15では使えるインターフェイスが増えている。  

      ps.
      C:\spss\english\SPSS Programming and Data Management.pdf の11章からspssでのPythonのわかりやすい使い方の解説が付いている。

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

      <

      SPSS ときど記(255) 2007/ 2/14

      スクリプト 多変量正規分布検定・多変量外れ値チェック script(normtest.sbs) マイナーチェンジ

      単変量正規分布検定と多変量正規分布検定および多変量外れ値をチェックをする
      normtest.sbs を現行のspssバージョン(15)にあわせた。多変量正規分布の視覚的チェックのときに、もとのmacroにおいてもplotが使用できなくなっていて graphに変更していたのをほっておいたのだが、今回igraphを使用するバージョンにした。
      出力例(pdf)
      メニューへ  トップへ (256)へ


      SPSS ときど記(254) 2007/ 2/13

      catdap マイナーチェンジ

      クロス集計表分析のための
      catdapスクリプトをマイナーチェンジした。横合計もしくは縦合計が0となる場合、通常はその行または例を無視するが、今回無視しないようにした。ただし、最大カテゴリの判断は自動でしているので最大カテゴリが0の場合は無視される。1のカテゴリなどは無視しないことになる。
      ほかに変数選択のときの10を選ぶとき10以下しか残ってないときにも正しく対応するようにした。以前はエラーに飛んでしまっていた。

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


      SPSS ときど記(253) 2007/ 2/13

      スクリプト dialog グループオプション

      スクリプトのダイアログにおいてグループオプションという選択肢を作ることができる。○ボタンタイプである。ユーザダイアログエディタの オプションボタンの追加のボタンを押す。OptionButtonが追加される。プロパティの編集ダイアログにおいてオプショングループを指定すればそのグループの選択肢にすることができる。

       選択された値は上のオプションから順に0,1, 2 となっていく。

      Sub Main
      Begin Dialog UserDialog 500,119 , "オプションボタン練習"
      Text 10,10,180,15,"Please push the OK button"
      OptionGroup .Options
      OptionButton 10,30,180,15,"Option &0"
      OptionButton 10,45,180,15,"Option &1"
      OptionButton 10,60,180,15,"Option &2"
      OptionGroup .Group1
      OptionButton 220,35,160,14,"OptionButton1",.OptionButton1
      OptionButton 220,56,160,14,"OptionButton2",.OptionButton2
      OKButton 80,90,40,20

      Text 210,14,140,14,"グループ2",.Text1
      End Dialog
      Dim dlg As UserDialog
      dlg.Options = 2
      Dialog dlg ' show dialog (wait for ok)
      Debug.Print dlg.Options; "Options"
      Debug.Print dlg.Group1; "グループ2"
      End Sub

      これだと、オプションの選択によって自動的の前に選択されていたボタンがキャンセルされるので手間が省けて楽である。

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


      SPSS ときど記(252) 2007/ 2/13

      スクリプト dialog キャンセルボタン

      スクリプトのダイアログにおいてキャンセルボタンを指定できることがわかった。SPSSの以前の変数選択の例では、キャンセルボタンを使用しない方法が例示されていたのでてっきり使えないものと思っていた。

       次のようにCancelButton を指定する。「キャンセルボタンの追加」というボタンがあるのでそれを押せばいい。これでダイアログボックスの右上の×も有効となる。

      Sub Main
      Begin Dialog UserDialog 200,120,"キャンセル練習" ' %GRID:10,7,1,1
      Text 10,10,180,30,"キャンセルボタンを押してください"
      OKButton 40,90,40,20
      CancelButton 90,91,90,21
      End Dialog
      Dim dlg As UserDialog
      Dialog dlg ' ダイアログの表示 (wait for cancel)
      Debug.Print "Cancel was not pressed"
      End Sub

      スクリプト窓に上のスクリプトをコピーして走らせて見てください。
      メニューへ  トップへ (253)へ


      SPSS ときど記(251) 2007/ 2/ 6

      スクリプト パラメータが間違ってます

      いつの頃からか、新しいスクリプトにトラブルがでるようになった。スクリプトのファイルをクリックして選択するとパラメータが間違ってますというダイアログがでて、スクリプトの記述が出ない。
       症状から最初のスクリプト記述する、
       'begein description
       'end description

       の間に問題があると見た。そこで、1行が長い行を短くすると症状がでなくなった。このスクリプト説明文の行は短くしないといけない。また、無駄な空白もさけたほうがいいようである。

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


      堀 啓造ホームページへ