C#による ポアソン誤差をもつ一般化線形モデルのフィット

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

ホーム > 製品 > nAG数値計算ライブラリ > C#向けnAGライブラリ > サンプルソースコード集 > ポアソン誤差をもつ一般化線形モデルのフィット

Keyword: ポアソン誤差, 一般化線形モデル, フィット

概要

本サンプルはポアソン誤差をもつ一般化線形モデルのフィットを行うC#によるサンプルプログラムです。 本サンプルは以下に示されるデータについて一般化線形モデルのフィットを行います。

一般化線形モデルのフィットのデータ 

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

入力データ

(本関数の詳細はg02gc のマニュアルページを参照)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

このデータをダウンロード
g02gc Example Program Data
'L' 'M' 'N' 'U' 15 8 0
1.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 141.0
1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0  67.0
1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 114.0
1.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0  79.0
1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0  39.0
0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 131.0
0.0 1.0 0.0 0.0 1.0 0.0 0.0 0.0  66.0
0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 143.0
0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0  72.0
0.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0  35.0
0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0  36.0
0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0  14.0
0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0  38.0
0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0  28.0
0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0  16.0
 1   1   1   1   1   1   1   1 

  • 1行目はタイトル行で読み飛ばされます。
  • 2行目の1番目のパラメータ(link)はどのリンク関数が使用されるかを指定しています。"L"はログリンクが使用されることを意味します。2番目のパラメータ(mean)は一般化線形モデルの引数に切片が含まれるかどうかを指定しています。 "M" は切片を含めることを意味します。3番目のパラメータ(offset)はオフセットが必要かどうかを指定しています。"N"は必要としないことをを意味します。4番目のパラメータ(weight)は重みづけをするかどうかを指定します。 "U" は重みづけをしないことを意味します。5番目のパラメータは観測値の数(n)、6番目のパラメータは独立変数の数(m)を指定しています。7番目のパラメータ(iprint)は反復についての情報が必要かどうか、また必要な場合の出力する割合を指定しています。 "0"は何も出力しないことを意味します。
  • 3~17行目に独立変数の観測値(x)と従属変数の観測値(y)を指定しています。
  • 18行目はモデルに独立変数が含まれるかどうかを示すパラメータ(isx)を指定しています。"1"は含まれることを意味します。

出力結果

(本関数の詳細はg02gc のマニュアルページを参照)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

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

  Deviance =  9.0379e+000
  Degrees of freedom =  8

       Estimate     Standard error

          2.5977        0.0258
          1.2619        0.0438
          1.2777        0.0436
          0.0580        0.0668
          1.0307        0.0551
          0.2910        0.0732
          0.9876        0.0559
          0.4880        0.0675
         -0.1996        0.0904

     Y        FV      Residual       H 
    141.0    132.99      0.6875     0.604
     67.0     63.47      0.4386     0.514
    114.0    127.38     -1.2072     0.596
     79.0     77.29      0.1936     0.532
     39.0     38.86      0.0222     0.482
    131.0    135.11     -0.3553     0.608
     66.0     64.48      0.1881     0.520
    143.0    129.41      1.1749     0.601
     72.0     78.52     -0.7465     0.537
     35.0     39.48     -0.7271     0.488
     36.0     39.90     -0.6276     0.393
     14.0     19.04     -1.2131     0.255
     38.0     38.21     -0.0346     0.382
     28.0     23.19      0.9675     0.282
     16.0     11.66      1.2028     0.206

  • 3行目にデビアンス(deviance)が出力されています。
  • 4行目に自由度が出力されています。
  • 6~16行目に一般化線形モデルの引数の推定値と標準誤差が出力されています。
  • 18~33行目に従属変数の観測値、フィットされた値、残差、てこ値が出力されています。

ソースコード

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153

このソースコードをダウンロード
//      g02gc Example Program Text
//      C# version, nAG Copyright 2008
using System;
using NagLibrary;
using System.IO;
namespace NagDotNetExamples
{
  public class G02GCE
  {
    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/g02gce.d");
        }
        else
        {
          sr = new DataReader(datafile);
        }
        double a,   dev,   eps,   tol; int i,  idf,  ip,  iprint,  irank,  j,  m,  maxit,  n;
        string link = "",
        mean = "",
        offset = "",
        weight = "";
        int ifail;
        Console.WriteLine("g02gc 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());
        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.g02gc(link, mean, offset, weight, n, x, m, isx, ip, y, wt, 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.WriteLine(" {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("** g02gc failed with ifail = {0,5}", ifail);
          }
        }
        // 
      }
      catch (Exception e)
      {
        Console.WriteLine(e.Message);
        Console.Write( "Exception Raised");
      }
    }
  }
}


関連情報
© 日本ニューメリカルアルゴリズムズグループ株式会社 2025
Privacy Policy  /  Trademarks