Keyword: 正規誤差, 一般化線形モデル, フィット
概要
本サンプルは正規誤差をもつ一般化線形モデルのフィットを行うC#によるサンプルプログラムです。 本サンプルは以下に示されるデータについて一般化線形モデルのフィットを行います。
※本サンプルはnAG Library for .NETに含まれる関数 g02ga() のExampleコードです。本サンプル及び関数の詳細情報は g02ga のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本関数の詳細はg02ga のマニュアルページを参照)| このデータをダウンロード |
g02ga Example Program Data 'R' 'M' 'N' 'U' 5 1 0.0 0 1.0 25.0 2.0 10.0 3.0 6.0 4.0 4.0 5.0 3.0 1
- 1行目はタイトル行で読み飛ばされます。
- 2行目の1番目のパラメータ(link)はどのリンク関数が使用されるかを指定しています。 "R"は相互リンク(reciprocal link)が使用されることを意味します。2番目のパラメータ(mean)は一般化線形モデルの引数に切片が含まれるかどうかを指定しています。 "M" は切片を含めることを意味します。3番目のパラメータ(offset)はオフセットが必要かどうかを指定しています。"N"は必要ないことを意味します。4番目のパラメータ(weight)は重みづけをするかどうかを指定します。 "U" は重みづけをしないことを意味します。5番目のパラメータ(n)は観測値の数を指定しています。6番目のパラメータ(m)は独立変数の数を指定しています。7番目のパラメータ(s)はモデルのスケール引数を指定しています。"0.0"はスケール引数が残差平均平方から推定されることを意味します。8番目のパラメータ(iprint)は反復についての情報が必要かどうか、また出力する割合を指定しています。 "0"は何も出力しないことを意味します。
- 3〜7行目に独立変数の観測値(x)と従属変数の観測値(y)を指定しています。
- 8行目はモデルに独立変数が含まれるかどうかを示すパラメータ(isx)を指定しています。"1"は含まれることを意味します。
出力結果
(本関数の詳細はg02ga のマニュアルページを参照)| この出力例をダウンロード |
g02ga Example Program Results
Residual sum of squares = 3.8717e-001 Degrees of freedom = 3
Estimate Standard error
-0.0239 0.0028
0.0638 0.0026
Y FV Residual H
25.0 25.04 -0.0387 0.995
10.0 9.64 0.3613 0.458
6.0 5.97 0.0320 0.268
4.0 4.32 -0.3221 0.167
3.0 3.39 -0.3878 0.112
- 3〜4行目に残差平方和と自由度が出力されています。
- 4〜6行目に一般化線形モデルの引数の推定値と標準誤差が出力されています。
- 8〜13行目に従属変数の観測値、フィットされた値、残差、てこ値が出力されています。
ソースコード
(本関数の詳細はg02ga のマニュアルページを参照)
※本サンプルソースコードは .NET環境用の科学技術・統計計算ライブラリである「nAG Library for .NET」の関数を呼び出します。
サンプルのコンパイル及び実行方法
| このソースコードをダウンロード |
// g02ga Example Program Text
// C# version, nAG Copyright 2008
using System;
using NagLibrary;
using System.IO;
namespace NagDotNetExamples
{
public class G02GAE
{
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/g02gae.d");
}
else
{
sr = new DataReader(datafile);
}
double a, eps, rss, s, tol; int i, idf, ip, iprint, irank, j, m, maxit, n;
string link = "",
mean = "",
offset = "",
weight = "";
int ifail;
Console.WriteLine("g02ga Example Program Results");
// Skip heading in data file
a = 0.0;
sr.Reset();
sr.Reset();
link = sr.Next();
mean = sr.Next();
offset = sr.Next();
weight = sr.Next();
n = int.Parse(sr.Next());
m = int.Parse(sr.Next());
s = double.Parse(sr.Next());
iprint = int.Parse(sr.Next());
double[] wt = new double[n];
double[,] x = new double[n, m];
double[] y = new double[n];
int[] isx = new int[m];
if (n >= 1 && m >= 1)
{
if ((weight == "W") || (weight == "w"))
{
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());
wt[i - 1] = double.Parse(sr.Next());
}
}
else
{
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());
}
}
sr.Reset();
for (j = 1; j <= m; j++)
{
isx[j - 1] = int.Parse(sr.Next());
}
// Calculate ip
ip = 0;
for (j = 1; j <= m; j++)
{
if (isx[j - 1] > 0)
{
ip = ip + 1;
}
}
if ((mean == "M") || (mean == "m"))
{
ip = ip + 1;
}
double[] b = new double[ip];
double[] cov = new double[(ip * ip + ip) / 2];
double[] se = new double[ip];
double[,] v = new double[n, 7 + ip];
if ((link == "E") || (link == "e"))
{
sr.Reset();
a = double.Parse(sr.Next());
}
// Set control parameters
eps = 0.0000010e0;
tol = 0.000050e0;
maxit = 10;
//
G02.g02ga(link, mean, offset, weight, n, x, m, isx, ip, y, wt, ref s, a, out rss, out idf, b,
out irank, se, cov, v, tol, maxit, iprint, eps, out ifail);
//
if ((ifail == 0) || (ifail >= (6)))
{
Console.WriteLine(" ");
Console.Write(" {0}{1,12:e4}{2}{3,2}", "Residual sum of squares = ", rss, " Degrees of freedom = ", idf);
Console.WriteLine(" ");
Console.Write(" {0}", " Estimate Standard error");
Console.WriteLine(" ");
for (i = 1; i <= ip; i++)
{
Console.WriteLine(" {0,14:f4}{1,14:f4}", b[i - 1], se[i - 1]);
}
Console.WriteLine(" ");
Console.Write(" {0}", " Y FV Residual H");
Console.WriteLine(" ");
for (i = 1; i <= n; i++)
{
Console.WriteLine(" {0,7:f1}{1,10:f2}{2,12:f4}{3,10:f3}", y[i - 1], v[i - 1, 1], v[i - 1, 4], v[i - 1, 5]);
}
}
else
{
Console.WriteLine(" ");
Console.WriteLine("** g02ga failed with ifail = {0,5}", ifail);
}
}
//
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.Write( "Exception Raised");
}
}
}
}
