ギャップ検定

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

Keyword: ギャップ検定, Gaps Test, 検定

概要

本サンプルはギャップ検定(Gaps Test) を行うFortranによるサンプルプログラムです。 本サンプルは100個の疑似乱数の五つの標本を分析対象とし、カイ二乗検定統計量、自由度と上側確率を算出します。

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

入力データ

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

このデータをダウンロード
G08EDF Example Program Data
5  0  10           :: NSAMP,M,MAXG
0.4  0.6  1.0      :: RLO,RUP,TOTLEN
## Sample 1
100                :: N
0.11389 0.84996 0.84821 0.18431 0.14104 0.03144 0.68013 0.13297 0.27696 0.86743 
0.32674 0.87990 0.85580 0.47830 0.75318 0.93643 0.19396 0.31091 0.34956 0.94923 
0.18940 0.24715 0.62503 0.50406 0.05686 0.26481 0.68746 0.80387 0.48184 0.25034 
0.20141 0.35062 0.58591 0.93407 0.93848 0.98496 0.66180 0.35957 0.71122 0.35875 
0.96504 0.60832 0.36569 0.73499 0.25223 0.88296 0.06659 0.78113 0.40016 0.31768 
0.47655 0.15008 0.20608 0.62633 0.62737 0.16400 0.44104 0.56993 0.13178 0.50499 
0.44176 0.44385 0.75372 0.82178 0.60227 0.98944 0.33133 0.81067 0.40798 0.71608 
0.69306 0.22144 0.47942 0.65697 0.50881 0.25223 0.82373 0.50148 0.65246 0.53275 
0.92935 0.13455 0.19901 0.78844 0.14006 0.50600 0.41069 0.49703 0.47858 0.02210 
0.91444 0.10784 0.54642 0.63091 0.14419 0.80457 0.51336 0.71451 0.12564 0.88051 
## Sample 2
100                :: N
0.84976 0.63094 0.46109 0.80538 0.62387 0.90670 0.09969 0.67992 0.70503 0.09560 
0.69991 0.37616 0.42030 0.23665 0.28771 0.24935 0.94950 0.12008 0.66217 0.20900 
0.97026 0.98368 0.80206 0.43918 0.73232 0.03533 0.97995 0.06637 0.54726 0.48530 
0.68865 0.94302 0.33718 0.61014 0.70127 0.36827 0.51335 0.24476 0.14203 0.02428 
0.73691 0.22192 0.40374 0.85757 0.83335 0.73309 0.05563 0.17332 0.72253 0.43291 
0.77476 0.35967 0.94242 0.61337 0.43513 0.80573 0.70630 0.83115 0.24622 0.45445 
0.53595 0.31476 0.87968 0.75365 0.86291 0.34051 0.62232 0.16762 0.45506 0.15561 
0.76615 0.77421 0.06035 0.72290 0.93712 0.83223 0.40044 0.96575 0.73176 0.27827 
0.02174 0.75326 0.82876 0.64979 0.98038 0.61054 0.87742 0.95273 0.39091 0.42146 
0.89020 0.08617 0.90953 0.00416 0.70915 0.21123 0.95342 0.19269 0.68252 0.27600 
## Sample 3
100                :: N
0.40629 0.96486 0.66026 0.07134 0.35492 0.34348 0.87164 0.59746 0.43724 0.26730 
0.11840 0.04604 0.49037 0.99669 0.32784 0.34772 0.93599 0.95806 0.80635 0.18897 
0.60061 0.83359 0.63026 0.14084 0.05323 0.70247 0.28532 0.09572 0.36153 0.50378 
0.42679 0.71801 0.51010 0.72090 0.97537 0.29919 0.30059 0.23610 0.25668 0.07510 
0.92481 0.65715 0.69686 0.27840 0.20555 0.64015 0.05725 0.25120 0.32288 0.22320 
0.16582 0.71466 0.34030 0.55575 0.51468 0.18013 0.74670 0.21455 0.52649 0.47487 
0.85805 0.24616 0.11459 0.38690 0.83475 0.83629 0.83754 0.18998 0.46715 0.24162 
0.19488 0.03281 0.39291 0.37834 0.97169 0.65229 0.88913 0.53777 0.05780 0.20468 
0.33788 0.10130 0.72771 0.31306 0.74279 0.26546 0.37941 0.04878 0.03061 0.52394 
0.74104 0.97192 0.04550 0.81382 0.44430 0.32402 0.06791 0.73602 0.22640 0.67260 
## Sample 4
100                :: N
0.46016 0.95901 0.37581 0.45836 0.26220 0.30389 0.46845 0.52940 0.71121 0.89187 
0.33346 0.81783 0.07194 0.01163 0.63324 0.69208 0.28685 0.02491 0.97931 0.53225 
0.47009 0.12105 0.80291 0.21191 0.74158 0.78269 0.30493 0.06901 0.54152 0.88463 
0.60358 0.81066 0.77771 0.74140 0.65465 0.32613 0.42757 0.36584 0.42506 0.39980 
0.04686 0.79805 0.53593 0.15562 0.09924 0.68011 0.61072 0.88701 0.56239 0.64343 
0.19223 0.07325 0.40971 0.85265 0.27507 0.88884 0.10551 0.62646 0.11055 0.91368 
0.58845 0.68942 0.29994 0.30395 0.45696 0.88127 0.38773 0.12028 0.48981 0.28535 
0.84174 0.46451 0.17140 0.90827 0.49424 0.29557 0.25788 0.76838 0.19073 0.26051 
0.47442 0.03224 0.32034 0.97378 0.43992 0.13338 0.45850 0.02122 0.30482 0.49427 
0.89839 0.01770 0.85679 0.90157 0.29537 0.15213 0.21464 0.37237 0.86199 0.60364 
## Sample 5
100                :: N
0.66793 0.00711 0.17970 0.98702 0.50449 0.88105 0.08259 0.77263 0.06050 0.73389 
0.86517 0.76088 0.40239 0.50178 0.13811 0.63441 0.91949 0.48518 0.96923 0.08820 
0.14556 0.28177 0.99598 0.46908 0.83279 0.26252 0.64987 0.20426 0.41060 0.76120 
0.78022 0.44662 0.04918 0.36644 0.62337 0.16849 0.63846 0.41247 0.54464 0.05721 
0.79852 0.23048 0.76139 0.22493 0.45640 0.07671 0.96152 0.50771 0.02376 0.49537 
0.07095 0.86385 0.71385 0.35192 0.68827 0.49737 0.44847 0.26744 0.46983 0.44270 
0.78845 0.72560 0.38886 0.45552 0.45917 0.64241 0.44654 0.42665 0.01122 0.76716 
0.01727 0.33687 0.02836 0.48409 0.02777 0.63643 0.59711 0.02880 0.63758 0.56746 
0.41342 0.40939 0.61578 0.89186 0.70151 0.38707 0.94021 0.17271 0.27477 0.04308 
0.91821 0.97517 0.57249 0.14325 0.46058 0.26434 0.85927 0.77526 0.64717 0.08314 

  • 1行目はタイトル行で読み飛ばされます。
  • 2行目に標本の数(nsamp=5)、ギャップ(2つの数の距離)の最大数(m=0)、集計が必要なギャップの最長の長さ(maxg=10)を指定しています。ギャップの最大数"0"は制限がないことを意味しています。
  • 3行目にギャップの定義に使用される区間の下限(rlo=0.4)、上限(rup=0.6)、疑似乱数列に現れる可能性のある数を含む区間の長さの合計(totlen=1.0)を指定しています。
  • 5行目に一つ目の標本のサイズ(n)を指定しています。
  • 6~15行目に一つ目の標本の観測値(x)を指定しています。
  • 17行目に二つ目の標本のサイズ(n)を指定しています。
  • 18~27行目に二つ目の標本の観測値(x)を指定しています。
  • 29行目に三つ目の標本のサイズ(n)を指定しています。
  • 30~39行目に三つ目の標本の観測値(x)を指定しています。
  • 41行目に四つ目の標本のサイズ(n)を指定しています。
  • 42~51行目に四つ目の標本の観測値(x)を指定しています。
  • 53行目に五つ目の標本のサイズ(n)を指定しています。
  • 54~63行目に五つ目の標本の観測値(x)を指定しています。

出力結果

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

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

 Total number of gaps found =         99

 Count
       0      1      2      3      4      5      6      7      8     >9
      22     11     10     13      6     12      4      6      2     13

 Expect
       0      1      2      3      4      5      6      7      8     >9
    19.8   15.8   12.7   10.1    8.1    6.5    5.2    4.2    3.3   13.3

 Chisq =     9.9540
 DF    =     9.0
 Prob  =     0.3542

  • 3行目には見つかったギャップの総数が出力されています。
  • 6~7行目にはギャップの長さごとのギャップの数が出力されています。
  • 10~11行目にはギャップの長さごとのギャップの数の期待値が出力されています。
  • 13行目にはカイ二乗検定統計量が出力されています。
  • 14行目にはカイ二乗統計の自由度が出力されています。
  • 15行目にはカイ二乗検定統計量に対応する上側確率(upper tail probability)が出力されています。

ソースコード

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

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

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

!      G08EDF Example Program Text

!      Mark 23 Release. nAG Copyright 2011.

!      .. Use Statements ..
       USE nag_library, ONLY : g08edf, nag_wp
!      .. Implicit None Statement ..
       IMPLICIT NONE
!      .. Parameters ..
       INTEGER, PARAMETER              :: nin = 5, nout = 6
!      .. Local Scalars ..
       REAL (KIND=nag_wp)              :: chi, df, prob, rlo, rup, totlen
       INTEGER                         :: i, ifail, m, maxg, n, ngaps, nsamp, pn
       CHARACTER (1)                   :: cl
!      .. Local Arrays ..
       REAL (KIND=nag_wp), ALLOCATABLE :: ex(:), x(:)
       INTEGER, ALLOCATABLE            :: ncount(:)
!      .. Executable Statements ..
       WRITE (nout,*) 'G08EDF Example Program Results'
       WRITE (nout,*)

!      Skip main heading in data file
       READ (nin,*)

!      Read in number of samples and control parameters
       READ (nin,*) nsamp, m, maxg
       READ (nin,*) rlo, rup, totlen

       ALLOCATE (ncount(maxg),ex(maxg),x(1))

       IF (nsamp==1) THEN
          cl = 'S'
       ELSE
          cl = 'F'
       END IF

       pn = 0
       DO i = 1, nsamp
!         Skip run heading in data file
          READ (nin,*)

!         Read in sample size
          READ (nin,*) n

          IF (n>pn) THEN
!            Reallocate X if required
             DEALLOCATE (x)
             ALLOCATE (x(n))
             pn = n
          END IF

!         Read in the sample
          READ (nin,*) x(1:n)

!         Process the sample
          ifail = -1
          CALL g08edf(cl,n,x,m,maxg,rlo,rup,totlen,ngaps,ncount,ex,chi,df, &
             prob,ifail)
          IF (ifail/=0 .AND. ifail<8) THEN
             GO TO 20
          END IF

!         Adjust CL for intermediate calls
          IF (i<nsamp-1) THEN
             cl = 'I'
          ELSE
             cl = 'L'
          END IF

       END DO

!      Display results
       WRITE (nout,99999) 'Total number of gaps found = ', ngaps
       IF (ifail==8) THEN
          WRITE (nout,*) &
             ' ** Note : the number of gaps requested were not found.'
       END IF
       WRITE (nout,*)
       WRITE (nout,*) 'Count'
       WRITE (nout,*) &
          '      0      1      2      3      4      5      6      7      8', &
          '     >9'
       WRITE (nout,99998) ncount(1:maxg)
       WRITE (nout,*)
       WRITE (nout,*) 'Expect'
       WRITE (nout,*) &
          '      0      1      2      3      4      5      6      7      8', &
          '     >9'
       WRITE (nout,99997) ex(1:maxg)
       WRITE (nout,*)
       WRITE (nout,99996) 'Chisq = ', chi
       WRITE (nout,99995) 'DF    = ', df
       WRITE (nout,99996) 'Prob  = ', prob
       IF (ifail==9) THEN
          WRITE (nout,*) ' ** Note : expected value <= 5.0'
          WRITE (nout,*) &
             '    the chi square approximation may not be very good.'
       END IF

20     CONTINUE

99999  FORMAT (1X,A,I10)
99998  FORMAT (1X,10I7)
99997  FORMAT (1X,10F7.1)
99996  FORMAT (1X,A,F10.4)
99995  FORMAT (1X,A,F7.1)
    END PROGRAM g08edfe


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