C#による 重回帰分析

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

Keyword: 重回帰分析

概要

本サンプルは重回帰分析を行うC#によるサンプルプログラムです。 本サンプルは以下に示される独立変数の観測値と従属変数の観測値を用いて重回帰分析を行い、例1については独立変数の偏回帰係数のパラメータ推定と標準誤差、観測値の残差と対角要素のてこ値を出力します。例2については以下の多項式で切片を含む場合と原点を通る場合の偏回帰係数の最小二乗推定値と標準誤差を出力しています。

重回帰のデータ 

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

入力データ

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

このデータをダウンロード
g02da Example Program Data
 12 4 'U' 'M'
1.0 0.0 0.0 0.0 33.63
0.0 0.0 0.0 1.0 39.62
0.0 1.0 0.0 0.0 38.18
0.0 0.0 1.0 0.0 41.46
0.0 0.0 0.0 1.0 38.02
0.0 1.0 0.0 0.0 35.83
0.0 0.0 0.0 1.0 35.99
1.0 0.0 0.0 0.0 36.58
0.0 0.0 1.0 0.0 42.92
1.0 0.0 0.0 0.0 37.80
0.0 0.0 1.0 0.0 40.43
0.0 1.0 0.0 0.0 37.89
 1   1   1   1 

  • 1行目はタイトル行で読み飛ばされます。
  • 2行目に観測値の数(n)、独立変数の数(m)、重みづけをするかどうかを示すパラメータ(weight)、切片を含むかどうかを示すパラメータ(mean)を指定しています。"U" は重みづけしないことを意味し、"M" は回帰モデルに切片が含まれることを意味します。
  • 3〜14行目には左から縦1列から縦4列までに独立変数の観測値を、最後の列に従属変数の観測値を配列(x)に指定しています。
  • 15行目にどの独立変数がモデルに含まれるかを示すフラグ(isx)を指定しています。

出力結果

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

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

  Model not of full rank, rank =    4 
  Residual sum of squares =  2.2227e+001
  Degrees of freedom =    8

 Variable   Parameter estimate    Standard error

       1         3.0557e+001         3.8494e-001
       2         5.4467e+000         8.3896e-001
       3         6.7433e+000         8.3896e-001
       4         1.1047e+001         8.3896e-001
       5         7.3200e+000         8.3896e-001

    Obs          Residuals              H 
       1        -2.3733e+000         3.3333e-001
       2         1.7433e+000         3.3333e-001
       3         8.8000e-001         3.3333e-001
       4        -1.4333e-001         3.3333e-001
       5         1.4333e-001         3.3333e-001
       6        -1.4700e+000         3.3333e-001
       7        -1.8867e+000         3.3333e-001
       8         5.7667e-001         3.3333e-001
       9         1.3167e+000         3.3333e-001
      10         1.7967e+000         3.3333e-001
      11        -1.1733e+000         3.3333e-001
      12         5.9000e-001         3.3333e-001

  • 4行目に回帰モデルのランクが出力されています。
  • 5行目に残差平方和が出力されています。
  • 6行目に自由度が出力されています。
  • 9〜13行目に各変数のパラメータ推定(偏回帰係数)と標準誤差が出力されています。
  • 15〜27行目に各観測値の残差と対角要素のてこ値が出力されています。

ソースコード

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

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


このソースコードをダウンロード
//      g02da Example Program Text
//      C# version, nAG Copyright 2008
using System;
using NagLibrary;
using System.IO;
namespace NagDotNetExamples
{
  public class G02DAE
  {
    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/g02dae.d");
        }
        else
        {
          sr = new DataReader(datafile);
        }
        double rss,    tol;  int i,  idf,  ip,  irank,  j,  m,  n;
        bool svd = false;
        string mean = "",
        weight = "";
        int ifail;
        Console.WriteLine("g02da Example Program Results");
        //      Skip heading in data file
        sr.Reset();
        sr.Reset();
        n = int.Parse(sr.Next());
        m = int.Parse(sr.Next());
        weight = sr.Next();
        mean = sr.Next();
        Console.WriteLine(" ");
        double[] h = new double[n];
        double[] res = 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());
              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;
          if ((mean == "M") || (mean == "m"))
          {
            ip = ip + 1;
          }
          for (i = 1; i <= m; i++)
          {
            if (isx[i - 1] > 0)
            {
              ip = ip + 1;
            }
          }
          //         Set tolerance
          tol = 0.000010e0;
          // 
          double[] b = new double[ip];
          double[] cov = new double[(ip * ip + ip) / 2];
          double[] p = new double[ip * (ip + 2)];
          double[,] q = new double[n, ip + 1];
          double[] se = new double[ip];
          double[] wk = new double[ip*ip + 5*(ip - 1)];
          G02.g02da(mean, weight, n, x, m, isx, ip, y, wt, out rss, out idf, b, se, cov, res, h, q,
          out svd, out irank, p, tol, wk, out ifail);
          // 
          if (ifail == 0)
          {
            // 
            if (svd)
            {
              Console.Write("  {0}{1,4}", "Model not of full rank, rank = ", irank);
              Console.WriteLine(" ");
            }
            Console.WriteLine("  {0}{1,12:e4}", "Residual sum of squares = ", rss);
            Console.WriteLine("  {0}{1,4}", "Degrees of freedom = ", idf);
            Console.WriteLine(" ");
            Console.WriteLine(" {0} {1}", "Variable   Parameter estimate   ", "Standard error");
            Console.WriteLine(" ");
            for (j = 1; j <= ip; j++)
            {
              Console.WriteLine("  {0,6}{1,20:e4}{2,20:e4}", j, b[j - 1], se[j - 1]);
            }
            Console.WriteLine(" ");
            Console.Write(" {0}", "   Obs          Residuals              H");
            Console.WriteLine(" ");
            for (i = 1; i <= n; i++)
            {
              Console.WriteLine("  {0,6}{1,20:e4}{2,20:e4}", i, res[i - 1], h[i - 1]);
            }
          }
          else
          {
            Console.WriteLine(" ");
            Console.WriteLine("** g02da failed with ifail = {0,5}", ifail);
          }
        }
        // 
      }
      catch (Exception e)
      {
        Console.WriteLine(e.Message);
        Console.Write( "Exception Raised");
      }
    }
  }
}


関連情報
Privacy Policy  /  Trademarks