*ran.sps----------------------------------------------------. title 任意の相関行列となる乱数生成. *preserve. * set printback=off. define rancorr (nvar=!charend('/')/ nsmpl=!charend('/')/ fname=!charend('/') !default(*)/ content=!charend('/') !default(corr)/ strict=!charend('/') !default(yes) ). *準備. !let !f='f'. !let !s='s'. !let !x='x'. !let !send=!concat(!s,!nvar). !let !xend=!concat(!x,!nvar). !let !fend=!concat(!f,!nvar). !let !col='col'. !let !colend=!concat(!col,!nvar) !let !strict2=!upcase(!strict). *new file. !if (!fname !ne '*') !then. *想定相関行列(下三角 SPSSファイルではない). matrix data variables=x1 to !xend/file=!fname /content=!content . !ifend. save /outfile='tempran.sav'. *乱数生成. input program. vector f(!nvar). loop #i=1 to !nsmpl. + loop #j = 1 to !nvar. + compute f(#j)=normal(1). + end loop. + end case. end loop. end file. end input program. !if (!strict2 !eq YES) !then. *乱数を主成分分析をし、その主成分得点を使用する=乱数間を無相関にする. factor var=f1 to !fend /print=det /criteria=factors(!nvar) /rotation=norotate /save=reg(all s). !else. vector s(!nvar). !do !i=1 !to !nvar. compute s(!i)=f(!i). !doend. !ifend. matrix. get d /file=* /var=s1 to !send. get r /file='tempran.sav'/var=x1 to !xend. compute detr=det(r). do if (det(r) > 0.000001). *相関行列のコレスキー分解(上三角). compute r1=chol(r). *相関行列に対応する乱数作成 変数名の col+番号. compute d=d*r1. save d /outfile=*. else. PRINT det(r) /format "F16.8" /TITLE '元の相関行列は正定値ではありませんのでコレスキー分解ができません' . end if. end matrix. *生成した乱数間の相関行列. corr col1 to !colend. !enddefine. matrix data variables=x1 to x19 . begin data 1 0.7 1 0.7 0.7 1 0.4 0.4 0.4 1 0.4 0.4 0.4 0.7 1 0.4 0.4 0.4 0.7 0.7 1 0.2 0.2 0.2 0.2 0.2 0.2 1 0.2 0.2 0.2 0.2 0.2 0.2 0.65 1 0.2 0.2 0.2 0.2 0.2 0.2 0.65 0.65 1 0.2 0.2 0.2 0.2 0.2 0.2 0.65 0.65 0.65 1 0.2 0.2 0.2 0.2 0.2 0.2 0.65 0.65 0.65 0.83 1 0.2 0.2 0.2 0.2 0.2 0.2 0.65 0.65 0.65 0.85 0.80 1 0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.4 0.4 0.4 0.4 0.4 1 0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.4 0.4 0.4 0.4 0.4 0.7 1 0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.4 0.4 0.4 0.4 0.4 0.7 0.7 1 0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.4 0.4 0.4 0.4 0.4 0.7 0.7 0.7 1 0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.5 0.5 0.5 0.5 0.5 0.4 0.4 0.4 0.4 1 0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.5 0.5 0.5 0.5 0.5 0.4 0.4 0.4 0.4 0.7 1 0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.5 0.5 0.5 0.5 0.5 0.4 0.4 0.4 0.4 0.7 0.7 1 end data. rancorr nvar=19/nsmpl=300/fname=*/strict=no.