spss ときど記(181〜190)count: <!--#exec cmd="./count.pl"-->

SPSS ときど記(181〜190)

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

(171)〜(180) ときど記(メニュー)へ  (191)〜(200)

  1. SPSS ときど記(190) 2004/ 9/16 クラスター分析 デンドログラムのjpeg化 (9/18追加あり)
  2. SPSS ときど記(189) 2004/ 9/15 クラスター分析 デンドログラムのワープロへのコピー2
  3. SPSS ときど記(188) 2004/ 9/ 9 クラスター分析 デンドログラムのワープロへのコピー
  4. SPSS ときど記(187) 2004/ 8/18 クロス表 効果量の信頼区間を求めるsyntax (2004/8/25訂正)
  5. SPSS ときど記(186) 2004/ 8/11 分散分析 効果量の信頼区間を求めるsyntax
  6. SPSS ときど記(185) 2004/ 8/11 OMS ブートスラップのマクロ修正版
  7. SPSS ときど記(184) 2004/ 8/ 9 OMS ブートスラップのマクロ
  8. SPSS ときど記(183) 2004/ 8/ 6 マクロ メタ分析マクロサイト
  9. SPSS ときど記(182) 2004/ 8/ 3 因子分析 異なる因子分析の因子の対応チェックと回転syntax
  10. SPSS ときど記(181) 2004/ 7/13 スクリプト エラーの発生箇所の特定

SPSS ときど記(190) 2004/ 9/16

クラスター分析 デンドログラムのjpeg化 (9/18追加あり)

フォント問題があるので画像ファイルで出力するのが一番であろう.

(1)画像は画面から直接コピーするのが簡単である.alt+ScreenPrint でアクティブな窓をbmpでクリップボードに送られる.これをpaint系ソフトで受け取って処理すればいい.アクセサリにあるペイントを使えば,切り取り部分をファイルに保存できる.その保存したbmp ファイルを再度ペイントで読み込み,jpgで保存する.bmp はjpeg よりもかなり大きな容量を必要とする.
(2)画面コピーは一画面なのでそれより大きい場合は複数画面をコピーしてつなぎ合わせることになる.しかしペイントは画像の大きさに制限が強くあるようだ.他のソフトならできるのかもしれない.また,word2003 や一太郎などでリッチテキストファイルのまま受け取り,縮小して画面に表示してこれを画面コピーすればある程度の大きさまで可能になるだろう.しかし,限界がある.一太郎方式のよに頁を切って表示するという手もある.
次に例を挙げる.2つ目の図のように線を引いてやればさらにわかりやすくなる.

一太郎のhtmlファイルにはspss mark fontが含まれているので,spssユーザしか文字をみることができないようだ.そこで,一太郎についている他形式の保存の「画像に変換して保存」を使う.jpgで保存されるのでこれを使ってみよう.すると哀れなほど線ががたがただ.


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


SPSS ときど記(189) 2004/ 9/15

クラスター分析 デンドログラムのワープロへのコピー2

さらにチェックを入れたところ,wordの保存はhtmlファイルではなかった.mht という拡張子で保存される.ちなみに拡張子をhtml と書き直すとデンドログラムが文字化けする.さらにこれをダブルクリックするとNetscape をwebソフトの既定値にしているのに,IEが立ち上がる.保存してwindows の中でみてください.

MS-Word ファイル あれれ,windows上ではIEで表示されるのに,ネット上では文字化けだ.なんだろう.IEのバージョンだろうか? netscape では当然ダメだ.一応作ったパソコンとは別のパソコンにファイルをコピーしてwindows上ならちゃんと見えるのでファイルの問題はないと思う.

一太郎ファイル
というわけで一太郎を使ってください.

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


SPSS ときど記(188) 2004/ 9/ 9

デンドログラムのワープロへのコピー

クラスター分析のデンドログラムをワープロにコピーしようとするとちょっと困る.Word だと文字化けだ.一太郎だとデンドログラムには見えるが,プロポーショナルフォントが入っているためかカラムズレをしている.一太郎からすると線の部分はTimes New Roman(標準)フォントが使われている.しかしTimes New Romanフォントにすると文字化けをする.標準というのはなんなのだ.7.5ポイントを使っているが,空白部分がMSゴシック9ポイントを使っていたりする.う〜む.よくわからん.

ここで言っているWord はword2000である.word2003でやるときちんと表示されるし,html化すれば正しく表示された.(2004/9/10)

で,しかもドラフトビューに出力すると文字化けをしている.ドラフトビュー用のオプションをきちんと選択できるようにすべきだろう.

 とりあえずbox を指定すればコピーができる.昔の既定値だったと思う.それにしてもreference に載せておいてもいいはずだが,不親切にも載っていない.
set box="-|+++++++++".

ちょっとわかりにくい部分もあるがなんとか雰囲気はつかめるだろう.

 PASMCM   6  -+
 AIC     9  -+-+
 PASMC95   7  -+ +---------+
 RAWEIGEN  2  ---+     +-----------+
 SMCEIGEN  5  -------------+      |
 PAEIGM   3  -+-+           +-----------------------+
 PAEIG95   4  -+ +-----+        |            |
 NFI    17  ---+   |        |            |
 BIC    10  -+---+  +---------------+            |
 CAIC    11  -+  +-+ |                    |
 NNFI    18  -+  | | |                    |
 CFI    19  -+---+ +-+                    |
 CHI2    8  -+   |                     |
 RMSEA   12  -+   |                     |
 RMSR    16  -------+                     |
 MAP     1  -+---+                      |
 GFI    13  -+  +-----------+                |
 RGFI    15  -----+      +-------------------------------+
 AGFI    14  -----------------+


一太郎からhtml ファイルを作ると次のように出力される.この頁は行間を空けるように設定しているので少し開いてしまうが,もとはきちんとひっついている.しかし,印刷はやはり少しカラムズレをする.

* * * * * * H I E R A R C H I C A L C L U S T E R  A N A L Y S I S * * * * * *
 
 
Dendrogram using Average Linkage (Between Groups)
 
             Rescaled Distance Cluster Combine
 
  C A S E   0     5    10    15    20    25
 Label   Num +---------+---------+---------+---------+---------+
 
 PASMCM   6  òûòø
 AIC     9  ò÷ ùòòòòòø
 PASMC95   7  òòò÷   ùòòòòòòòòòòòòòòòø
 RAWEIGEN  2  òòòòòòòòò÷        ùòòòòòòòø
 SMCEIGEN  5  òòòòòòòòòòòòòòòòòòòòòòòòò÷    ó
 AGFI    14  òòòòòòòòòòòòòûòòòòòø       ùòòòòòòòòòòòòòòòø
 RMSR    16  òòòòòòòòòòòòò÷   ó       ó        ó
 PAEIGM   3  òûòòòø       ùòòòòòòòòòòòòò÷        ó
 PAEIG95   4  ò÷  ùòòòòòòòòòòòø ó               ó
 NFI    17  òòòòò÷      ùò÷               ó
 BIC    10  òòòûòòòòòø    ó                ó
 CAIC    11  òòò÷   ùòòòòòòò÷                ó
 NNFI    18  òûòø   ó                    ó
 CFI    19  ò÷ ùòòòòò÷                    ó
 CHI2    8  òòòú                       ó
 RMSEA   12  òòò÷                       ó
 MAP     1  òòòûòòòø                     ó
 GFI    13  òòò÷  ùòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòò÷
 RGFI    15  òòòòòòò÷
 
図 各指標間の関係性
(距離:都市ブロック・クラスター法:平均連結)
 


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


SPSS ときど記(187) 2004/ 8/18

クロス表 効果量の信頼区間を求めるsyntax (2004/8/25訂正)

Smithson氏の非心χ2分布を使ったχ2値の信頼区間を求めるシンタックス
NoncChi.sps はなぜか効果量を求めるものとなっていない.そこで,クロス表の場合の効果量と効果量の信頼区間を求めるシンタックスにした.

 Kline(2004) によるとクロス表の効果量はΦまたはCramerのV を使う.信頼区間の求め方はΦについて書いてあるがここでの求め方とは異なる.またKlineが言及しているFleiss(1994)のΦの信頼区間の求め方の求め方もこの方法ではない.

Smithson(2003)の本を手に入れたところ区間推定の計算に間違いがあったので修正する.(2004/8-25)

 下のシンタックスをコピーし,シンタックス窓に貼り付け,χ2値(chival),クロス表の縦横のそれぞれのカテゴリ数(cat1,cat2),総頻度数(N),信頼区間(conf)を各変数名でデータ窓に与え,このシンタックスをシンタックス窓から(実行→すべて)と走らせる.
 結果はデータ窓に出力される.例としてデータを与えたのでとりあえず,これをデータ窓に呼び出して,シンタックスを走らせてみてください.

Fleiss, J. L. (1994). Measures of effect size for categorical data. in Cooper, H. and Hedges, L. V. (eds.) The handbook of research synthesis. Russell Sage Foundation.
Kline, R.B. (2004). Beyond significance testing. APA.
Smithson, M. (2003). Confidence intervals. Sage.

*crosstable_effectsize.sps *****************.
*χ2値(chival),クロス表の縦横のそれぞれのカテゴリ数(cat1,cat2),サンプルサイズ(N),信頼区間(conf)
*を各変数名でデータ窓に与え,このシンタックスをシンタックス窓から(実行→すべて)と走らせる.
*結果はデータ窓に出力される.
*compute chival=9.45.
*compute cat1=2.
*compute cat2=3.
*compute N=150.
*compute conf=.90.
compute df=(cat1-1)*(cat2-1).
compute p_value=1-cdf.chisq(chival,df).
format p_value(f6.3).
compute lcdf=0.
compute ucdf=0.
var labels
chival "χ2値"/
cat1 "クロス表の横のカテゴリーの数"/
cat2 "クロス表の縦のカテゴリー数"/
N "サンプルサイズ"/
conf "信頼区間の大きさ 0.90 or 0.95"/
df "自由度".
* 以下はM.J.SmithsonのNoncChi.sps.
*http://www.anu.edu.au/psychology/staff/mike/CIstuff/CI.html
*.
COMMENT THIS COMPUTES THE LOWER LIMIT ON THE CHI-SQUARE NONCENTRALITY PARAMETER.
COMPUTE #LC3 = CHIVAL .
COMPUTE LC2 = CHIVAL/2 .
COMPUTE #LC1 = .001 .
COMPUTE #ULIM = 1-(1-CONF)/2 .
COMPUTE #CUMF1 = NCDF.CHISQ(CHIVAL,DF,#LC1) .
LOOP IF (#CUMF1 LT #ULIM) .
+ COMPUTE LC2 = #LC1 .
+ COMPUTE #LC1 = #LC1/4 .
+ COMPUTE #CUMF1 = NCDF.CHISQ(CHIVAL,DF,#LC1) .
END LOOP .
COMPUTE #CUMF3 = NCDF.CHISQ(CHIVAL,DF,#LC3) .
LOOP IF (#CUMF3 GT #ULIM) .
+ COMPUTE LC2 = #LC3 .
+ COMPUTE #LC3 = #LC3 + CHIVAL .
+ COMPUTE #CUMF3 = NCDF.CHISQ(CHIVAL,DF,#LC3) .
END LOOP .
COMPUTE #CUMF2 = NCDF.CHISQ(CHIVAL,DF,LC2) .
COMPUTE #DIFF = 1 .
LOOP IF (#DIFF GT .00005) .
+ DO IF (#CUMF2 LT #ULIM) .
+ COMPUTE #LC3 = LC2 .
+ COMPUTE LC2 = (LC2 + #LC1)/2 .
+ COMPUTE #CUMF2 = NCDF.CHISQ(CHIVAL,DF,LC2) .
+ ELSE .
+ COMPUTE #LC1 = LC2 .
+ COMPUTE LC2 = (LC2 + #LC3)/2 .
+ COMPUTE #CUMF2 = NCDF.CHISQ(CHIVAL,DF,LC2) .
+ END IF .
+ COMPUTE #DIFF = ABS(#CUMF2 - #ULIM) .
END LOOP .
COMPUTE UCDF = NCDF.CHISQ(CHIVAL,DF,LC2) .
EXECUTE .
COMMENT
COMMENT THIS COMPUTES THE UPPER LIMIT ON THE F NONCENTRALITY PARAMETER.
COMPUTE #UC3 = 3*CHIVAL .
COMPUTE UC2 = 2*CHIVAL .
COMPUTE #UC1 = CHIVAL .
COMPUTE #LLIM = (1-CONF)/2 .
COMPUTE #CUMF1 = NCDF.CHISQ(CHIVAL,DF,#UC1) .
LOOP IF (#CUMF1 LT #LLIM) .
+ COMPUTE UC2 = #UC1 .
+ COMPUTE #UC1 = #UC1/4 .
+ COMPUTE #CUMF1 = NCDF.CHISQ(CHIVAL,DF,#UC1) .
END LOOP .
COMPUTE #CUMF3 = NCDF.CHISQ(CHIVAL,DF,#UC3) .
LOOP IF (#CUMF3 GT #LLIM) .
+ COMPUTE UC2 = #UC3 .
+ COMPUTE #UC3 = #UC3 + CHIVAL .
+ COMPUTE #CUMF3 = NCDF.CHISQ(CHIVAL,DF,#UC3) .
END LOOP .
COMPUTE #CUMF2 = NCDF.CHISQ(CHIVAL,DF,UC2) .
COMPUTE #DIFF = 1 .
LOOP IF (#DIFF GT .00001) .
+ DO IF (#CUMF2 LT #LLIM) .
+ COMPUTE #UC3 = UC2 .
+ COMPUTE UC2 = (UC2 + #UC1)/2 .
+ COMPUTE #CUMF2 = NCDF.CHISQ(CHIVAL,DF,UC2) .
+ ELSE .
+ COMPUTE #UC1 = UC2 .
+ COMPUTE UC2 = (UC2 + #UC3)/2 .
+ COMPUTE #CUMF2 = NCDF.CHISQ(CHIVAL,DF,UC2) .
+ END IF .
+ COMPUTE #DIFF = ABS(#CUMF2 - #LLIM) .
END LOOP .
COMPUTE LCDF = NCDF.CHISQ(CHIVAL,DF,UC2) .
COMMENT
COMMENT THIS NEXT STATEMENT COMPUTES THE POWER IN RELATION TO THE CHISQUARE VALUE.
COMPUTE POWER = 1 - NCDF.CHISQ(IDF.CHISQ(1-(1-CONF)/2,DF),DF,CHIVAL) .
*以上 NoncChi.sps.
compute #minrc=cat1-1.
compute #r=(cat1-1)*(cat2-1).
if (#minrc>cat2-1) #minrc=cat2-1.
compute esize=sqrt(chival/#minrc/N).
compute lesize=sqrt((lc2+#r)/#minrc/N).
compute uesize=sqrt((uc2+#r)/#minrc/N).
var labels
p_value "p値"/
lcdf "信頼区間下限"/
ucdf "信頼区間上限"/
lc2 "χ2値下限"/
uc2 "χ2値上限"/
power "検出力"/
esize "効果量 Φ or CramerのV :r 相関系"/
lesize "効果量の下限"/
uesize "効果量の上限".
exec.
******************.
メニューへ  トップへ (188)へ


SPSS ときど記(186) 2004/ 8/11

分散分析 効果量の信頼区間を求めるsyntax

重回帰係数および分散分析の効果量の信頼区間を求めるシンタックスが公表されている.
米国心理学会では論文に効果量を書くように求めている.さらに効果量の信頼区間を入れるべきだというアジテーションはThompson(2002).

 シンタックスの元論文はSmithoson(2001)である.この論文も読んでみた方がいい.
 シンタックスはScripts and Software for Noncentral Confidence Interval and Power Calculations http://www.anu.edu.au/psychology/staff/mike/CIstuff/CI.htmlにある.Shimpsonのリンクはnetscape では行かない.また論文のリンク先もすでに違ってきている.
 なお,このシンタックスによるとspss の非心F分布を求める関数に問題があるそうだ.下のほうはいいが,上のほうに問題があるらしい.困ったことだ.なお,このサイトにはNoncentral t files, Noncentral Chi-square filesを求めるシンタックスもある.
 検定力を求めるプログラムもこいうふうにデータ窓に書き出すだけにしたほうがよかったのかな.

Smithson, M.J. (2001). Correct confidence intervals for various regression effect sizes and parameters: The importance of noncentral distributions in computing intervals. Educational and Psychological Measurement, 61, 603-630.
Thompson, B. (2002). What future quantitative social science research could look like: Confidence intervals for effect sizes. Educational Researcher, 31(3), 24-31.
Wilkinson, L. and Task Force on Statistical Inference APA Board of Scientific Affairs. (1999). Statistical Methods in Psychology Journals: Guidelines and Explanations. American Psychologist, 54, 594-604.

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


SPSS ときど記(185) 2004/ 8/11

OMS ブートスラップのマクロ修正版

spss 社から質問への回答があって,oms の指定の仕方の問題があったことがわかった.英語版を日本語に移植すれば動くことがわかった.出力もシンタックスも少しすっきりした.
その後の回答からspss12.01と12.02 では仕様が異なることが分かった.

 なお,ブートストラップは通常1000回やる.


統計量
初任給 非標準化係数 B初任給 標準化係数 ベータ在籍月数 非標準化係数 B在籍月数 標準化係数 ベータ
度数有効100100100100
欠損値0000
パーセンタイル2.51.7397.844499.6672.0551
97.52.1536.9115255.7293.1451


***oms_bootstrapping.sps*** modified by k.hori 2004/8/11.
*** define の中の /path!defalt(c:\spss) のc:\spss の部分は適当に作業するフォルダを割り当ててください.
* ベータは半角. インターネットの規制により全角にしてあるので変更してください.

*マクロの定義:サンプルを選んで、重回帰分析を実行し、95%範囲と頻度分布を描く.
DEFINE regression_bootstrap (samples=!TOKENS(1)
/path=!default('c:\spss')!TOKENS(1)
/depvar=!TOKENS(1)
/indvars=!CMDEND)

PRESERVE.
SET TVARS NAMES.

!let !temp=!quote(!concat(!path,'\temp.sav')).
!let !aggr=!quote(!concat(!path,'\aggrtemp.sav')).

*最初の OMS 命令。出力を押さえる.
OMS /DESTINATION VIEWER=NO /TAG='suppressall'.

*重回帰係数表の選択とデータファイルへの書き出し指定.
OMS /SELECT TABLES
/IF COMMANDS=['Regression'] SUBTYPES=['Coefficients']
/DESTINATION FORMAT=SAV OUTFILE=!temp
/COLUMNS DIMNAMES=[ '変数' '統計量']
/TAG='reg_coeff'.

COMPUTE dummyvar=1.
AGGREGATE
/OUTFILE=!aggr
/BREAK=dummyvar
/filesize=N.
MATCH FILES FILE=* /TABLE=!aggr
/BY dummyvar.
!DO !other=1 !TO !samples
SET SEED RANDOM.
WEIGHT OFF.
FILTER OFF.
DO IF $casenum=1.
- COMPUTE #samplesize=filesize.
- COMPUTE #filesize=filesize.
END IF.
DO IF (#samplesize>0 and #filesize>0).
- COMPUTE sampleWeight=rv.binom(#samplesize, 1/#filesize).
- COMPUTE #samplesize=#samplesize-sampleWeight.
- COMPUTE #filesize=#filesize-1.
ELSE.
- COMPUTE sampleWeight=0.
END IF.
WEIGHT BY sampleWeight.
FILTER BY sampleWeight.
REGRESSION
/STATISTICS COEFF
/DEPENDENT !depvar
/METHOD=ENTER !indvars.
!DOEND
OMSEND.
*****oms 終了.

GET FILE !temp.
exec.
!let !a=''.
!do !i !in ( !indvars ).
*** spss12.01 の場合 "_A"), spss12.02 の場合 "_ベータ".
!let !a=!concat(!a,' ',!concat(!i,"_B"),' ',!concat(!i,"_A")).
*** spss12.02 の場合下の*をとる.
* !let !a=!concat(!a,' ',!concat(!i,"_B"),' ',!concat(!i,"_ベータ")).
!doend.

FREQUENCIES
VARIABLES=!a
/FORMAT NOTABLE
/PERCENTILES= 2.5 97.5
/HISTOGRAM NORMAL
.

RESTORE.

!ENDDEFINE.
*マクロ定義終了.

***データファイルの呼び出し。データ窓に呼び出しておいてもよい.
GET FILE='c:\SPSS\Employee data.sav'.

***マクロ呼び出し, sample=ブートストラップする数, depvar=従属変数, indvars=独立変数s **.

regression_bootstrap
samples=100
depvar=給与
indvars=初任給 在籍月数 .
*****************.

ps. 2004/8/13
spss12.01 とspss12.02 で仕様の変わった部分がある.
*** spss12.01 の場合 "_A"), spss12.02 の場合 "_ベータ". !let !a=!concat(!a,' ',!concat(!i,"_B"),' ',!concat(!i,"_A")).
*** spss12.02 の場合下の*をとる. * !let !a=!concat(!a,' ',!concat(!i,"_B"),' ',!concat(!i,"_ベータ")).
とコメントしているので適宜修正してください.

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


SPSS ときど記(184) 2004/ 8/ 9

OMS ブートスラップのマクロ

spss12からoms という統計命令がついている.ブートストラップをしやすくするための命令である.統計出力の特定部分だけをファイルに保存できる.また,出力窓への出力を押さえることができる.

 spssのフォルダーの下の Tutorial\sample_files\ の下にoms_bootstrapping.spsというファイルがあり,その使用例となっている.重回帰分析の非標準係数と標準係数をブートストラップするものである.
 走らしてみるとうまくいかない.ここで使っているEmployee data.savの変数名が日本語になっている.frequencies 処理の時に使っているファイルの変数名がfrequencies の中で使っている変数名と違う.というわけでif 文を使って新たに変数名をつけなんとか動いた.
 しかし,元のマクロはおかしい.マクロの外に OMSEND.がある.いくつかの点がマクロらしくないのできちんとしたマクロにした.
 元のマクロの味噌はbootstrap をケースの重み付けにしている点である.

 
 使用上の注意: define の中の /path!defalt(c:\spss) のc:\spss の部分は適当に作業するフォルダを割り当ててください.
また, ベータは半角. もしもインターネットの規制により全角にしてあれば半角に変更してください.

 
以下ブートストラップの回数を100回,1000回で行ってい見たもの.グラフは1例を挙げた.
 
   
統計量sample=100統計量sample=1000
初任給B初任給β在籍月数B在籍月数β 初任給B初任給β在籍月数B在籍月数β
度数有効100100100100度数有効1000100010001000
欠損値1300130013001300欠損値13000130001300013000
パーセンタイル2.51.7125 0.8423 97.3138 0.0547 パーセンタイル2.51.7498 0.8434 102.8865 0.0614
97.52.1947 0.9221 268.9646 0.1650 97.52.1216 0.9124 245.5712 0.1474

sample=100sample=1000


***oms_bootstrapping.sps*** modified by k.hori 2004/8/9.
*** define の中の /path!defalt(c:\spss) のc:\spss の部分は適当に作業するフォルダを割り当ててください.
* ベータは半角. インターネットの規制により全角にしてあるので変更してください.

*マクロの定義:サンプルを選んで、重回帰分析を実行し、95%範囲と頻度分布を描く.
DEFINE regression_bootstrap (samples=!TOKENS(1)
/path=!default('c:\spss')!TOKENS(1)
/depvar=!TOKENS(1)
/indvars=!CMDEND)

PRESERVE.
SET TVARS NAMES.

!let !temp=!quote(!concat(!path,'\temp.sav')).
!let !aggr=!quote(!concat(!path,'\aggrtemp.sav')).

*最初の OMS 命令。出力を押さえる.
OMS /DESTINATION VIEWER=NO /TAG='suppressall'.

*重回帰係数表の選択とデータファイルへの書き出し指定.
OMS /SELECT TABLES
/IF COMMANDS=['Regression'] SUBTYPES=['Coefficients']
/DESTINATION FORMAT=SAV OUTFILE=!temp
/COLUMNS DIMNAMES=[ 'Variables' 'Statistics']
/TAG='reg_coeff'.

COMPUTE dummyvar=1.
AGGREGATE
/OUTFILE=!aggr
/BREAK=dummyvar
/filesize=N.
MATCH FILES FILE=* /TABLE=!aggr
/BY dummyvar.
!DO !other=1 !TO !samples
SET SEED RANDOM.
WEIGHT OFF.
FILTER OFF.
DO IF $casenum=1.
- COMPUTE #samplesize=filesize.
- COMPUTE #filesize=filesize.
END IF.
DO IF (#samplesize>0 and #filesize>0).
- COMPUTE sampleWeight=rv.binom(#samplesize, 1/#filesize).
- COMPUTE #samplesize=#samplesize-sampleWeight.
- COMPUTE #filesize=#filesize-1.
ELSE.
- COMPUTE sampleWeight=0.
END IF.
WEIGHT BY sampleWeight.
FILTER BY sampleWeight.
REGRESSION
/STATISTICS COEFF
/DEPENDENT !depvar
/METHOD=ENTER !indvars.
!DOEND
OMSEND.
*****oms 終了.

GET FILE !temp.
!do !i !in ( !indvars ).
if (var2=!quote(!i) and var4="B") !concat(!i,"B")=var5.
* 次のベータは半角. もしもインターネットの規制により全角にしてあれば半角に変更してください.
if (var2=!quote(!i) and var4="ベータ") !concat(!i,"β")=var5.
!doend.
exec.
!let !a=''.
!do !i !in ( !indvars ).
!let !a=!concat(!a,' ',!concat(!i,"B"),' ',!concat(!i,"β")).
!doend.

FREQUENCIES
VARIABLES=!a
/FORMAT NOTABLE
/PERCENTILES= 2.5 97.5
/HISTOGRAM NORMAL
.

RESTORE.

!ENDDEFINE.
*マクロ定義終了.

***データファイルの呼び出し。データ窓に呼び出しておいてもよい.
GET FILE='c:\SPSS\Employee data.sav'.

***マクロ呼び出し, sample=ブートストラップする数, depvar=従属変数, indvars=独立変数s **.

regression_bootstrap
samples=100
depvar=給与
indvars=初任給 在籍月数 .
*****************.


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


SPSS ときど記(183) 2004/ 8/ 6

マクロ メタ分析マクロサイト

最近はメタ分析が当たり前になっている.spssのメタ分析マクロが公開されている.david b. wilsonによる
meta-analysis stuff である.

 power point によるメタ分析の説明もある.


ps. http://pages.infinit.net/rlevesqu/SampleSyntax.htm#MetaAnalysis
にメタ分析のsyntaxがある.

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

SPSS ときど記(182) 2004/ 8/ 3

因子分析 異なる因子分析の因子の対応チェックと回転syntax

異なるサンプルの因子分析結果を比較したいことがある.Thompson(2004)にプログラムがでていた.best-fit factor rotation というシンタックスである.このシンタックスは恐ろしく能率が悪く,また行列を出力しまくる.おそらく,シンタックスエラーの確認のためだろうが非常にわかりにくい.本文94頁とシンタックスを読み解いて同等のシンタックスを作った.因子パタン行列を入れ替えた使ってください.ラベルも自分の変数に入れ替えてください.

なお,Thompsonは交差妥当性やbootstrapのときにもこれを使うとしている.

Thompson, B. (2004). Exploratory and confirmatory factor analysis: Understanding concepts and appplication. American Psychological Association.

****************.
set printback=none.
matrix.
* varimax pattern matrix.
compute a={.92134, .1869, .18737;
.84248, .21945, .25625;
.75606, .28211, .35335;
.80837, .2836, .19958;
.22292, .84662, .26935;
.1711, .85348, .03794;
.29969, .82875, .22423;
.22454, .80378, .26075;
.30781, .13580, .81976;
.15795, .23077, .80478;
.27222, .20840, .80207}.

* varimax pattern matrix.
compute b={
.20284, .89659, .18675;
.10828, .87403, .21537;
.23051, .73176, .16198;
.16361, .87285, .24099;
.90807, .12646, .21722;
.89654, .13470, .21639;
.90832, .17788, .19870;
.79337, .32388, .14477;
.33664, .10530, .66769;
.18185, .22943, .79192;
.11897, .33942, .71967
}.

* labels.
compute varlabel={'per1','per2','per3','per4','per5','per6','per7','per8','per9','per10','per11'}.
compute faclabel={' 1',' 2',' 3',' 4',' 5',' 6',' 7',' 8',' 9',
'10','11','12','13','14','15'}.
*compute faclabel={'fac 1','fac 2','fac 3'}.
print a/format='f8.3'/ title='目標パタン行列'/
space=4/rnames=varlabel/cnames=faclabel.
print b/format='f8.3'/ title='変換するパタン行列 '/
space=4/rnames=varlabel/cnames=faclabel.
*.
compute n_a=1/(rsum(a&**2)&**.5).
*print n_a.
compute a_n=a.
loop #j=1 to ncol(a).
compute a_n(:,#j)=a(:,#j)&*n_a.
end loop.
*print a_n.
compute n_b=1/(rsum(b&**2)&**.5).
*print n_b.
compute b_n=b.
loop #j=1 to ncol(b).
compute b_n(:,#j)=b(:,#j)&*n_b.
end loop.
*print b_n.
compute ab=t(a_n)*b_n.
compute q=ab*t(ab).
*print q.
call eigen(q,eigvec,eig).
loop #i=1 to nrow(q).
compute eigvec(#i,:)=eigvec(#i,:)&*t(eig&**.5).
end loop.
compute eig=eig&**-1.5.
compute diag_m=make(nrow(eig),nrow(eig),0).
call setdiag(diag_m,eig).
*print diag_m.
compute c=t(ab)*eigvec*diag_m*t(eigvec).
print c/format=f8.3/ title='2つのパタン行列の因子間相関(列=目標パタン行列)'/
space=4/rnames=faclabel/cnames=faclabel.
compute b_rot=b*c.
print b_rot/format=f8.3/ title='変換後のパタン行列 '/
space=4/rnames=varlabel/cnames=faclabel.
*.
*print a_n.
compute n_br=b_rot.
*print n_br.
compute n_br=1/(rsum(b_rot&**2)&**.5).
*print n_br.
compute br_n=b_rot.
loop #j=1 to ncol(b).
compute br_n(:,#j)=b_rot(:,#j)&*n_br.
end loop.
*print br_n.
compute test=diag(a_n*t(br_n)).
print test/format=f8.3/ title='変換後のパタン行列と目標行列の変数別相関 '/
space=4/rnames=varlabel.
end matrix.
*********************************.

出力

Run MATRIX procedure:

目標パタン行列
       1    2    3
per1   .921   .187   .187
per2   .842   .219   .256
per3   .756   .282   .353
per4   .808   .284   .200
per5   .223   .847   .269
per6   .171   .853   .038
per7   .300   .829   .224
per8   .225   .804   .261
per9   .308   .136   .820
per10   .158   .231   .805
per11   .272   .208   .802

変換するパタン行列
       1    2    3
per1   .203   .897   .187
per2   .108   .874   .215
per3   .231   .732   .162
per4   .164   .873   .241
per5   .908   .126   .217
per6   .897   .135   .216
per7   .908   .178   .199
per8   .793   .324   .145
per9   .337   .105   .668
per10   .182   .229   .792
per11   .119   .339   .720

2つのパタン行列の因子間相関(列=目標パタン行列)
     1    2    3
1  -.007  1.000   .022
2  1.000   .006   .024
3  -.024  -.022   .999

変換後のパタン行列
       1    2    3
per1   .890   .204   .213
per2   .868   .109   .239
per3   .726   .231   .185
per4   .866   .164   .266
per5   .115   .904   .240
per6   .124   .892   .239
per7   .167   .905   .223
per8   .315   .792   .170
per9   .087   .323   .677
per10   .209   .166   .801
per11   .321   .105   .730

変換後のパタン行列と目標行列の変数別相関
per1   .999
per2   .992
per3   .984
per4   .987
per5   .991
per6   .975
per7   .987
per8   .989
per9   .935
per10   .995
per11   .990

------ END MATRIX -----

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

SPSS ときど記(181) 2004/ 7/13

スクリプト エラーの発生箇所の特定

スクリプトでエラーが発生した箇所を特定するのが困難な場合がある.通常デバッグ機能を使う.

階層因子分析のスクリプトでバグがあるがわかりにくかった.デバッグ機能を使って特定しようしたがうまく捕まえられない.ブレークを各行につけて追いかけるのにおかしい.と思ったらブレークの行でエラーが発生したらブレークする前にエラートラップに引っかかってしまっている.通常ならブレーク行は実行しないんではないか?ダイアログの中の出来事なのでそうなったのか不明である.
メニューへ  トップへ (182)へ

堀 啓造ホームページへ