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