SPSS ときど記(261〜270)
SPSSを使っていてトラぶったところや変な出力や裏技表技の便利な使い方を中心に書き留めてみる。時々書きます。(Keizo Hori)
最終更新日:
(2007/ 3/ 8から)
(251)〜(260) ときど記(メニュー)へ
(271)〜(280)
- SPSS ときど記(270) 2008/10/21 OMS SPSS17の出力の変更によるoms使用マクロの不具合(crossstats.sps)
- SPSS ときど記(269) 2008/ 9/29 SPSS17 SPSS17版到着
- SPSS ときど記(268) 2007/ 5/ 7 Python SPSSのPythonからRを使う
- SPSS ときど記(267) 2007/ 4/ 6 因子分析 種々の回転法のシンタックス(行列言語)
- SPSS ときど記(266) 2007/ 3/22 GENLIN 一般化線型モデル(GLM)の使い方初歩
- SPSS ときど記(265) 2007/ 3/21 GENLIN GEE(一般化推定方程式)の使い方初歩
- SPSS ときど記(264) 2007/ 3/13 クロス集計表 クロス集計表カイ2乗値、p値、効果量、AIC一括リストmacro
- SPSS ときど記(263) 2007/ 3/13 BASE spssのfactorとcovariateの使い方
- SPSS ときど記(262) 2007/ 3/10 OMS クロス集計表χ2値, p値,効果量, AICをまとめて出力
- SPSS ときど記(261) 2007/ 3/ 8 OMS OMS(出力管理システム)初歩2
OMS SPSS17の出力の変更によるoms使用マクロの不具合(crossstats.sps)
自作SPSSマクロをSPSS17になって初めて動かしたらやたらエラーが出まくる。いくつかみてみるとSPSSの出力が変わっているため、omsの変数指定が間違っている。そのほかサンプルファイルの保存ホルダーも変更されている。
crosstabs においては半角カナ出力が全角カナになっている。またスペースが違っている場合もある。
ex . ファイ→ファイ、カイ→カイ (unix では半角カナはまずいよね)
とりあえず使ってみた、crossstats.sps は動くようになった。しかし、
------------------------------------------
>警告 # 67. Command name: GET FILE
>ドキュメントは、すでに別のユーザーまたはプロセスによって使用中です。 ドキュメントに修正を加えると別のユーザーの修正を上書きしたり、
>修正内容を別のユーザによって上書きされる可能性があります。
>開かれたファイル D:\Program Files\SPSSInc\Statistics17\OMS3.sav
>警告 # 67. Command name: GET FILE
>ドキュメントは、すでに別のユーザーまたはプロセスによって使用中です。 ドキュメントに修正を加えると別のユーザーの修正を上書きしたり、
>修正内容を別のユーザによって上書きされる可能性があります。
>開かれたファイル D:\Program Files\SPSSInc\Statistics17\OMS4.sav
>警告 # 67. Command name: get file
>ドキュメントは、すでに別のユーザーまたはプロセスによって使用中です。 ドキュメントに修正を加えると別のユーザーの修正を上書きしたり、
>修正内容を別のユーザによって上書きされる可能性があります。
>開かれたファイル D:\Program Files\SPSSInc\Statistics17\crossOMS.sav
------------------------------------------
という警告がでてくる。
set errors none.
というコマンドを入れればいいようだが、同時にエラーのときにもメッセージがでなくなるので公開版ではつけないことにした。
メニューへ トップへ (271)へ
SPSS17 SPSS17版到着
今年からSPSS日本語版のバージョンアップが英語版と同じ9月になった。先週、17版とAMOS17版がついた。AMOSはファイルを開くがうまく動かない。amwファイルをダブルクリックすれば読み込んで走るのでまあとりあえず使える。
SPSSのほうは訳語が変わっているのもあるようだ。とりあえず動くことを確認した。SPSS16版のようなインストールでトラブることはなかった。
メニューへ トップへ (270)へ
Python SPSSのPythonからRを使う
一般的にPythonからRを使うためのモジュールがある。
RPy (R from Python)
これを使えば、SPSSのPythonからRを使えるそうだ。試していないが情報のみ。
http://listserv.uga.edu/cgi-bin/wa?A2=ind0705&L=spssx-l&F=&S=&P=6222
メニューへ トップへ (269)へ
因子分析 種々の回転法のシンタックス(行列言語)
因子分析における種々の回転法の行列言語(シンタックス)が公開されている。
http://www.stat.ucla.edu/research/gpa/>Gradient Projection Algorithms and Software for Arbitrary Rotation Criteria in Factor Analysis by Coen A. Bernaards and Robert I. Jennrich.
- Bentler's invariant pattern simplicity,
- biquartimax (oblimin with gamma=.5),
- biquartimin (oblimin with gamma=.5),
- Crawford-Ferguson,
- equamax (oblimin with gamma=p/2),
- factor parsimony (Crawford-Ferguson with kappa=1),
- geomin,
- infomax,
- minimum entropy,
- McCammon minimum entropy ratio,
- oblimax,
- oblimin,
- orthomax (orthogonal oblimin),
- parsimax (Crawford-Ferguson with kappa=(k-1)/(p+k-2)),
- partially specified target rotation,
- promax,
- quartimax,
- quartimin,
- simplimax,
- tandem principle I and tandem principle II,
- target rotation,
- varimax.
と多くの回転法をサポートしている。残念ながら Harris-Kaiser(Orthoblique)をサポートしていない。
シンタックスをそのまま走らせると9つ結果がでた。行列言語をシンプルに使っているだけなので、出力が親切でない点も残念なことだ。また、因子負荷量をデータ窓またはファイルから取り入れるようにしたほうが便利であろう。
メニューへ トップへ (268)へ
GENLIN 一般化線型モデル(GLM)の使い方初歩
名義尺度や非正規分布尺度、間隔尺度などあらゆる尺度を分散分析のように分析できる、一般線形モデル(GLM)を拡張したものです。多重比較ができることなどから対数線型モデルよりもわかりやすい結果を得ることができます。
日本語のマニュアルはC:\spss\japanese\SPSS Advanced Models 15.0.pdf6章である。
日本語の事例つきの解説は田中豊・垂水共之・脇本和昌(1990)『パソコン統計解析ハンドブックV 多変量分散分析・線型モデル偏』共立出版、丹後俊郎(2000a)『医学統計学シリーズ2統計モデル入門 』朝倉書店などにある。
また、インターネットを検索してもいくつかでてくる。Google
spss の事例研究もあるのでそれを学ぶのも良い。ships.sav car_insurance_claims.sav ulcer_recurrence.sav がデータとして扱われる。
メニューへ トップへ (267)へ
GENLIN GEE(一般化推定方程式)の使い方初歩
SPSS15からGEEが使えるようになった。
分析→一般化線型モデル→一般化推計方程式
とするとGEEのメニューの中に入る。ここでヘルプをクリック→ヒントをクリック
とすると、英文でガイドをしてくれる。wheeze_steubenville.savを使った例repeated measures logistic regressionの場合の説明をしてくれる。\spss\Tutorial\sample_files\wheeze_steubenville.sav をあらかじめデータ窓に呼び出しておくと便利である。
日本語のマニュアルはC:\spss\japanese\SPSS Advanced Models 15.0.pdf7章である。
メニューへ トップへ (266)へ
クロス集計表カイ2乗値、p値、効果量、AIC一括リストmacro
SPSS ときど記(262) 2007/ 3/10 OMS クロス集計表χ2値, p値,効果量, AICをまとめて出力を発展させて、クロス集計表カイ2乗値、p値、効果量、AIC一括リストのmacroを作った。macro よりもスクリプトのほうが使いやすいが、とりあえずマクロでいいだろう。シンタックスと大して変わらないのだが、後で使うときにはマクロのほうが楽である。スクリプトはさらに楽なので、できればそちらに移行したい。
AIC順 出力例
効果量順 出力例
メニューへ トップへ (265)へ
BASE spssのfactorとcovariateの使い方
Bruce Weaverによると、GLMについてのコメントの中で、SPSSのfactor カテゴリー変数であり、covariateは連続変数である。
メニューへ トップへ (264)へ
クロス集計表χ2値, p値,効果量, AICをまとめて出力シンタックス
メニューへ トップへ (262)へ
SPSS ときど記(261) 2007/ 3/ 8 OMS OMS(出力管理システム)初歩2を発展させて、値, p値,効果量, AICをまとめて出力するシンタックスを完成させた。1行目のget file='.\Tutorial\sample_files\demo.sav'.はSPSS15についているサンプルファイルを呼び出している。うまくいかない場合は自分でデータ窓に呼び出しておいてください。
/TABLES= ワイヤレス to 新聞 BY 婚姻状況
.
********************************.
** ↑↑変数を指定する。↑↑ **.
********************************.
|
のワイヤレス to 新聞部分と婚姻状況の部分に変数指定すれば他のデータの処理も出来ます。
下のシンタックスをシンタックス窓に貼り付けて走らせてみてください。
調整済み残差だけのクロス集計表、処理順、AIC順、効果量順の表が出力されます。AIC順の例。この例の場合は変数名・変数ラベルがダブって入力されているので見にくい。
クロス集計表のカイ2乗値と効果量(AIC順)
| TableNumber_ | クロス集計 | 有効数_N | 有効数_パーセント | カイ2乗値 | 尤度比 | 自由度 | p値 | 効果量 | AIC |
1 | 14 | 新聞 新聞の購読 * 婚姻状況 婚姻状況 | 6400 | 100.0% | 91.332 | 91.551 | 1 | .000 | -.119 | -89.55 |
2 | 2 | 複数回線 複数回線 * 婚姻状況 婚姻状況 | 6400 | 100.0% | 46.465 | 46.521 | 1 | .000 | .085 | -44.52 |
3 | 3 | ボイス ボイスメール * 婚姻状況 婚姻状況 | 6400 | 100.0% | 36.000 | 36.033 | 1 | .000 | .075 | -34.03 |
4 | 4 | ポケベル ポケベルサービス * 婚姻状況 婚姻状況 | 6400 | 100.0% | 28.089 | 28.127 | 1 | .000 | .066 | -26.13 |
5 | 9 | VIDEO VIDEO * 婚姻状況 婚姻状況 | 6400 | 100.0% | 15.242 | 15.404 | 1 | .000 | .049 | -13.40 |
6 | 10 | CD CDプレーヤー * 婚姻状況 婚姻状況 | 6400 | 100.0% | 9.623 | 9.709 | 1 | .002 | .039 | -7.71 |
7 | 8 | TV TV * 婚姻状況 婚姻状況 | 6400 | 100.0% | 2.516 | 2.535 | 1 | .113 | .020 | -.54 |
8 | 6 | コールID コールID * 婚姻状況 婚姻状況 | 6400 | 100.0% | 1.790 | 1.790 | 1 | .181 | .017 | .21 |
9 | 1 | ワイヤレス ワイヤレスサービス * 婚姻状況 婚姻状況 | 6400 | 100.0% | 1.269 | 1.269 | 1 | .260 | .014 | .73 |
10 | 13 | FAX FAX * 婚姻状況 婚姻状況 | 6400 | 100.0% | 1.256 | 1.256 | 1 | .262 | .014 | .74 |
11 | 5 | インターネット インターネット * 婚姻状況 婚姻状況 | 6145 | 96.0% | .283 | .283 | 1 | .595 | -.007 | 1.72 |
12 | 12 | PC PC * 婚姻状況 婚姻状況 | 6400 | 100.0% | .204 | .204 | 1 | .652 | -.006 | 1.80 |
13 | 11 | PDA 携帯情報端末 * 婚姻状況 婚姻状況 | 6400 | 100.0% | .081 | .081 | 1 | .775 | -.004 | 1.92 |
14 | 7 | キャッチホン キャッチホンサービス * 婚姻状況 婚姻状況 | 6400 | 100.0% | .014 | .014 | 1 | .907 | -.001 | 1.99 |
*********************************************************.
get file='.\Tutorial\sample_files\demo.sav'.
* ファイ係数.
OMS
/SELECT TABLES
/IF COMMANDS = ["Crosstabs"]
SUBTYPES = [ 'Symmetric Measures']
/DESTINATION FORMAT = SAV NUMBERED = TableNumber_
OUTFILE = "OMS.sav".
*カイ2乗値.
OMS
/SELECT TABLES
/IF COMMANDS = ["Crosstabs"]
SUBTYPES = [ 'Chi Square Tests']
/DESTINATION FORMAT = SAV NUMBERED = TableNumber_
OUTFILE = "OMS3.sav".
*クロス集計変数リスト.
OMS
/SELECT TABLES
/IF COMMANDS = ["Crosstabs"]
SUBTYPES = [ 'Case Processing Summary' ]
/DESTINATION FORMAT = SAV NUMBERED = TableNumber_
OUTFILE = "OMS4.sav".
*oms 指定の終了.
**********************.
preserve.
set ovars=both tvars=both.
*クロス集計の実行.
CROSSTABS
/CELLS= ASRESID/statistics=chi phi
/TABLES= ワイヤレス to 新聞 BY 婚姻状況
.
********************************.
** ↑↑変数を指定する。↑↑ **.
********************************.
OMSEND.
*omsコマンド終了.
****************.
*ファイ計数のとりだし.
****************.
GET FILE='OMS.sav'.
select if (Var2="ファイ").
save outfile='OMS.sav'/drop=Command_ Subtype_ Label_ Var1 Var2 近似有意確率
/rename=(値=効果量).
****************.
*カイ2乗値等のとりだし.
****************.
GET FILE='OMS3.sav'.
select if (Var1="Pearson のカイ2乗 ").
save outfile='OMS31.sav'/drop=Var1 Command_ Subtype_ Label_
/rename=(値=カイ2乗値)(漸近有意確率両側=p値).
exec.
********************.
*尤度比χ2統計量の取り出し.
*********************.
GET FILE='OMS3.sav'.
select if (Var1="尤度比").
save outfile='OMS32.sav'/keep=TableNumber_ 値
/rename=(値=尤度比).
*GET FILE='OMS32.sav'.
exec.
*******************.
*クロス集計変数の取り出し.
*******************.
GET FILE='OMS4.sav'.
compute TableNumber_=$casenum.
save outfile='OMS4.sav'/drop=Command_ Subtype_ Label_ 欠損_N 欠損_パーセント 合計_N
合計_パーセント
/rename=(Var1=クロス集計).
exec.
****************.
*ファイルの合併.
****************.
GET FILE='OMS4.sav'.
match files file=*/FILE='OMS31.sav'/FILE='OMS32.sav'/ file=='OMS.sav'/by TableNumber_.
save outfile='crossOMS.sav'.
exec.
**********************************.
*合併を反映させたファイルを使用してAICの計算.
**********************************.
get file='crossOMS.sav'.
compute AIC=2*自由度-尤度比.
compute 効果量=abs(効果量).
save outfile='crossOMS.sav'.
**************.
set ovars=names tvars=names.
****************.
*処理順に書き出し.
****************.
summarize table=TableNumber_ クロス集計 有効数_N 有効数_パーセント カイ2乗値 尤度比 自由度 p値 効果量 AIC
/title='クロス集計表のカイ2乗値と効果量(処理順)'
/cellls=none
/format=list nocasenum nototal/statistics=none.
****************.
*AIC順に書き出し.
****************.
sort cases by AIC(A).
summarize table=TableNumber_ クロス集計 有効数_N 有効数_パーセント カイ2乗値 尤度比 自由度 p値 効果量 AIC
/title='クロス集計表のカイ2乗値と効果量(AIC順)'
/cellls=none
/format=list nocasenum nototal/statistics=none.
****************.
*効果量順に書き出し.
****************.
sort cases by 効果量(D).
summarize table=TableNumber_ クロス集計 有効数_N 有効数_パーセント カイ2乗値 尤度比 自由度 p値 効果量 AIC
/title='クロス集計表のカイ2乗値と効果量(効果量順)'
/cellls=none
/format=list nocasenum nototal/statistics=none.
restore.
*********************************************************.
メニューへ トップへ (263)へ
OMS OMS(出力管理システム)初歩2
OMSは表ごとに出力を記述する。クロス集計表で、効果量をまとめて知りたいときにファイ係数とクレーマーのVを出力する。2×2のときはファイ係数、それ以外のときはクレーマーのV係数であるが、SPSSは両者同じ値を出力するので片一方があれば十分である。とりあえず、spss15のサンプルファイルdemo.sav を使って処理してみよう。
get file='.\Tutorial\sample_files\demo.sav'.
OMS
/SELECT TABLES
/IF COMMANDS = ["Crosstabs"]
SUBTYPES = [ 'Symmetric Measures']
/DESTINATION FORMAT = SAV NUMBERED = TableNumber_
OUTFILE = "OMS.sav".
CROSSTABS
/CELLS= ASRESID/statistics=chi phi
/TABLES= ワイヤレス to TV BY 婚姻状況
.
omsend.
GET FILE="OMS.sav".
exec.
|
OMS.savは次のようになる。
TableNumber_ | Command_ | Subtype_ | Label_ | Var1 | Var2 | 値 | 近似有意確率 |
1 | Crosstabs | Symmetric Measures | 対称性による類似度 | 名義と名義 | ファイ | .014 | .260 |
1 | Crosstabs | Symmetric Measures | 対称性による類似度 | 名義と名義 | Cramer の V | .014 | .260 |
1 | Crosstabs | Symmetric Measures | 対称性による類似度 | 有効なケースの数 | | 6400 | . |
2 | Crosstabs | Symmetric Measures | 対称性による類似度 | 名義と名義 | ファイ | .085 | .000 |
2 | Crosstabs | Symmetric Measures | 対称性による類似度 | 名義と名義 | Cramer の V | .085 | .000 |
2 | Crosstabs | Symmetric Measures | 対称性による類似度 | 有効なケースの数 | | 6400 | . |
3 | Crosstabs | Symmetric Measures | 対称性による類似度 | 名義と名義 | ファイ | .075 | .000 |
3 | Crosstabs | Symmetric Measures | 対称性による類似度 | 名義と名義 | Cramer の V | .075 | .000 |
3 | Crosstabs | Symmetric Measures | 対称性による類似度 | 有効なケースの数 | | 6400 | . |
4 | Crosstabs | Symmetric Measures | 対称性による類似度 | 名義と名義 | ファイ | .066 | .000 |
4 | Crosstabs | Symmetric Measures | 対称性による類似度 | 名義と名義 | Cramer の V | .066 | .000 |
4 | Crosstabs | Symmetric Measures | 対称性による類似度 | 有効なケースの数 | | 6400 | . |
5 | Crosstabs | Symmetric Measures | 対称性による類似度 | 名義と名義 | ファイ | -.007 | .595 |
5 | Crosstabs | Symmetric Measures | 対称性による類似度 | 名義と名義 | Cramer の V | .007 | .595 |
5 | Crosstabs | Symmetric Measures | 対称性による類似度 | 有効なケースの数 | | 6400 | . |
6 | Crosstabs | Symmetric Measures | 対称性による類似度 | 名義と名義 | ファイ | .017 | .181 |
6 | Crosstabs | Symmetric Measures | 対称性による類似度 | 名義と名義 | Cramer の V | .017 | .181 |
6 | Crosstabs | Symmetric Measures | 対称性による類似度 | 有効なケースの数 | | 6400 | . |
7 | Crosstabs | Symmetric Measures | 対称性による類似度 | 名義と名義 | ファイ | -.001 | .907 |
7 | Crosstabs | Symmetric Measures | 対称性による類似度 | 名義と名義 | Cramer の V | .001 | .907 |
7 | Crosstabs | Symmetric Measures | 対称性による類似度 | 有効なケースの数 | | 6400 | . |
8 | Crosstabs | Symmetric Measures | 対称性による類似度 | 名義と名義 | ファイ | .020 | .113 |
8 | Crosstabs | Symmetric Measures | 対称性による類似度 | 名義と名義 | Cramer の V | .020 | .113 |
8 | Crosstabs | Symmetric Measures | 対称性による類似度 | 有効なケースの数 | | 6400 | . |
この出力ではどのようなクロス表のファイ係数なのかわからない。これをわかるようにするにはどうしたらよいか。
SPSSには「処理したケースの要約」が出力される。これがSUBTYPES = [ 'Case Processing Summary' ]。の
処理したケースの要約
|
ケース |
有効数 |
欠損 |
合計 |
N |
パーセント |
N |
パーセント |
N |
パーセント |
ワイヤレス * 婚姻状況 |
6400 |
100.0% |
0 |
.0% |
6400 |
100.0% |
複数回線 * 婚姻状況 |
6400 |
100.0% |
0 |
.0% |
6400 |
100.0% |
ボイス * 婚姻状況 |
6400 |
100.0% |
0 |
.0% |
6400 |
100.0% |
ポケベル * 婚姻状況 |
6400 |
100.0% |
0 |
.0% |
6400 |
100.0% |
インターネット * 婚姻状況 |
6145 |
96.0% |
255 |
4.0% |
6400 |
100.0% |
コールID * 婚姻状況 |
6400 |
100.0% |
0 |
.0% |
6400 |
100.0% |
キャッチホン * 婚姻状況 |
6400 |
100.0% |
0 |
.0% |
6400 |
100.0% |
TV * 婚姻状況 |
6400 |
100.0% |
0 |
.0% |
6400 |
100.0% |
get file='.\Tutorial\sample_files\demo.sav'.
OMS
/SELECT TABLES
/IF COMMANDS = ["Crosstabs"]
SUBTYPES = [ 'Case Processing Summary' ]
/DESTINATION FORMAT = SAV NUMBERED = TableNumber_
OUTFILE = "OMS4.sav".
CROSSTABS
/CELLS= ASRESID/statistics=chi phi
/TABLES= ワイヤレス to TV BY 婚姻状況
.
omsend.
GET FILE="OMS4.sav".
exec.
|
OMS4.sav
TableNumber_ | Command_ | Subtype_ | Label_ | Var1 | 有効数_N | 有効数_パーセント | 欠損_N | 欠損_パーセント | 合計_N | 合計_パーセント |
1 | Crosstabs | Case Processing Summary | 処理したケースの要約 | ワイヤレス * 婚姻状況 | 6,400 | 100.0% | 0 | 0.0% | 6,400 | 100.0% |
1 | Crosstabs | Case Processing Summary | 処理したケースの要約 | 複数回線 * 婚姻状況 | 6,400 | 100.0% | 0 | 0.0% | 6,400 | 100.0% |
1 | Crosstabs | Case Processing Summary | 処理したケースの要約 | ボイス * 婚姻状況 | 6,400 | 100.0% | 0 | 0.0% | 6,400 | 100.0% |
1 | Crosstabs | Case Processing Summary | 処理したケースの要約 | ポケベル * 婚姻状況 | 6,400 | 100.0% | 0 | 0.0% | 6,400 | 100.0% |
1 | Crosstabs | Case Processing Summary | 処理したケースの要約 | インターネット * 婚姻状況 | 6,145 | 96.0% | 255 | 4.0% | 6,400 | 100.0% |
1 | Crosstabs | Case Processing Summary | 処理したケースの要約 | コールID * 婚姻状況 | 6,400 | 100.0% | 0 | 0.0% | 6,400 | 100.0% |
1 | Crosstabs | Case Processing Summary | 処理したケースの要約 | キャッチホン * 婚姻状況 | 6,400 | 100.0% | 0 | 0.0% | 6,400 | 100.0% |
1 | Crosstabs | Case Processing Summary | 処理したケースの要約 | TV * 婚姻状況 | 6,400 | 100.0% | 0 | 0.0% | 6,400 | 100.0% |
ちょっと困ったことが起こっている。
(1)TableNumber_がすべて1となっている。TableNumber_はOMS出力を後でmatch filesを使ってつなぐときに必要な番号である
→$casenum をコピーして使う。
compute TableNumber_=$casenum.
(2)余計な出力が一杯あるのでこれを落とす必要がある。
- select ifを使って、リストワイズに落とす。この表では必要ない。
- save fileのkeep=またはdrop=を使って変数を絞り込む。ついでに、Var1という変数名をクロス集計に変えておく。
GET FILE='OMS4.sav'.
save outfile='OMS4.sav'/drop=Command_ Subtype_ Label_ 欠損_N 欠損_パーセント 合計_N
合計_パーセント
/rename=(Var1=クロス集計).
exec.
(3)Label_が必要な変数である。この出力は、変数名とラベルとその両者の3つのタイプがあり、設定は人によったり、場合によって様々であろう。とりあえず変数ラベルがついているのがあとでわかりやすい。見やすさからすると変数名だけのほうがいいかもしれない。この例は変数名でわかるものなのでその点がわからない。変数名と変数ラベルを出力するようにしよう。set tvars=bothの指定を入れる。
preserve.
set ovars=both tvars=both.
get file='.\Tutorial\sample_files\demo.sav'.
OMS
/SELECT TABLES
/IF COMMANDS = ["Crosstabs"]
SUBTYPES = [ 'Case Processing Summary' ]
/DESTINATION FORMAT = SAV NUMBERED = TableNumber_
OUTFILE = "OMS4.sav".
preserve.
set tvars=both.
CROSSTABS
/CELLS= ASRESID/statistics=chi phi
/TABLES= ワイヤレス to TV BY 婚姻状況
.
omsend.
GET FILE='OMS4.sav'.
compute TableNumber_=$casenum.
save outfile='OMS4.sav'/drop=Command_ Subtype_ Label_ 欠損_N 欠損_パーセント 合計_N
合計_パーセント
/rename=(Var1=クロス集計).
exec.
GET FILE='OMS4.sav'.
|
処理後のOMS4.sav
TableNumber_ | クロス集計 | 有効数_N | 有効数_パーセント |
1 | ワイヤレス * 婚姻状況 | 6,400 | 100.0% |
2 | 複数回線 * 婚姻状況 | 6,400 | 100.0% |
3 | ボイス * 婚姻状況 | 6,400 | 100.0% |
4 | ポケベル * 婚姻状況 | 6,400 | 100.0% |
5 | インターネット * 婚姻状況 | 6,145 | 96.0% |
6 | コールID * 婚姻状況 | 6,400 | 100.0% |
7 | キャッチホン * 婚姻状況 | 6,400 | 100.0% |
8 | TV * 婚姻状況 | 6,400 | 100.0% |
有効数_Nと有効数_パーセントも最後の結果に残すことにした。
ファイ係数も必要事項だけ残すようにする。ファイ係数の行だけを残し(select if)、変数値を効果量にかえる。
GET FILE='OMS.sav'.
select if (Var2="ファイ").
save outfile='OMS.sav'/drop=Command_ Subtype_ Label_ Var1 Var2 近似有意確率
/rename=(値=効果量).
*************.
GET FILE='OMS.sav'.
|
処理後のOMS.sav
TableNumber_ | 効果量 |
1 | 0.014 |
2 | 0.085 |
3 | 0.075 |
4 | 0.066 |
5 | -0.007 |
6 | 0.017 |
7 | -0.001 |
8 | 0.020 |
このOMS.savとOMS4.savをくっつければいい。これはmathc filesを使用する。
GET FILE='OMS4.sav'.
match files file=*/ file=='OMS.sav'/by TableNumber_.
save outfile='crossOMS.sav'.
exec.
get file='crossOMS.sav'.
|
処理後のcrossOMS.sav
TableNumber_ | クロス集計 | 有効数_N | 有効数_パーセント | 効果量 |
1 | ワイヤレス * 婚姻状況 | 6,400 | 100.0% | 0.014 |
2 | 複数回線 * 婚姻状況 | 6,400 | 100.0% | 0.085 |
3 | ボイス * 婚姻状況 | 6,400 | 100.0% | 0.075 |
4 | ポケベル * 婚姻状況 | 6,400 | 100.0% | 0.066 |
5 | インターネット * 婚姻状況 | 6,145 | 96.0% | -0.007 |
6 | コールID * 婚姻状況 | 6,400 | 100.0% | 0.017 |
7 | キャッチホン * 婚姻状況 | 6,400 | 100.0% | -0.001 |
8 | TV * 婚姻状況 | 6,400 | 100.0% | 0.020 |
データ窓を見ただけでも分かるが、summarizeを使って出力窓に報告書を作成する。このとき、例えば効果量の順に出力していると、効果量の大きいクロス表を見落とすことはなくなる(sort cases by 効果量(D).
)。
set ovars=names tvars=names.
sort cases by 効果量(D).
summarize table=TableNumber_ クロス集計 有効数_N 有効数_パーセント 効果量
/title='クロス集計表の効果量'
/cellls=none
/format=list nocasenum nototal/statistics=none.
|
クロス集計表の効果量
|
TableNumber_ |
クロス集計 |
有効数_N |
有効数_パーセント |
効果量 |
1 |
2 |
複数回線 * 婚姻状況 |
6400 |
100.0% |
.085 |
2 |
3 |
ボイス * 婚姻状況 |
6400 |
100.0% |
.075 |
3 |
4 |
ポケベル * 婚姻状況 |
6400 |
100.0% |
.066 |
4 |
8 |
TV * 婚姻状況 |
6400 |
100.0% |
.020 |
5 |
6 |
コールID * 婚姻状況 |
6400 |
100.0% |
.017 |
6 |
1 |
ワイヤレス * 婚姻状況 |
6400 |
100.0% |
.014 |
7 |
7 |
キャッチホン * 婚姻状況 |
6400 |
100.0% |
-.001 |
8 |
5 |
インターネット * 婚姻状況 |
6145 |
96.0% |
-.007 |
---|
set ovars=names tvars=names.を使って変数名を使うように変更している。すべての効果量が極めて小さいことがわかる。
まとめて、シンタックスに書くと次のようになる。
get file='.\Tutorial\sample_files\demo.sav'.
OMS
/SELECT TABLES
/IF COMMANDS = ["Crosstabs"]
SUBTYPES = [ 'Symmetric Measures']
/DESTINATION FORMAT = SAV NUMBERED = TableNumber_
OUTFILE = "OMS.sav".
OMS
/SELECT TABLES
/IF COMMANDS = ["Crosstabs"]
SUBTYPES = [ 'Case Processing Summary' ]
/DESTINATION FORMAT = SAV NUMBERED = TableNumber_
OUTFILE = "OMS4.sav".
preserve.
set ovar=both tvar=both.
CROSSTABS
/CELLS= ASRESID/statistics=chi phi
/TABLES= ワイヤレス to TV BY 婚姻状況
.
omsend.
GET FILE='OMS.sav'.
select if (Var2="ファイ").
save outfile='OMS.sav'/drop=Command_ Subtype_ Label_ Var1 Var2 近似有意確率
/rename=(値=効果量).
GET FILE='OMS4.sav'.
compute TableNumber_=$casenum.
save outfile='OMS4.sav'/drop=Command_ Subtype_ Label_ 欠損_N 欠損_パーセント 合計_N
合計_パーセント
/rename=(Var1=クロス集計).
exec.
GET FILE='OMS4.sav'.
GET FILE='OMS4.sav'.
match files file=*/ file=='OMS.sav'/by TableNumber_.
save outfile='crossOMS.sav'.
exec.
get file='crossOMS.sav'.
set ovars=names tvars=names.
sort cases by 効果量(D).
summarize table=TableNumber_ クロス集計 有効数_N 有効数_パーセント 効果量
/title='クロス集計表の効果量'
/cellls=none
/format=list nocasenum nototal/statistics=none.
restore.
|
- 最初のget file='.\Tutorial\sample_files\demo.sav'.はSPSS15のサンプルファイル(demo.sav)を呼び出している。うまくいかない場合は、あらかじめデータ窓に呼び出しておいてください。
- omsコマンドはここにあるように複数指定して、統計命令を走らせます。omsendは最後に1つでいいのです。
- omsの出力はいろいろ不便で、omsの中でコントロール使用とするのでなく、一度保存してから、get fileで呼び出し、加工して再度保存するのがいいでしょう。oms出力をいろいろ工夫するより早く柔軟にできます。
- 最後のrestoreはpreserveしたsetを復活させます。
- ファイ係数の近似有意確率はχ2検定のp値と同じですのでこれを使ってもいいのですが、ここでは使わないでいます。
メニューへ トップへ (262)へ
堀 啓造ホームページへ