Keyword: 因子分析, 多変量解析
概要
本サンプルは因子分析を行うFortranによるサンプルプログラムです。 本サンプルは以下に示される相関行列について因子分析を行います。
※本サンプルはnAG Fortranライブラリに含まれるルーチン g03caf() のExampleコードです。本サンプル及びルーチンの詳細情報は g03caf のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本ルーチンの詳細はg03caf のマニュアルページを参照)1 2 3 4 5 6 7 8 9 10 11 12 13
このデータをダウンロード |
G03CAF Example Program Data 'C' 'U' 211 9 9 3 1.000 0.523 0.395 0.471 0.346 0.426 0.576 0.434 0.639 0.523 1.000 0.479 0.506 0.418 0.462 0.547 0.283 0.645 0.395 0.479 1.000 0.355 0.270 0.254 0.452 0.219 0.504 0.471 0.506 0.355 1.000 0.691 0.791 0.443 0.285 0.505 0.346 0.418 0.270 0.691 1.000 0.679 0.383 0.149 0.409 0.426 0.462 0.254 0.791 0.679 1.000 0.372 0.314 0.472 0.576 0.547 0.452 0.443 0.383 0.372 1.000 0.385 0.680 0.434 0.283 0.219 0.285 0.149 0.314 0.385 1.000 0.470 0.639 0.645 0.504 0.505 0.409 0.472 0.680 0.470 1.000 1 1 1 1 1 1 1 1 1 1 -1 500 2 5
- 1行目はタイトル行で読み飛ばされます。
- 2行目には因子分析が実行される行列の種類(matrix='C':相関行列/分散共分散行列)、重みづけをするかどうか(weight='U':重みづけがされない)、相関行列/分散共分散行列の計算に使用される観測値の数(n=211)、相関/分散共分散行列の変数の数(m=9)、因子分析の変数の数(nvar=9)、因子数(nfac=3)を指定しています。
- 3~11行目に相関行列のデータ(x)を指定しています。
- 12行目に変数が因子分析に含まれるかどうかを示すフラグ(isx)を指定しています。
- 13行目に最適化のオプションの値を設定するかデフォルト値を使用するか(iop(1)=1:値を設定)、反復のモニタリング出力の制御(iop(2)=-1:出力しない)、関数評価の最大数(iop(3)=500)、ψの推定値の正確さ(iop(4)=2:10-2)、ψの下限(iop(5)=5:10-5)を指定しています。
出力結果
(本ルーチンの詳細はg03caf のマニュアルページを参照)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
この出力例をダウンロード |
G03CAF Example Program Results Eigenvalues 0.1597E+02 0.4358E+01 0.1847E+01 0.1156E+01 0.1119E+01 0.1027E+01 0.9257E+00 0.8951E+00 0.8771E+00 Test Statistic = 7.149 df = 12.000 Significance level = 0.848 Residuals 0.000 -0.013 0.022 0.011 -0.005 0.023 -0.010 -0.019 -0.016 0.003 -0.005 0.011 -0.012 -0.001 -0.001 0.015 -0.022 -0.011 0.002 0.029 -0.012 -0.001 -0.011 0.013 0.005 -0.006 -0.001 0.003 -0.006 0.010 -0.005 -0.011 0.002 0.007 0.003 -0.001 Loadings, Communalities and PSI 0.664 -0.321 0.074 0.550 0.450 0.689 -0.247 -0.193 0.573 0.427 0.493 -0.302 -0.222 0.383 0.617 0.837 0.292 -0.035 0.788 0.212 0.705 0.315 -0.153 0.619 0.381 0.819 0.377 0.105 0.823 0.177 0.661 -0.396 -0.078 0.600 0.400 0.458 -0.296 0.491 0.538 0.462 0.766 -0.427 -0.012 0.769 0.231
- 5~6行目には固有値が出力されています。
- 8行目には検定統計量が出力されています。
- 9行目には自由度が出力されています。
- 10行目には有意度が出力されています。
- 12~21行目には残差が出力されています。
- 23~33行目には各因子の負荷量、共通性とΨの推定値が出力されています。
ソースコード
(本ルーチンの詳細はg03caf のマニュアルページを参照)
※本サンプルソースコードは科学技術・統計計算ライブラリである「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
このソースコードをダウンロード |
PROGRAM g03cafe ! G03CAF Example Program Text ! Mark 23 Release. nAG Copyright 2011. ! .. Use Statements .. USE nag_library, ONLY : g03caf, nag_wp ! .. Implicit None Statement .. IMPLICIT NONE ! .. Parameters .. INTEGER, PARAMETER :: nin = 5, nout = 6 ! .. Local Scalars .. INTEGER :: i, ifail, l, ldfl, ldx, liwk, lres, & lwk, lwt, m, n, nfac, nvar CHARACTER (1) :: matrix, weight ! .. Local Arrays .. REAL (KIND=nag_wp), ALLOCATABLE :: com(:), e(:), fl(:,:), psi(:), & res(:), wk(:), wt(:), x(:,:) REAL (KIND=nag_wp) :: stat(4) INTEGER :: iop(5) INTEGER, ALLOCATABLE :: isx(:), iwk(:) ! .. Intrinsic Functions .. INTRINSIC max ! .. Executable Statements .. WRITE (nout,*) 'G03CAF Example Program Results' WRITE (nout,*) ! Skip headings in data file READ (nin,*) ! Read in the problem size READ (nin,*) matrix, weight, n, m, nvar, nfac lwk = (5*nvar*nvar+33*nvar-4)/2 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 lwk = max(lwk,n*nvar+7*nvar+nvar*(nvar-1)/2) END IF ldfl = nvar lres = nvar*(nvar-1)/2 liwk = 4*nvar + 2 ALLOCATE (x(ldx,m),isx(m),wt(lwt),e(nvar),com(nvar),psi(nvar), & res(lres),fl(ldfl,nfac),iwk(liwk),wk(lwk)) ! 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) ! 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,*) ' Eigenvalues' WRITE (nout,*) WRITE (nout,99998) e(1:m) WRITE (nout,*) WRITE (nout,99997) ' Test Statistic = ', stat(2) WRITE (nout,99997) ' df = ', stat(3) WRITE (nout,99997) ' Significance level = ', stat(4) WRITE (nout,*) WRITE (nout,*) ' Residuals' WRITE (nout,*) l = 1 DO i = 1, nvar - 1 WRITE (nout,99999) res(l:(l+i-1)) l = l + i END DO WRITE (nout,*) WRITE (nout,*) ' Loadings, Communalities and PSI' WRITE (nout,*) DO i = 1, nvar WRITE (nout,99999) fl(i,1:nfac), com(i), psi(i) END DO 20 CONTINUE 99999 FORMAT (2X,9F8.3) 99998 FORMAT (2X,6E12.4) 99997 FORMAT (A,F6.3) END PROGRAM g03cafe