因子得点の計算

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

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


関連情報
© 日本ニューメリカルアルゴリズムズグループ株式会社 2025
Privacy Policy  /  Trademarks