Keyword: ガンマ誤差, 一般化線形モデル, フィット
概要
本サンプルはガンマ誤差をもつ一般化線形モデルのフィットを行うC#によるサンプルプログラムです。 本サンプルは以下に示されるデータについて一般化線形モデルのフィットを行います。
※本サンプルはnAG Library for .NETに含まれる関数 g02gd() のExampleコードです。本サンプル及び関数の詳細情報は g02gd のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本関数の詳細はg02gd のマニュアルページを参照)| このデータをダウンロード |
g02gd Example Program Data 'R' 'M' 'N' 'U' 10 1 0.0 0 1.0 1.0 1.0 0.3 1.0 10.5 1.0 9.7 1.0 10.9 0.0 0.62 0.0 0.12 0.0 0.09 0.0 0.50 0.0 2.14 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〜12行目に独立変数の観測値(x)と従属変数の観測値(y)を指定しています。
- 13行目はモデルに独立変数が含まれるかどうかを示すパラメータ(isx)を指定しています。"1"は含まれることを意味します。
出力結果
(本関数の詳細はg02gd のマニュアルページを参照)| この出力例をダウンロード |
g02gd Example Program Results
Deviance = 3.5034e+001
Degrees of freedom = 8
Estimate Standard error
1.4408 0.6678
-1.2865 0.6717
Y FV Residual H
1.0 6.48 -1.3909 0.200
0.3 6.48 -1.9228 0.200
10.5 6.48 0.5236 0.200
9.7 6.48 0.4318 0.200
10.9 6.48 0.5678 0.200
0.6 0.69 -0.1107 0.200
0.1 0.69 -1.3287 0.200
0.1 0.69 -1.4815 0.200
0.5 0.69 -0.3106 0.200
2.1 0.69 1.3665 0.200
- 3行目にデビアンス(deviance)が出力されています。
- 4行目に自由度が出力されています。
- 6〜8行目に一般化線形モデルの引数の推定値と標準誤差が出力されています。
- 10〜20行目に従属変数の観測値、フィットされた値、残差、てこ値が出力されています。
ソースコード
(本関数の詳細はg02gd のマニュアルページを参照)
※本サンプルソースコードは .NET環境用の科学技術・統計計算ライブラリである「nAG Library for .NET」の関数を呼び出します。
サンプルのコンパイル及び実行方法
| このソースコードをダウンロード |
// g02gd Example Program Text
// C# version, nAG Copyright 2008
using System;
using NagLibrary;
using System.IO;
namespace NagDotNetExamples
{
public class G02GDE
{
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/g02gde.d");
}
else
{
sr = new DataReader(datafile);
}
double a, dev, eps, s, tol; int i, idf, ip, iprint, irank, j, m, maxit, n;
string link = "",
mean = "",
offset = "",
weight = "";
int ifail;
Console.WriteLine("g02gd 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 >=2 && 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.g02gd(link, mean, offset, weight, n, x, m, isx, ip, y, wt, ref s, a, out dev, out idf, b,
out irank, se, cov, v, tol, maxit, iprint, eps, out ifail);
//
if ((ifail == 0) || (ifail >= (7)))
{
Console.WriteLine(" ");
Console.WriteLine(" {0}{1,12:e4}", "Deviance = ", dev);
Console.WriteLine(" {0}{1,2}", "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("** g02gd failed with ifail = {0,5}", ifail);
}
}
//
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.Write( "Exception Raised");
}
}
}
}
