Keyword: パラメータ推定, PLS, 予測
概要
本サンプルはパラメータ推定に基づくPLS予測を行うC#によるサンプルプログラムです。 本サンプルは以下に示されるデータについてPLS予測を行います。
※本サンプルはnAG Library for .NETに含まれる関数 g02ld() のExampleコードです。本サンプル及び関数の詳細情報は g02ld のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本関数の詳細はg02ld のマニュアルページを参照)| このデータをダウンロード |
g02ld Example Program Data 15 1 -1 1 15 15 : IP, MY, ORIG, SCALE, 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行目の1番目のパラメータは予測変数の数(ip)を指定しています。2番目のパラメータは応答変数の数(my)を指定しています。3番目のパラメータ(orig)はどのようにパラメータ推定が行われるかを指定しています。"-1"は中心的スケーリング可能(centred and possibly scaled)データに対しパラメータ推定が行われることを意味します。4番目のパラメータ(iscale)はどのように予測変数がスケーリングされるかを指定しています。 "1"はデータが変数の標準分散によってスケーリングされることを意味します。5番目のパラメータ(n)はテストデータの観測値の数を指定しています。6番目のパラメータ(mz)はテストデータで有効な予測変数の数を指定しています。
- 3〜47行目は予測変数の観測値(z)を指定しています。
- 48行目はどの予測変数がモデルに含まれるかを示すパラメータ(isz)を指定しています。
- 49〜63行目はパラメータ推定値(b)を指定しています。
- 64〜66行目は予測変数の平均値(xbar)を指定しています。
- 67行目は応答変数の平均値(ybar)を指定しています。
- 68〜70行目は予測変数のスケーリング(xstd)を指定しています。
- 71行目は応答変数のスケーリング(ystd)を指定しています。
出力結果
(本関数の詳細はg02ld のマニュアルページを参照)| この出力例をダウンロード |
g02ld 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
- 3〜18行目に応答変数の予測値が出力されています。
ソースコード
(本関数の詳細はg02ld のマニュアルページを参照)
※本サンプルソースコードは .NET環境用の科学技術・統計計算ライブラリである「nAG Library for .NET」の関数を呼び出します。
サンプルのコンパイル及び実行方法
| このソースコードをダウンロード |
// g02ld Example Program Text
// C# version, nAG Copyright 2008
using System;
using NagLibrary;
using System.IO;
namespace NagDotNetExamples
{
public class G02LDE
{
static bool defaultdata = true;
static string datafile = "";
static void Main(String[] args)
{
if (args.Length == 1)
{
defaultdata = false;
datafile = args[0];
}
StartExample();
}
public static void StartExample()
{
try
{
DataReader sr = null;
if (defaultdata)
{
sr = new DataReader("exampledata/g02lde.d");
}
else
{
sr = new DataReader(datafile);
}
int i, ip, iscale, j, l, my, mz, n, orig;
int ifail;
Console.WriteLine("g02ld Example Program Results");
// Skip header in data file.
sr.Reset();
// Read data values.
sr.Reset();
ip = int.Parse(sr.Next());
my = int.Parse(sr.Next());
orig = int.Parse(sr.Next());
iscale = int.Parse(sr.Next());
n = int.Parse(sr.Next());
mz = int.Parse(sr.Next());
double[] ybar = new double[my];
double[,] yhat = new double[n, my];
double[] ystd = new double[my];
double[,] z = new double[n, mz];
int[] isz = new int[mz];
double[] xbar = new double[ip];
double[] xstd = new double[ip];
// Read prediction x-data
for (i = 1; i <= n; i++)
{
sr.Reset();
for (j = 1; j <= mz; j++)
{
z[i - 1, j - 1] = double.Parse(sr.Next());
}
}
// Read elements of isz
sr.Reset();
for (j = 1; j <= mz; j++)
{
isz[j - 1] = int.Parse(sr.Next());
}
// Read parameter estimates
l = (int)ip;
if (orig != -1)
{
l = l + 1;
}
double[,] b = new double[l, my];
for (j = 1; j <= l; j++)
{
sr.Reset();
for (i = 1; i <= my; i++)
{
b[j - 1, i - 1] = double.Parse(sr.Next());
}
}
// Read means
sr.Reset();
for (j = 1; j <= ip; j++)
{
xbar[j - 1] = double.Parse(sr.Next());
}
sr.Reset();
for (l = 1; l <= my; l++)
{
ybar[l - 1] = double.Parse(sr.Next());
}
if (((orig == -1)) && ((iscale != -1)))
{
sr.Reset();
for (j = 1; j <= ip; j++)
{
xstd[j - 1] = double.Parse(sr.Next());
}
sr.Reset();
for (l = 1; l <= my; l++)
{
ystd[l - 1] = double.Parse(sr.Next());
}
}
// Calculate predictions
G02.g02ld(ip, my, orig, xbar, ybar, iscale, xstd, ystd, b, n, mz, isz, z, yhat, out ifail);
if (ifail != 0)
{
Console.WriteLine("** g02ld failed with ifail = {0,5}", ifail);
}
else
{
X04.x04ca("G", "X", n, my, yhat, "YHAT", out ifail);
}
//
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.Write( "Exception Raised");
}
}
}
}
