分散分析で計算した処理平均の差の信頼区間の計算

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

ホーム > 製品 > nAG数値計算ライブラリ > サンプルソースコード集 > 分散分析で計算した処理平均の差の信頼区間の計算 (C言語/C++)

Keyword: 分散分析, ANOVA, 信頼区間の計算

概要

本サンプルは分散分析(ANOVA: Analysis of Variance)で計算した処理平均の差の信頼区間の計算を行うC言語によるサンプルプログラムです。 本サンプルは以下に示される観測値をg04bbcルーチンを呼び出して分散分析し、分散分析表、処理平均や処理平均の差の同時信頼区間を出力します。

分散分析のデータ 

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

入力データ

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

このデータをダウンロード
nag_anova_confid_interval (g04dbc) Example Program Data

26 4

 3  2  4  3  1  5
 7  8  4 10  6
 3  2  1  2  4  2  3  1
10 12  8  5 12 10  9

1 1 1 1 1 1
2 2 2 2 2
3 3 3 3 3 3 3 3
4 4 4 4 4 4 4

Nag_TukeyInterval .95

  • 1行目はタイトル行で読み飛ばされます。
  • 3行目に観測値の数(n)と処理数(nt)を指定しています。
  • 5~8行目に観測値のデータ(y)を指定しています。
  • 10~13行目に各観測値が何回目の処理で処理されるか処理回数(it)を指定しています。
  • 15行目に使用する手法(type=Tukey-Kramer法)と信頼水準(clevel)を指定しています。

出力結果

(本関数の詳細はnag_anova_confid_interval のマニュアルページを参照)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

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

ANOVA table

  Source        df         SS          MS          F        Prob

 Treatments     3       239.9        80.0      24.029     0.0000
 Residual      22        73.2         3.3  
 Total         25       313.1  

 Treatment means

   3.000   7.000   2.250   9.429

 Simultaneous Confidence Intervals

   2 1        0.933       7.067  *
   3 1       -3.486       1.986   
   3 2       -7.638      -1.862  *
   4 1        3.610       9.247  *
   4 2       -0.538       5.395   
   4 3        4.557       9.800  *

  • 3~9行目に分散分析表が出力されています。
  • 7行目に処理の自由度、平方和、平均平方、F統計量と有意水準が出力されています。
  • 8行目に残差の自由度、平方和と平均平方が出力されています。
  • 9行目に自由度と平方和の合計が出力されています。
  • 13行目には各処理の処理平均が出力されています。
  • 17~22行目には処理平均の差の信頼区間の下限、上限が出力されています。"*"マークは処理平均の差が有意であることを示しています。

ソースコード

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

※本サンプルソースコードは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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151

このソースコードをダウンロード
/* nag_anova_confid_interval (g04dbc) 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 <nagg04.h>

int main(void)
{

  Integer exit_status = 0, nt, i, ij, irdf, j, n, nblock;
  Integer *irep = 0, *isig = 0, *it = 0;
  const char *fmt_99998[] = { "", "   %3.0f  ", "%10.1f  ", "%10.1f  ",
    "%10.3f  ", "%9.4f"
  };
  char star[1 * 2 + 1];
  char nag_enum_arg[40];
  double clevel, gmean, rdf, tol;
  double *bmean = 0, *c = 0, *cil = 0, *ciu = 0, *ef = 0, *r = 0;
  double *table = 0, *tmean = 0, *y = 0;
  Nag_IntervalType type;
  NagError fail;

#define TABLE(I, J) table[((I) -1)*5 + (J) -1]

  INIT_FAIL(fail);

  printf("nag_anova_confid_interval (g04dbc) Example Program Results\n");

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

  scanf("%ld %ld ", &n, &nt);
  if (!(y = nAG_ALLOC(n, double))
      || !(it = nAG_ALLOC(n, Integer))
      || !(tmean = nAG_ALLOC(nt, double))
      || !(table = nAG_ALLOC(4 * 5, double))
      || !(c = nAG_ALLOC(nt * nt, double))
      || !(irep = nAG_ALLOC(nt, Integer))
      || !(r = nAG_ALLOC(n, double))
      || !(ef = nAG_ALLOC(nt, double))
      || !(isig = nAG_ALLOC(nt * (nt - 1) / 2, Integer))
      || !(cil = nAG_ALLOC(nt * (nt - 1) / 2, double))
      || !(ciu = nAG_ALLOC(nt * (nt - 1) / 2, double)))
  {
    printf("Allocation failure\n");
    exit_status = 1;
    goto END;
  }

  for (i = 1; i <= n; ++i)
    scanf("%lf ", &y[i - 1]);
  for (i = 1; i <= n; ++i)
    scanf("%ld ", &it[i - 1]);
  tol = 5e-6;
  irdf = 0;
  nblock = 1;
  if (!(bmean = nAG_ALLOC(nblock, double)))
  {
    exit_status = -1;
    printf("Allocation failure\n");
    goto END;
  }
  /* nag_anova_random (g04bbc).
   * General block design or completely randomized design
   */
  nag_anova_random(n, y, Nag_NoBlocks, nblock, nt, it, &gmean, bmean, tmean,
                   table, c, nt, irep, r, ef, tol, irdf, &fail);
  if (fail.code != NE_NOERROR) {
    printf("Error from nag_anova_random (g04bbc).\n%s\n", fail.message);
    exit_status = -1;
    goto END;
  }

  printf("\n%s\n\n", "ANOVA table");
  printf("%s\n\n",
         "  Source        df         SS          MS          F        Prob");
  printf(" Treatments");
  for (j = 1; j <= 5; ++j)
    printf(fmt_99998[j], TABLE(2, j));
  printf("\n");
  printf(" Residual  ");
  for (j = 1; j <= 3; ++j)
    printf(fmt_99998[j], TABLE(3, j));
  printf("\n");
  printf(" Total     ");
  for (j = 1; j <= 2; ++j)
    printf(fmt_99998[j], TABLE(4, j));
  printf("\n");
  printf("\n Treatment means\n");
  printf("\n");
  for (j = 1; j <= nt; ++j)
    printf("%8.3f%s", tmean[j - 1], j % 8 ? "" : "\n");
  printf("\n");
  printf("\n Simultaneous Confidence Intervals\n\n");
  rdf = TABLE(3, 1);
  scanf(" %39s %lf", nag_enum_arg, &clevel);
  /* nag_enum_name_to_value (x04nac).
   * Converts nAG enum member name to value
   */
  type = (Nag_IntervalType) nag_enum_name_to_value(nag_enum_arg);

  /* nag_anova_confid_interval (g04dbc).
   * Computes confidence intervals for differences between
   * means computed by nag_anova_random (g04bbc) or
   * nag_anova_row_col (g04bcc)
   */
  nag_anova_confid_interval(type, nt, tmean, rdf, c, nt, clevel, cil, ciu,
                            isig, &fail);
  if (fail.code != NE_NOERROR) {
    printf("Error from nag_anova_confid_interval (g04dbc).\n%s\n",
           fail.message);
    exit_status = 1;
    goto END;
  }

  star[1] = '*';
  star[0] = ' ';
  star[2] = '\0';
  ij = 0;
  for (i = 1; i <= nt; ++i) {
    for (j = 1; j <= i - 1; ++j) {
      ++ij;
      printf("  %2ld%2ld   %10.3f  %10.3f  %c\n",
             i, j, cil[ij - 1], ciu[ij - 1], star[isig[ij - 1]]);
    }
  }

END:
  nAG_FREE(y);
  nAG_FREE(it);
  nAG_FREE(tmean);
  nAG_FREE(table);
  nAG_FREE(c);
  nAG_FREE(irep);
  nAG_FREE(r);
  nAG_FREE(ef);
  nAG_FREE(isig);
  nAG_FREE(cil);
  nAG_FREE(ciu);
  nAG_FREE(bmean);

  return exit_status;
}


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