関連情報

C#による ロバスト回帰のM推定量の計算

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

Keyword: ロバスト回帰, M推定量

概要

本サンプルはロバスト回帰のM推定量の計算を行うC#によるサンプルプログラムです。 本サンプルは以下に示されるデータについてロバスト回帰のM推定量の計算を行います。

ロバスト回帰のデータ 

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

入力データ

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

このデータをダウンロード
g02ha Example Program Data
 8  3            : N   M
 1. -1. -1. 2.1  
 1. -1.  1. 3.6
 1.  1. -1. 4.5
 1.  1.  1. 6.1
 1. -2.  0. 1.3
 1.  0. -2. 1.9
 1.  2.  0. 6.7
 1.  0.  2. 5.5  : End of X1 X2 X3 and Y values
 1  2  1         : INDW  IPSI  ISIGMA
 3.0  0          : CUCV  INDC (Only if INDW.ne.0)
 1.5 3.0 4.5     : H1  H2  H3 (Only if IPSI.eq.2)
 1.5             : DCHI (Only if IPSI.gt.0 .and. ISIGMA.gt.1) 

  • 1行目はタイトル行で読み飛ばされます。
  • 2行目は観測値の数(n)と独立変数の数(m)を指定しています。
  • 3〜10行目に独立変数の観測値(x)と従属変数の観測値(y)を指定しています。
  • 11行目の1番目のパラメータ(indw)は実行される回帰の種類を指定しています。 "1"はSchweppeタイプの回帰を意味します。2番めのパラメータ(ipsi)はどのΨ関数が使用されるかを指定しています。 "2"はHampelの区分線形関数が使用されることを意味します。3番目のパラメータ(isigma)はσの推定方法を指定しています。 "1"はσ がχ 関数を使用して推定されることを意味します。
  • 12行目の1番目のパラメータ(cucv)はKrasker-Welschの重みのu関数の定数を指定しています。2番目のパラメータ(indc)は共分散行列の推定で使用される近似法を指定しています。"0"は期待値を観測値で置き換えることを意味します。
  • 13行目はHampelの区分線形関数のパラメータ(h1,h2,h3)を指定しています。
  • 14行目はχ関数の定数(dchi)を指定しています。

出力結果

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

この出力例をダウンロード
g02ha Example Program Results

  Sigma =     0.2026 
        THETA      Standard
                    errors
        4.0423       0.0384
        1.3083       0.0272
        0.7519       0.0311

      Weights     Residuals
        0.5783       0.1179
        0.5783       0.1141
        0.5783      -0.0987
        0.5783      -0.0026
        0.4603      -0.1256
        0.4603      -0.6385
        0.4603       0.0410
        0.4603      -0.0462

  • 3行目に σ の最終推定値が出力されています。
  • 4〜8行目にθと標準誤差が出力されています。
  • 10〜18行目に各観測値の重みと残差が出力されています。

ソースコード

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

※本サンプルソースコードは .NET環境用の科学技術・統計計算ライブラリである「NAG Library for .NET」の関数を呼び出します。
サンプルのコンパイル及び実行方法


このソースコードをダウンロード
//      g02ha Example Program Text
//      C# version, NAG Copyright 2008
using System;
using NagLibrary;
using System.IO;
namespace NagDotNetExamples
{
  public class G02HAE
  {
    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/g02hae.d");
        }
        else
        {
          sr = new DataReader(datafile);
        }
        double cpsi,   cucv,   dchi,   h1,   h2,   h3,   sigma,   tol; int i,  indc,  indw,  ipsi,  isigma,  j,  m,  maxit,  n,  nitmon;
        int ifail;
        Console.WriteLine("g02ha Example Program Results");
        //      Skip heading in data file
        indc = 0;
        cpsi = 0.0;
        h1 = 0.0;
        h2 = 0.0;
        h3 = 0.0;
        cucv = 0.0;
        dchi = 0.0;
        sr.Reset();
        //      Read in number of observations and number of x variables
        sr.Reset();
        n = int.Parse(sr.Next());
        m = int.Parse(sr.Next());
        double[,] c = new double[m, m];
        double[] rs = new double[n];
        double[] theta = new double[m];
        double[] wgt = new double[n];
        double[,] x = new double[n, m];
        double[] y = new double[n];
        double[] stat = new double[4];
        Console.WriteLine(" ");
        if (n > 0 && m > 0)
        {
          //         Read in x and y
          for (i = 1; i <= n; i++)
          {
            sr.Reset();
            for (j = 1; j <= m; j++)
            {
              x[i - 1, j - 1] = double.Parse(sr.Next());
            }
            y[i - 1] = double.Parse(sr.Next());
          }
          //         Read in control parameters
          sr.Reset();
          indw = int.Parse(sr.Next());
          ipsi = int.Parse(sr.Next());
          isigma = int.Parse(sr.Next());
          //         Read in appropriate weight function parameters.
          if (indw != 0)
          {
            sr.Reset();
            cucv = double.Parse(sr.Next());
            indc = int.Parse(sr.Next());
          }
          if (ipsi > 0)
          {
            if (ipsi == 1)
            {
              sr.Reset();
              cpsi = double.Parse(sr.Next());
            }
            if (ipsi == 2)
            {
              sr.Reset();
              h1 = double.Parse(sr.Next());
              h2 = double.Parse(sr.Next());
              h3 = double.Parse(sr.Next());
            }
            if (isigma > 0)
            {
              sr.Reset();
              dchi = double.Parse(sr.Next());
            }
          }
          //         Set values of remaining parameters
          tol = 0.50e-4;
          maxit = 50;
          // Change nitmon to a positive value if monitoring information
          // is required
          nitmon = 0;
          sigma = 1.00e0;
          for (i = 1; i <= m; i++)
          {
            theta[i - 1] = 0.00e0;
          }
          // 
          G02.g02ha(indw, ipsi, isigma, indc, n, m, x, y, cpsi, h1, h2, h3, cucv, dchi, theta, ref sigma,
                   
          c, rs, wgt, tol, maxit, nitmon, stat, out ifail);
          // 
          if (((ifail != 0)) && ((ifail < 7)))
          {
            Console.WriteLine(" ");
            Console.WriteLine("** g02ha failed with ifail = {0,5}", ifail);
          }
          else
          {
            if (ifail >= (7))
            {
              Console.WriteLine("  {0}{1,5}", "g02ha returned ifail = ", ifail);
              Console.WriteLine(" {0}", "       Some of the following results may be unreliable");
            }
            Console.Write("  {0}{1,10:f4}", "Sigma = ", sigma);
            Console.WriteLine(" ");
            Console.WriteLine(" {0}", "       THETA      Standard");
            Console.WriteLine(" {0}", "                   errors");
            for (j = 1; j <= m; j++)
            {
              Console.WriteLine("  {0,12:f4}{1,13:f4}", theta[j - 1], c[j - 1, j - 1]);
            }
            Console.WriteLine(" ");
            Console.WriteLine(" {0}", "     Weights     Residuals");
            for (i = 1; i <= n; i++)
            {
              Console.WriteLine("  {0,12:f4}{1,13:f4}", wgt[i - 1], rs[i - 1]);
            }
          }
        }
        // 
      }
      catch (Exception e)
      {
        Console.WriteLine(e.Message);
        Console.Write( "Exception Raised");
      }
    }
  }
}


Results matter. Trust NAG.

Privacy Policy | Trademarks