関連情報

C#による パラメータ推定に基づくPLS予測

C#によるサンプルソースコード
使用関数名:g02ld

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

概要

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

Ridge回帰のデータ 

※本サンプルは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");
      }
    }
  }
}


Results matter. Trust NAG.

Privacy Policy | Trademarks