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