Keyword: 因子分析, 多変量解析
概要
本サンプルは因子分析を行うFortranによるサンプルプログラムです。 本サンプルは以下に示される相関行列について因子分析を行います。
※本サンプルはnAG Fortranライブラリに含まれるルーチン g03caf() のExampleコードです。本サンプル及びルーチンの詳細情報は g03caf のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本ルーチンの詳細はg03caf のマニュアルページを参照)| このデータをダウンロード |
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 のマニュアルページを参照)| この出力例をダウンロード |
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ライブラリ」のルーチンを呼び出します。
サンプルのコンパイル及び実行方法
| このソースコードをダウンロード |
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
