MultipleLinearRegressionExample.cs (.NET, C#, CSharp)

[TOC]

using System;
using System.IO;

using CenterSpace.NMath.Core;
using CenterSpace.NMath.Stats;


namespace CenterSpace.NMath.Stats.Examples.CSharp
{
  /// 
  /// A .NET example in C# showing how to perform multiple linear regression.
  /// 
  class MultipleLinearRegressionExample
  {

    static void Main(string[] args)
    {
      string filename = "..\\..\\MultipleLinearRegressionExample.dat";
      StreamReader dataStream;
      try
      {
        dataStream = new StreamReader(filename);
      }
      catch (FileNotFoundException e)
      {
        string msg = string.Format("Could not find data file {0}.", filename);
        msg += Environment.NewLine;
        msg += e.Message;
        msg += Environment.NewLine;
        msg += "Data file must have the same name as the example source ";
        msg += Environment.NewLine;
        msg += "file and be located two directories up from where the ";
        msg += Environment.NewLine;
        msg += "executable is running.";
        Console.WriteLine(msg);
        return;
      }

      // First read in the independent (or predictor) values. This is a matrix
      // with one column and a row for each amounts measurement.
      DoubleMatrix longLatValues = new DoubleMatrix(dataStream);

      // Next, read in the resposnes. These are the readings of the gas 
      // chromatograph
      DoubleVector janTemp = new DoubleVector(dataStream);

      // Print out the amounts and responses values.
      Console.WriteLine();
      Console.WriteLine("Longitudes and latitudes = {0}", longLatValues);
      Console.WriteLine();
      Console.WriteLine("January temperatures = {0}", janTemp);
      Console.WriteLine();

      LinearRegression regression = new LinearRegression(longLatValues, janTemp, true);
      LinearRegressionAnova regressionAnova = new LinearRegressionAnova(regression);

      DataFrame regressionStats = new DataFrame();
      regressionStats.RowKeyHeader = "Source      ";
      regressionStats.AddColumn(new DFNumericColumn("Sum of Squares"));
      DFIntColumn dfCol = new DFIntColumn("df");
      regressionStats.AddColumn(dfCol);
      regressionStats.AddColumn(new DFNumericColumn("Mean Square"));
      regressionStats.AddColumn(new DFNumericColumn("F-ratio"));

      regressionStats.AddRow("Regression", regressionAnova.RegressionSumOfSquares,
                                            regressionAnova.ModelDegreesOfFreedom,
                                            regressionAnova.MeanSquaredRegression,
                                            regressionAnova.FStatistic);

      regressionStats.AddRow("Residual", regressionAnova.ResidualSumOfSquares,
                                          regressionAnova.ErrorDegreesOfFreedom,
                                          regressionAnova.MeanSquaredResidual,
                                          Double.NaN);

      Console.WriteLine("Dependent Variable is:       January Temp");
      Console.WriteLine();
      Console.WriteLine("{0} total cases", regression.NumberOfObservations);
      Console.WriteLine();
      Console.WriteLine("R squared = {0}%,  R squared (adjusted) = {1}%",
                         regressionAnova.RSquared * 100, regressionAnova.AdjustedRsquared * 100);
      Console.WriteLine("s = {0} with {1} degrees of freedom", System.Math.Sqrt(regression.Variance),
                          regression.NumberOfObservations - regression.NumberOfParameters);
      Console.WriteLine();
      Console.WriteLine(regressionStats);

      Console.WriteLine();
      Console.WriteLine("Press Enter Key");
      Console.Read();

    }  // Main

  }  // class

}  // namespace


[TOC]