パラメータ推定に基づく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 のマニュアルページを参照)

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

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


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


関連情報
Privacy Policy  /  Trademarks