群への観測値の割り当て

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

Keyword: 観測値, 割り当て, 多変量解析

概要

本サンプルは群への観測値の割り当てを行うFortranによるサンプルプログラムです。 本サンプルは以下に示されるデータについて群への観測値の割り当てを行います。

観測値の割り当てのデータ 

※本サンプルはnAG Fortranライブラリに含まれるルーチン g03dcf() のExampleコードです。本サンプル及びルーチンの詳細情報は g03dcf のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで

入力データ

(本ルーチンの詳細はg03dcf のマニュアルページを参照)
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

このデータをダウンロード
G03DCF Example Program Data
  21 2 3 'U'             : N,M,NG,WEIGHT
  1.1314    2.4596    1
  1.0986    0.2624    1
  0.6419   -2.3026    1
  1.3350   -3.2189    1
  1.4110    0.0953    1
  0.6419   -0.9163    1
  2.1163    0.0000    2
  1.3350   -1.6094    2
  1.3610   -0.5108    2
  2.0541    0.1823    2
  2.2083   -0.5108    2
  2.7344    1.2809    2
  2.0412    0.4700    2
  1.8718   -0.9163    2
  1.7405   -0.9163    2
  2.6101    0.4700    2
  2.3224    1.8563    3
  2.2192    2.0669    3
  2.2618    1.1314    3
  3.9853    0.9163    3
  2.7600    2.0281    3  : End of X,ING (G03EAF)
   1         1           : ISX
   'P' 'U' 'E' 6 T       : TYP,EQUAL,PRIORS,NOBS,ATIQ
  1.6292   -0.9163
  2.5572    1.6094
  2.5649   -0.2231
  0.9555   -2.3026
  3.4012   -2.3026
  3.0204   -0.2231      : End of X

  • 1行目はタイトル行で読み飛ばされます。
  • 2行目に観測値の数(n=21)、変数の数(m=2)、グループの数(ng=3)、重みづけをするかどうか(weight='U':重みづけをしない)を指定しています。
  • 3~23行目に変数の観測値(x)と観測値がどのグループに属するか(ing)を指定しています。
  • 24行目に変数が距離計算に含まれるかどうか(isx)を指定しています。"1"の場合は計算に含まれます。
  • 25行目に推定アプローチか予測アプローチのどちらが使用されるか(typ='P':予測アプローチ)、グループ内の分散共分散行列が等しいと仮定されるかどうか(equal='U':等しくない)、使用される事前確率の形式(priors='E':Equal prior probabilities)、割り当てられる観測値の数(nobs=6)、不適合度が必要かどうか(atiq=T:必要)を指定しています。
  • 26~31行目に変数の新たな観測値(x)を指定しています。

出力結果

(本ルーチンの詳細はg03dcf のマニュアルページを参照)
1
2
3
4
5
6
7
8
9
10
11

この出力例をダウンロード
 G03DCF Example Program Results

    Obs       Posterior        Allocated     Atypicality
              probabilities    to group      index

     1      0.094 0.905 0.002     2      0.596 0.254 0.975
     2      0.005 0.168 0.827     3      0.952 0.836 0.018
     3      0.019 0.920 0.062     2      0.954 0.797 0.912
     4      0.697 0.303 0.000     1      0.207 0.860 0.993
     5      0.317 0.013 0.670     3      0.991 1.000 0.984
     6      0.032 0.366 0.601     3      0.981 0.978 0.887

  • 3~11行目に何番目の観測値か、グループへの観測値の割り当てに対する事後確率、観測値が割り当てられたグループ、グループに対する観測値の不適合度が出力されています。5番目と6番目の観測値は3つのグループのどれにもあまり適合していないことがわかります。

ソースコード

(本ルーチンの詳細はg03dcf のマニュアルページを参照)

※本サンプルソースコードは科学技術・統計計算ライブラリである「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

このソースコードをダウンロード
    PROGRAM g03dcfe

!      G03DCF Example Program Text

!      Mark 23 Release. nAG Copyright 2011.

!      .. Use Statements ..
       USE nag_library, ONLY : g03daf, g03dcf, nag_wp
!      .. Implicit None Statement ..
       IMPLICIT NONE
!      .. Parameters ..
       INTEGER, PARAMETER              :: nin = 5, nout = 6
!      .. Local Scalars ..
       REAL (KIND=nag_wp)              :: df, sig, stat
       INTEGER                         :: i, ifail, ldgmn, ldox, ldp, ldx,     &
                                          lgc, lwk, lwt, m, n, ng, nobs, nvar, &
                                          tdati
       LOGICAL                         :: atiq
       CHARACTER (1)                   :: equal, priors, typ, weight
       CHARACTER (80)                  :: fmt
!      .. Local Arrays ..
       REAL (KIND=nag_wp), ALLOCATABLE :: ati(:,:), det(:), gc(:), gmn(:,:),   &
                                          ox(:,:), p(:,:), prior(:), wk(:),    &
                                          wt(:), x(:,:)
       INTEGER, ALLOCATABLE            :: iag(:), ing(:), isx(:), iwk(:), nig(:)
!      .. Intrinsic Functions ..
       INTRINSIC                          count, max
!      .. Executable Statements ..
       WRITE (nout,*) 'G03DCF Example Program Results'
       WRITE (nout,*)

!      Skip headings in data file
       READ (nin,*)

!      Read in the problem size
       READ (nin,*) n, m, ng, weight

       IF (weight=='W' .OR. weight=='w') THEN
          lwt = n
       ELSE
          lwt = 0
       END IF
       ldox = n
       ALLOCATE (ox(ldox,m),ing(n),wt(lwt),isx(m))

!      Read in data
       IF (lwt>0) THEN
          READ (nin,*) (ox(i,1:m),ing(i),wt(i),i=1,n)
       ELSE
          READ (nin,*) (ox(i,1:m),ing(i),i=1,n)
       END IF

!      Read in variable inclusion flags
       READ (nin,*) isx(1:m)

!      Calculate NVAR
       nvar = count(isx(1:m)==1)

       lwk = max(n*(nvar+1),2*nvar)
       ldgmn = ng
       lgc = (ng+1)*nvar*(nvar+1)/2
       ALLOCATE (nig(ng),gmn(ldgmn,nvar),det(ng),gc(lgc),wk(lwk),iwk(ng))

!      Compute covariance matrix
       ifail = 0
       CALL g03daf(weight,n,m,ox,ldox,isx,nvar,ing,ng,wt,nig,gmn,ldgmn,det,gc, &
          stat,df,sig,wk,iwk,ifail)

!      Read in parameters controlling grouping
       READ (nin,*) typ, equal, priors, nobs, atiq

       IF (atiq) THEN
          tdati = ng
       ELSE
          tdati = 1
       END IF
       ldx = nobs
       ldp = nobs
       ALLOCATE (x(ldx,m),prior(ng),p(ldp,ng),iag(nobs),ati(ldp,tdati))

!      Read in data to group
       READ (nin,*) (x(i,1:m),i=1,nobs)

!      Read in priors
       IF (priors=='I' .OR. priors=='i') THEN
          READ (nin,*) prior(1:ng)
       END IF

!      Allocate observations to groups
       ifail = 0
       CALL g03dcf(typ,equal,priors,nvar,ng,nig,gmn,ldgmn,gc,det,nobs,m,isx,x, &
          ldx,prior,p,ldp,iag,atiq,ati,wk,ifail)

!      Display results
       IF (atiq) THEN
          WRITE (fmt,99999) '(2(I6,5X,', ng, 'F6.3))'
          WRITE (nout,*) '   Obs       Posterior        Allocated', &
             '     Atypicality'
          WRITE (nout,*) '             probabilities    to group      index'
          WRITE (nout,*)
          WRITE (nout,fmt) (i,p(i,1:ng),iag(i),ati(i,1:ng),i=1,nobs)
       ELSE
          WRITE (fmt,99999) '(I6,5X,', ng, 'F6.3,I6))'
          WRITE (nout,*) '   Obs       Posterior        Allocated'
          WRITE (nout,*) '             probabilities    to group '
          WRITE (nout,*)
          WRITE (nout,fmt) (i,p(i,1:ng),iag(i),i=1,nobs)
       END IF

99999  FORMAT (A,I0,A)
    END PROGRAM g03dcfe


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