パラメータ推定に基づくPLS予測

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

ホーム > 製品 > nAG数値計算ライブラリ > サンプルソースコード集 > パラメータ推定に基づくPLS予測 (C言語/C++)

Keyword: パラメータ推定, PLS, 予測

概要

本サンプルはパラメータ推定に基づくPLS予測を行うC言語によるサンプルプログラムです。 本サンプルは以下に示されるデータについてPLS予測を行います。

Ridge回帰のデータ 

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

入力データ

(本関数の詳細はnag_pls_orth_scores_pred のマニュアルページを参照)
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

このデータをダウンロード
nag_pls_orth_scores_pred (g02ldc) Example Program Data
15 1 Nag_EstimatesStand Nag_PredStdScale 15 15 : ip, my, orig, iscale, n, mz
 -2.6931 -2.5271 -1.2871  3.0777  0.3891 -0.0701
  1.9607 -1.6324  0.5746  1.9607 -1.6324  0.5740
  2.8369  1.4092 -3.1398
 -2.6931 -2.5271 -1.2871  3.0777  0.3891 -0.0701
  1.9607 -1.6324  0.5746  0.0744 -1.7333  0.0902
  2.8369  1.4092 -3.1398
 -2.6931 -2.5271 -1.2871  3.0777  0.3891 -0.0701
  0.0744 -1.7333  0.0902  1.9607 -1.6324  0.5746
  2.8369  1.4092 -3.1398
 -2.6931 -2.5271 -1.2871  3.0777  0.3891 -0.0701
  0.0744 -1.7333  0.0902  0.0744 -1.7333  0.0902
  2.8369  1.4092 -3.1398
 -2.6931 -2.5271 -1.2871  2.8369  1.4092 -3.1398
  0.0744 -1.7333  0.0902  0.0744 -1.7333  0.0902
  2.8369  1.4092 -3.1398
 -2.6931 -2.5271 -1.2871  3.0777  0.3891 -0.0701
 -4.7548  3.6521  0.8524  0.0744 -1.7333  0.0902
  2.8369  1.4092 -3.1398
 -2.6931 -2.5271 -1.2871  3.0777  0.3891 -0.0701
  0.0744 -1.7333  0.0902  0.0744 -1.7333  0.0902
 -1.2201  0.8829  2.2253
 -2.6931 -2.5271 -1.2871  3.0777  0.3891 -0.0701
  2.4064  1.7438  1.1057  0.0744 -1.7333  0.0902
  2.8369  1.4092 -3.1398
 -2.6931 -2.5271 -1.2871  0.0744 -1.7333  0.0902
  0.0744 -1.7333  0.0902  0.0744 -1.7333  0.0902
  2.8369  1.4092 -3.1398
  2.2261 -5.3648  0.3049  3.0777  0.3891 -0.0701
  0.0744 -1.7333  0.0902  0.0744 -1.7333  0.0902
  2.8369  1.4092 -3.1398
 -4.1921 -1.0285 -0.9801  3.0777  0.3891 -0.0701
  0.0744 -1.7333  0.0902  0.0744 -1.7333  0.0902
  2.8369  1.4092 -3.1398
 -4.9217  1.2977  0.4473  3.0777  0.3891 -0.0701
  0.0744 -1.7333  0.0902  0.0744 -1.7333  0.0902
  2.8369  1.4092 -3.1398
 -2.6931 -2.5271 -1.2871  3.0777  0.3891 -0.0701
  2.2261 -5.3648  0.3049  2.2261 -5.3648  0.3049
  2.8369  1.4092 -3.1398
 -2.6931 -2.5271 -1.2871  3.0777  0.3891 -0.0701
 -4.9217  1.2977  0.4473  0.0744 -1.7333  0.0902
  2.8369  1.4092 -3.1398
 -2.6931 -2.5271 -1.2871  3.0777  0.3891 -0.0701
 -4.1921 -1.0285 -0.9801  0.0744 -1.7333  0.0902
  2.8369  1.4092 -3.1398 : z
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 : Elements of isz
 -0.1383  0.0572 -0.1906  0.1238  0.0591  0.0936
 -0.2842  0.4713  0.2661 -0.0914  0.1226 -0.0488
  0.0332  0.0332 -0.0332 : b
 -2.6137 -2.3614 -1.0449  2.8614  0.3156 -0.2641
 -0.3146 -1.1221  0.2401  0.4694 -1.9619  0.1691
  2.5664  1.3741 -2.7821 : xbar
  0.4520 : ybar
  1.4956  1.3233  0.5829  0.7735  0.6247  0.7966
  2.4113  2.0421  0.4678  0.8197  0.9420  0.1735
  1.0475  0.1359  1.3853 : xstd
  0.9062 : ystd

  • 1行目はタイトル行で読み飛ばされます。
  • 2行目は予測変数の数(ip)、応答変数の数(my)、どのようにパラメータ推定が行われるか(orig)、どのように予測変数がスケーリングされるか(iscale)、テストデータの観測値の数(n)、テストデータで有効な予測変数の数(mz)を指定しています。 "Nag_EstimatesStand"は中心的スケーリング可能(centred and possibly scaled)データに対しパラメータ推定が行われることを意味します。 "Nag_PredStdScale"はデータが変数の標準分散によってスケーリングされることを意味します。
  • 3~47行目は予測変数の観測値(z)を指定しています。
  • 48行目はどの予測変数がモデルに含まれるか(isz)を指定しています。
  • 49~51行目はパラメータ推定値(b)を指定しています。
  • 52~54行目は予測変数の平均値(xbar)を指定しています。
  • 55行目は応答変数の平均値(ybar)を指定しています。
  • 56~58行目は予測変数のスケーリング(xstd)を指定しています。
  • 59行目は応答変数のスケーリング(ystd)を指定しています。

出力結果

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

この出力例をダウンロード
nag_pls_orth_scores_pred (g02ldc) Example Program Results
 YHAT
             1
  1      0.2132
  2      0.5152
  3      0.1437
  4      0.4459
  5      0.1716
  6      2.4809
  7      0.0964
  8      1.4475
  9     -0.1546
 10     -0.5492
 11      0.5393
 12      0.2686
 13     -1.1332
 14      1.7975
 15      0.4973

  • 4~19行目に応答変数の予測値が出力されています。

ソースコード

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

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

このソースコードをダウンロード
/* nag_pls_orth_scores_pred (g02ldc) Example Program.
 *
 * CLL6I261D/CLL6I261DL Version.
 *
 * Copyright 2017 Numerical Algorithms Group.
 *
 * Mark 26.1, 2017.
 */
/* Pre-processor includes */
#include <stdio.h>
#include <math.h>
#include <nag.h>
#include <nag_stdlib.h>
#include <nagg02.h>
#include <nagx04.h>

int main(void)
{
  /*Integer scalar and array declarations */
  Integer exit_status = 0;
  Integer i, ip, j, l, my, mz, n;
  Integer pdb, pdyhat, pdz;
  Integer *isz = 0;
  /*Double scalar and array declarations */
  double *b = 0, *xbar = 0, *xstd = 0, *ybar = 0, *yhat = 0;
  double *ystd = 0, *z = 0;
  /*Character scalar and array declarations */
  char siscale[40], sorig[40];
  /*nAG Types */
  Nag_OrderType order;
  Nag_ScalePredictor iscale;
  Nag_EstimatesOption orig;
  NagError fail;

  INIT_FAIL(fail);

  printf("nag_pls_orth_scores_pred (g02ldc) Example Program Results\n");
  /* Skip header in data file. */
  scanf("%*[^\n] ");
  /* Read data values. */
  scanf("%ld%ld%39s %39s %ld%ld"
        "%*[^\n] ", &ip, &my, sorig, siscale, &n, &mz);
  orig = (Nag_EstimatesOption) nag_enum_name_to_value(sorig);
  iscale = (Nag_ScalePredictor) nag_enum_name_to_value(siscale);

#ifdef nAG_COLUMN_MAJOR
  pdb = ((orig == Nag_EstimatesStand) ? ip : 1 + ip);
#define B(I, J)    b[(J-1)*pdb + I-1]
  pdyhat = n;
  pdz = n;
#define Z(I, J)    z[(J-1)*pdz + I-1]
  order = Nag_ColMajor;
#else
  pdb = my;
#define B(I, J)    b[(I-1)*pdb + J-1]
  pdyhat = my;
  pdz = mz;
#define Z(I, J)    z[(I-1)*pdz + J-1]
  order = Nag_RowMajor;
#endif
  if (!(b = nAG_ALLOC(pdb * (order == Nag_RowMajor ? (1 + ip) : my), double))
      || !(xbar = nAG_ALLOC(ip, double)) || !(xstd = nAG_ALLOC(ip, double))
      || !(ybar = nAG_ALLOC(my, double))
      || !(yhat =
           nAG_ALLOC(pdyhat * (order == Nag_RowMajor ? n : my), double))
      || !(ystd = nAG_ALLOC(my, double))
      || !(z = nAG_ALLOC(pdz * (order == Nag_RowMajor ? n : mz), double))
      || !(isz = nAG_ALLOC(mz, Integer)))
  {
    printf("Allocation failure\n");
    exit_status = -1;
    goto END;
  }
  /* Read prediction x-data */
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= mz; j++)
      scanf("%lf ", &Z(i, j));
  }
  scanf("%*[^\n] ");
  /* Read elements of isz */
  for (j = 0; j < mz; j++)
    scanf("%ld ", &isz[j]);
  scanf("%*[^\n] ");
  /* Read parameter estimates */
  l = ip;
  if (orig != Nag_EstimatesStand) {
    l = l + 1;
  }
  for (j = 1; j <= l; j++) {
    for (i = 1; i <= my; i++)
      scanf("%lf ", &B(j, i));
  }
  scanf("%*[^\n] ");
  /* Read means */
  if (orig == Nag_EstimatesStand) {
    for (j = 0; j < ip; j++)
      scanf("%lf ", &xbar[j]);
    scanf("%*[^\n] ");
    for (l = 0; l < my; l++)
      scanf("%lf ", &ybar[l]);
    scanf("%*[^\n] ");
  }
  /* Read scalings */
  if ((orig == Nag_EstimatesStand) && (iscale != Nag_PredNoScale)) {
    for (j = 0; j < ip; j++)
      scanf("%lf ", &xstd[j]);
    scanf("%*[^\n] ");
    for (l = 0; l < my; l++)
      scanf("%lf ", &ystd[l]);
    scanf("%*[^\n] ");
  }
  /* Calculate predictions */
  /*
   * nag_pls_orth_scores_pred (g02ldc)
   * Partial least squares
   */
  nag_pls_orth_scores_pred(order, ip, my, orig, xbar, ybar, iscale, xstd,
                           ystd, b, pdb, n, mz, isz, z, pdz, yhat, pdyhat,
                           &fail);
  if (fail.code != NE_NOERROR) {
    printf("Error from nag_pls_orth_scores_pred (g02ldc).\n%s\n",
           fail.message);
    exit_status = 1;
    goto END;
  }
  /*
   * nag_gen_real_mat_print (x04cac)
   * Print real general matrix (easy-to-use)
   */
  fflush(stdout);
  nag_gen_real_mat_print(order, Nag_GeneralMatrix, Nag_NonUnitDiag, n, my,
                         yhat, pdyhat, "YHAT", 0, &fail);
  if (fail.code != NE_NOERROR) {
    printf("Error from nag_gen_real_mat_print (x04cac).\n%s\n", fail.message);
    exit_status = 1;
    goto END;
  }

END:
  nAG_FREE(b);
  nAG_FREE(xbar);
  nAG_FREE(xstd);
  nAG_FREE(ybar);
  nAG_FREE(yhat);
  nAG_FREE(ystd);
  nAG_FREE(z);
  nAG_FREE(isz);

  return exit_status;
}


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