Keyword: 因子得点, 計算, 多変量解析
概要
本サンプルは因子得点の計算を行うFortranによるサンプルプログラムです。 本サンプルは以下に示される相関行列について因子得点の計算を行います。
※本サンプルはnAG Fortranライブラリに含まれるルーチン g03ccf() のExampleコードです。本サンプル及びルーチンの詳細情報は g03ccf のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本ルーチンの詳細はg03ccf のマニュアルページを参照)1 2 3 4 5 6 7 8 9 10 11
このデータをダウンロード |
G03CCF Example Program Data 'C' 'U' 220 6 2 1.000 0.439 0.410 0.288 0.329 0.248 0.439 1.000 0.351 0.354 0.320 0.329 0.410 0.351 1.000 0.164 0.190 0.181 0.288 0.354 0.164 1.000 0.595 0.470 0.329 0.320 0.190 0.595 1.000 0.464 0.248 0.329 0.181 0.470 0.464 1.000 1 1 1 1 1 1 1 -1 500 3 5 'R'
- 1行目はタイトル行で読み飛ばされます。
- 2行目には因子得点の計算が実行される行列の種類(matrix='C':相関行列/分散共分散行列)、重みづけをするかどうか(weight='U':重みづけがされない)、相関行列/分散共分散行列の計算に使用される観測値の数(n=220)、相関/分散共分散行列の変数の数(m=6)、因子数(nfac=2)を指定しています。
- 3~8行目に相関行列のデータ(x)を指定しています。
- 9行目に変数が因子得点の計算に含まれるかどうかを示すフラグ(isx)を指定しています。
- 10行目に最適化のオプションの値を設定するかデフォルト値を使用するか(iop(1)=1:値を設定)、反復のモニタリング出力の制御(iop(2)=-1:出力しない)、関数評価の最大数(iop(3)=500)、ψの推定値の正確さ(iop(4)=3:10-3)、ψの下限(iop(5)=5:10-5)を指定しています。
- 11行目に因子得点係数の計算に使用される手法(method='R':回帰の手法)を指定しています。
出力結果
(本ルーチンの詳細はg03ccf のマニュアルページを参照)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
この出力例をダウンロード |
G03CCF Example Program Results Loadings, Communalities and PSI 0.553 -0.429 0.490 0.510 0.568 -0.288 0.406 0.594 0.392 -0.450 0.356 0.644 0.740 0.273 0.623 0.377 0.724 0.211 0.569 0.431 0.595 0.132 0.372 0.628 Factor score coefficients 1 2 1 0.1932 -0.3920 2 0.1703 -0.2265 3 0.1085 -0.3262 4 0.3495 0.3374 5 0.2989 0.2286 6 0.1688 0.0978
- 3~10行目には各因子の負荷量、共通性とΨの推定値が出力されています。
- 12~19行目には因子得点係数が出力されています。
ソースコード
(本ルーチンの詳細はg03ccf のマニュアルページを参照)
※本サンプルソースコードは科学技術・統計計算ライブラリである「nAG Fortranライブラリ」のルーチンを呼び出します。
サンプルのコンパイル及び実行方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
このソースコードをダウンロード |
PROGRAM g03ccfe ! G03CCF Example Program Text ! Mark 23 Release. nAG Copyright 2011. ! .. Use Statements .. USE nag_library, ONLY : g03caf, g03ccf, nag_wp, x04caf ! .. Implicit None Statement .. IMPLICIT NONE ! .. Parameters .. INTEGER, PARAMETER :: nin = 5, nout = 6 ! .. Local Scalars .. INTEGER :: i, ifail, ldfl, ldfs, ldr, ldx, & liwk, lres, lwk, lwt, m, n, nfac, & nvar, tdr CHARACTER (80) :: fmt CHARACTER (1) :: matrix, method, rotate, weight ! .. Local Arrays .. REAL (KIND=nag_wp), ALLOCATABLE :: com(:), e(:), fl(:,:), fs(:,:), & psi(:), r(:,:), res(:), wk(:), & wt(:), x(:,:) REAL (KIND=nag_wp) :: stat(4) INTEGER :: iop(5) INTEGER, ALLOCATABLE :: isx(:), iwk(:) ! .. Intrinsic Functions .. INTRINSIC count, max ! .. Executable Statements .. WRITE (nout,*) 'G03CCF Example Program Results' WRITE (nout,*) FLUSH (nout) ! Skip headings in data file READ (nin,*) ! Read in the problem size READ (nin,*) matrix, weight, n, m, nfac IF (matrix=='C' .OR. matrix=='c') THEN lwt = 0 ldx = m ELSE IF (weight=='W' .OR. weight=='w') THEN lwt = n ELSE lwt = 0 END IF ldx = n END IF ALLOCATE (x(ldx,m),isx(m),wt(lwt)) ! Read in the data IF (lwt>0) THEN READ (nin,*) (x(i,1:m),wt(i),i=1,ldx) ELSE READ (nin,*) (x(i,1:m),i=1,ldx) END IF ! Read in variable inclusion flags READ (nin,*) isx(1:m) ! Calculate NVAR nvar = count(isx(1:m)==1) ! Do not apply a rotation rotate = 'U' tdr = 1 ldr = 1 lres = nvar*(nvar-1)/2 liwk = 4*nvar + 2 lwk = 5*nvar*nvar + 33*nvar - 4/2 IF (matrix/='C' .AND. matrix/='c') THEN lwk = max(lwk,n*nvar+7*nvar+nvar*(nvar-1)/2) END IF lwk = max(lwk,nvar) ldfs = nvar ldfl = nvar ALLOCATE (e(nvar),com(nvar),psi(nvar),res(lres),fl(ldfl,nfac),wk(lwk), & iwk(liwk),fs(ldfs,nfac),r(ldr,tdr)) ! Read in options READ (nin,*) iop(1:5) ! Fit factor analysis model ifail = -1 CALL g03caf(matrix,weight,n,m,x,ldx,nvar,isx,nfac,wt,e,stat,com,psi, & res,fl,ldfl,iop,iwk,wk,lwk,ifail) IF (ifail/=0) THEN IF (ifail<=4) THEN GO TO 20 END IF END IF ! Display results WRITE (nout,*) ' Loadings, Communalities and PSI' WRITE (nout,*) WRITE (fmt,99999) '(', nfac + 2, '(1X,F8.3))' WRITE (nout,fmt) (fl(i,1:nfac),com(i),psi(i),i=1,nvar) ! Read in details of how to compute factor scores READ (nin,*) method ! Compute factor scores ifail = 0 CALL g03ccf(method,rotate,nvar,nfac,fl,ldfl,psi,e,r,ldr,fs,ldfs,wk, & ifail) ! Display factor score coefficients WRITE (nout,*) FLUSH (nout) ifail = 0 CALL x04caf('General',' ',nvar,nfac,fs,ldfs,'Factor score coefficients' & ,ifail) 20 CONTINUE 99999 FORMAT (A,I0,A) END PROGRAM g03ccfe