Keyword: 2項誤差, 一般化線形モデル, フィット
概要
本サンプルは2項誤差をもつ一般化線形モデルのフィットを行うC#によるサンプルプログラムです。 本サンプルは以下に示されるデータについて一般化線形モデルのフィットを行います。
※本サンプルはnAG Library for .NETに含まれる関数 g02gb() のExampleコードです。本サンプル及び関数の詳細情報は g02gb のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本関数の詳細はg02gb のマニュアルページを参照)| このデータをダウンロード |
g02gb Example Program Data 'G' 'M' 'N' 'U' 3 1 0 1.0 19. 516. 0.0 29. 560. -1.0 24. 293. 1
- 1行目はタイトル行で読み飛ばされます。
- 2行目の1番目のパラメータ(link)はどのリンク関数が使用されるかを指定しています。 "G"はログリンクが使用されることを意味します。2番目のパラメータ(mean)は一般化線形モデルの引数に切片が含まれるかどうかを指定しています。 "M" は切片を含めることを意味します。3番目のパラメータ(offset)はオフセットが必要かどうかを指定しています。"N"は必要ないことを意味します。4番目のパラメータ(weight)は重みづけをするかどうかを指定します。 "U" は重みづけをしないことを意味します。5番目のパラメータ(n)は観測値の数、6番目のパラメータ(m)は独立変数の数を指定しています。7番目のパラメータ(iprint)は反復についての情報が必要かどうか、また出力する割合を指定しています。 "0"は何も出力しないことを意味します。
- 3〜5行目に独立変数の観測値(x)、従属変数の観測値(y)と2項分母(t)を指定しています。
- 6行目はモデルに独立変数が含まれるかどうかを示すパラメータ(isx)を指定しています。"1"は含まれることを意味します。
出力結果
(本関数の詳細はg02gb のマニュアルページを参照)| この出力例をダウンロード |
g02gb Example Program Results
Deviance = 7.3539e-002
Degrees of freedom = 1
Estimate Standard error
-2.8682 0.1217
-0.4264 0.1598
N Y FV Residual H
516.0 19.0 18.45 0.1296 0.769
560.0 29.0 30.10 -0.2070 0.422
293.0 24.0 23.45 0.1178 0.809
- 3行目にデビアンス(deviance)が出力されています。
- 4行目に自由度が出力されています。
- 6〜16行目に一般化線形モデルの引数の推定値と標準誤差が出力されています。
- 18〜34行目に2項分母、従属変数の観測値、フィットされた値、残差、てこ値が出力されています。
ソースコード
(本関数の詳細はg02gb のマニュアルページを参照)
※本サンプルソースコードは .NET環境用の科学技術・統計計算ライブラリである「nAG Library for .NET」の関数を呼び出します。
サンプルのコンパイル及び実行方法
| このソースコードをダウンロード |
// g02gb Example Program Text
// C# version, nAG Copyright 2008
using System;
using NagLibrary;
using System.IO;
namespace NagDotNetExamples
{
public class G02GBE
{
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/g02gbe.d");
}
else
{
sr = new DataReader(datafile);
}
double dev, eps, tol; int i, idf, ip, iprint, irank, j, m, maxit, n;
string link = "",
mean = "",
offset = "",
weight = "";
int ifail;
Console.WriteLine("g02gb Example Program Results");
// Skip heading in data file
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());
iprint = int.Parse(sr.Next());
double[] t = new double[n];
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());
t[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());
t[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[] se = new double[ip];
double[] cov = new double[(ip*ip + ip)/2];
double[,] v = new double[n, 7+ip];
// Set control parameters
eps = 0.0000010e0;
tol = 0.000050e0;
maxit = 10;
//
G02.g02gb(link, mean, offset, weight, n, x, m, isx, ip, y, t, wt, 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}", " N Y FV Residual H");
Console.WriteLine(" ");
for (i = 1; i <= n; i++)
{
Console.WriteLine(" {0,10:f1}{1,10:f1}{2,10:f2}{3,12:f4}{4,10:f3}", t[i - 1], y[i - 1], v[i - 1, 1], v[i - 1, 4], v[i - 1, 5]);
}
}
else
{
Console.WriteLine(" ");
Console.WriteLine("** g02gb failed with ifail = {0,5}", ifail);
}
}
//
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.Write( "Exception Raised");
}
}
}
}
