1標本コルモゴロフ・スミルノフ検定

C言語によるサンプルソースコード : 使用関数名:nag_1_sample_ks_test (g08cbc)

ホーム > 製品 > nAG数値計算ライブラリ > サンプルソースコード集 > 1標本コルモゴロフ・スミルノフ検定 (C言語/C++)

Keyword: コルモゴロフ・スミルノフ, Kolmogorov-Smirnov Test, 検定, 1標本

概要

本サンプルは1標本コルモゴロフ・スミルノフ検定(the one sample Kolmogorov-Smirnov Test) を行うC言語によるサンプルプログラムです。 本サンプルは以下に示される標本を分析対象とし、一様分布の場合と正規分布の場合それぞれの検定統計量DとZ統計量、裾確率を算出します。

1標本コルモゴロフ・スミルノフ検定のデータ 

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

入力データ

(本関数の詳細はnag_1_sample_ks_test のマニュアルページを参照)
1
2
3
4
5
6
7

このデータをダウンロード
nag_1_sample_ks_test (g08cbc) Example Program Data
 30
 0.01 0.30 0.20 0.90 1.20 0.09 1.30 0.18 0.90 0.48
 1.98 0.03 0.50 0.07 0.70 0.60 0.95 1.00 0.31 1.45
 1.04 1.25 0.15 0.75 0.85 0.22 1.56 0.81 0.57 0.55
 2  0.0  2.0  Nag_TestStatisticsDAbs
 2  0.0  1.0  Nag_TestStatisticsDAbs

  • 1行目はタイトル行で読み飛ばされます。
  • 2行目に標本の観測値の個数(n)を指定しています。
  • 3~5行目に標本の観測値(x)を指定しています。
  • 6行目に一様分布のパラメータ数(np)とパラメータ(par)である境界値a、b、そして計算する検定統計量の種類(ntype (本関数の引数dtype))を指定しています。
  • 7行目に正規分布のパラメータ数(np)とパラメータ(par)である平均と分散、そして計算する検定統計量の種類(ntype (本関数の引数dtype))を指定しています。

出力結果

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

この出力例をダウンロード
nag_1_sample_ks_test (g08cbc) Example Program Results

Test against uniform distribution on (0,2)

Test statistic D =   0.2800
Z statistic      =   1.5336
Tail probability =   0.0143

Test against Normal distribution with parameters estimated from the data

Mean = 0.6967  and variance = 0.2564
Test statistic D =   0.1108
Z statistic      =   0.6068
Tail probability =   0.8925

  • 3行目目には以下の出力結果が区間[0,2]上の一様分布に対する検定であることが示されています。
  • 5行目には検定統計量Dが出力されています。
  • 6行目にはZ統計量が出力されています。
  • 7行目には裾確率が出力されています。
  • 9行目目には以下の出力結果がデータから推定されたパラメータをもつ正規分布に対する検定であることが示されています。
  • 11行目には平均と分散が出力されています。
  • 12行目には検定統計量Dが出力されています。
  • 13行目にはZ統計量が出力されています。
  • 14行目には裾確率が出力されています。

ソースコード

(本関数の詳細はnag_1_sample_ks_test のマニュアルページを参照)

※本サンプルソースコードはnAG数値計算ライブラリ(Windows, Linux, MAC等に対応)の関数を呼び出します。
サンプルのコンパイル及び実行方法

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

このソースコードをダウンロード
/* nag_1_sample_ks_test (g08cbc) Example Program.
 *
 * CLL6I261D/CLL6I261DL Version.
 *
 * Copyright 2017 Numerical Algorithms Group.
 *
 * Mark 26.1, 2017.
 */

#include <stdio.h>
#include <nag.h>
#include <nag_stdlib.h>
#include <nagg08.h>

int main(void)
{
  Integer exit_status = 0;
  Integer i, n, np;
  double d, p, *par = 0, *x = 0, z;
  char nag_enum_arg[40];
  Nag_TestStatistics ntype;
  NagError fail;

  INIT_FAIL(fail);

  printf("nag_1_sample_ks_test (g08cbc) Example Program Results\n");

  /* Skip heading in data file */
  scanf("%*[^\n]");

  scanf("%ld", &n);
  x = nAG_ALLOC(n, double);

  printf("\n");
  for (i = 1; i <= n; ++i)
    scanf("%lf", &x[i - 1]);
  scanf("%ld", &np);
  if (!(par = nAG_ALLOC(np, double)))
  {
    printf("Allocation failure\n");
    exit_status = -1;
    goto END;
  }

  for (i = 1; i <= np; ++i)
    scanf("%lf", &par[i - 1]);
  scanf("%39s", nag_enum_arg);
  /* nag_enum_name_to_value (x04nac).
   * Converts nAG enum member name to value
   */
  ntype = (Nag_TestStatistics) nag_enum_name_to_value(nag_enum_arg);

  /* nag_1_sample_ks_test (g08cbc).
   * Performs the one-sample Kolmogorov-Smirnov test for
   * standard distributions
   */
  nag_1_sample_ks_test(n, x, Nag_Uniform, par, Nag_ParaSupplied, ntype, &d,
                       &z, &p, &fail);
  if (fail.code != NE_NOERROR) {
    printf("Error from nag_1_sample_ks_test (g08cbc).\n%s\n", fail.message);
    exit_status = 1;
    goto END;
  }
  printf("Test against uniform distribution on (0,2)\n");
  printf("\n");
  printf("Test statistic D = %8.4f\n", d);
  printf("Z statistic      = %8.4f\n", z);
  printf("Tail probability = %8.4f\n", p);
  printf("\n");
  scanf("%ld", &np);
  for (i = 1; i <= np; ++i)
    scanf("%lf", &par[i - 1]);
  scanf("%39s", nag_enum_arg);
  ntype = (Nag_TestStatistics) nag_enum_name_to_value(nag_enum_arg);

  /* nag_1_sample_ks_test (g08cbc), see above. */
  nag_1_sample_ks_test(n, x, Nag_Normal, par, Nag_ParaEstimated, ntype, &d,
                       &z, &p, &fail);
  if (fail.code != NE_NOERROR) {
    printf("Error from nag_1_sample_ks_test (g08cbc).\n%s\n", fail.message);
    exit_status = 1;
    goto END;
  }

  printf("Test against Normal distribution with parameters estimated"
         " from the data\n\n");
  printf("Mean = %6.4f  and variance = %6.4f\n", par[0], par[1]);
  printf("Test statistic D = %8.4f\n", d);
  printf("Z statistic      = %8.4f\n", z);
  printf("Tail probability = %8.4f\n", p);

END:
  nAG_FREE(x);
  nAG_FREE(par);

  return exit_status;
}


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