Keyword: パラメータ推定, PLS, 予測
概要
本サンプルはパラメータ推定に基づくPLS予測を行うC言語によるサンプルプログラムです。 本サンプルは以下に示されるデータについてPLS予測を行います。
※本サンプルは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; }