関連情報

因子分析

Fortranによるサンプルソースコード
使用ルーチン名:g03caf

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


Results matter. Trust NAG.

Privacy Policy | Trademarks