[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]