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

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 のマニュアルページを参照)

このデータをダウンロード
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 のマニュアルページを参照)

この出力例をダウンロード
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等に対応)の関数を呼び出します。
サンプルのコンパイル及び実行方法


このソースコードをダウンロード
/* 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;
}


関連情報
Privacy Policy  /  Trademarks