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;
}
