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