群内分散共分散行列の等価性のための検定統計量の計算

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

ホーム > 製品 > nAG数値計算ライブラリ > サンプルソースコード集 > 群内分散共分散行列の等価性のための検定統計量の計算 (C言語/C++)

Keyword: 分散共分散行列, 等価性, 検定統計量, 多変量解析

概要

本サンプルは群内分散共分散行列の等価性のための検定統計量の計算を行うC言語によるサンプルプログラムです。 本サンプルは以下に示されるデータについて検定統計量の計算を行います。

検定統計量計算のデータ 

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

入力データ

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

このデータをダウンロード
nag_mv_discrim (g03dac) Example Program Data
  21 2 2 3 U
  1.1314    2.4596   1
  1.0986    0.2624   1
  0.6419   -2.3026   1
  1.3350   -3.2189   1
  1.4110    0.0953   1
  0.6419   -0.9163   1
  2.1163    0.0000   2
  1.3350   -1.6094   2
  1.3610   -0.5108   2
  2.0541    0.1823   2
  2.2083   -0.5108   2
  2.7344    1.2809   2
  2.0412    0.4700   2
  1.8718   -0.9163   2
  1.7405   -0.9163   2
  2.6101    0.4700   2
  2.3224    1.8563   3
  2.2192    2.0669   3
  2.2618    1.1314   3
  3.9853    0.9163   3
  2.7600    2.0281   3
  1     1

  • 1行目はタイトル行で読み飛ばされます。
  • 2行目に観測値の数(n)、変数の数(m)、分散共分散行列の変数の数(nvar)、グループの数(ng)、重みづけをするかどうか(weight)を指定しています。 "U"は重みづけをしないことを意味します。
  • 3~23行目に変数の観測値(x)と観測値がどのグループに属するか(ing)を指定しています。
  • 24行目に変数が分散共分散行列に含まれるかどうか(isx)を指定しています。"1"の場合は計算に含まれます。

出力結果

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

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


Group means

    1.0433   -0.6034
    2.0073   -0.2060
    2.7097    1.5998

LOG of determinants

   -0.8273   -3.0460   -2.2877

stat = 19.2410
  df =  6.0000
 sig =  0.0038

  • 4~8行目にグループ平均が出力されています。
  • 10~12行目に群内分散共分散行列の因子の対数が出力されています。
  • 14行目に尤度比検定統計量が出力されています。
  • 15行目に自由度が出力されています。
  • 16行目に有意度が出力されています。

ソースコード

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

※本サンプルソースコードは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

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

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

#define GMEAN(I, J) gmean[(I) *tdgmean + J]
#define X(I, J)     x[(I) *tdx + J]
int main(void)
{
  Integer exit_status = 0, i, *ing = 0, *isx = 0, j, m, n, ng, *nig = 0, nvar,
         tdgmean;
  Integer tdx;
  NagError fail;
  char weight[2];
  double *det = 0, df, *gc = 0, *gmean = 0, sig, stat, *wt = 0, *wtptr = 0;
  double *x = 0;

  INIT_FAIL(fail);

  printf("nag_mv_discrim (g03dac) Example Program Results\n\n");

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

  scanf("%ld", &n);
  scanf("%ld", &m);
  scanf("%ld", &nvar);
  scanf("%ld", &ng);
  scanf("%1s", weight);
  if (n >= 1 && nvar >= 1 && m >= nvar && ng >= 2) {
    if (!(det = nAG_ALLOC(ng, double)) ||
        !(gc = nAG_ALLOC((ng + 1) * nvar * (nvar + 1) / 2, double)) ||
        !(gmean = nAG_ALLOC(ng * nvar, double)) ||
        !(wt = nAG_ALLOC(n, double)) ||
        !(x = nAG_ALLOC(n * m, double)) ||
        !(ing = nAG_ALLOC(n, Integer)) ||
        !(isx = nAG_ALLOC(m, Integer)) || !(nig = nAG_ALLOC(ng, Integer)))
    {
      printf("Allocation failure\n");
      exit_status = -1;
      goto END;
    }
    tdgmean = nvar;
    tdx = m;
  }
  else {
    printf("Invalid n or nvar or m or ng.\n");
    exit_status = 1;
    return exit_status;
  }
  if (*weight == 'W') {
    for (i = 0; i < n; ++i) {
      for (j = 0; j < m; ++j)
        scanf("%lf", &X(i, j));
      scanf("%ld", &ing[i]);
      scanf("%lf", &wt[i]);
    }
    wtptr = wt;
  }
  else {
    for (i = 0; i < n; ++i) {
      for (j = 0; j < m; ++j)
        scanf("%lf", &X(i, j));
      scanf("%ld", &ing[i]);
    }
  }
  for (j = 0; j < m; ++j)
    scanf("%ld", &isx[j]);

  /* nag_mv_discrim (g03dac).
   * Test for equality of within-group covariance matrices
   */
  nag_mv_discrim(n, m, x, tdx, isx, nvar, ing, ng, wtptr, nig,
                 gmean, tdgmean, det, gc, &stat, &df, &sig, &fail);
  if (fail.code != NE_NOERROR) {
    printf("Error from nag_mv_discrim (g03dac).\n%s\n", fail.message);
    exit_status = 1;
    goto END;
  }

  printf("\nGroup means\n\n");
  for (i = 0; i < ng; ++i) {
    for (j = 0; j < nvar; ++j)
      printf("%10.4f", GMEAN(i, j));
    printf("\n");
  }
  printf("\nLOG of determinants\n\n");
  for (j = 0; j < ng; ++j)
    printf("%10.4f", det[j]);
  printf("\n\n%s%7.4f\n", "stat = ", stat);
  printf("%s%7.4f\n", "  df = ", df);
  printf("%s%7.4f\n", " sig = ", sig);
END:
  nAG_FREE(det);
  nAG_FREE(gc);
  nAG_FREE(gmean);
  nAG_FREE(wt);
  nAG_FREE(x);
  nAG_FREE(ing);
  nAG_FREE(isx);
  nAG_FREE(nig);
  return exit_status;
}


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