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");
}
}
}
}
