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