using System; using System.IO; using CenterSpace.NMath.Core; namespace CenterSpace.NMath.Examples.CSharp { /// <summary> /// A .NET example in C# showing how to use the linear regression class to perform a simple /// linear regression. /// </summary> /// <remarks>A simple linear regression fits a straight line through a series /// of data points. Specifically, the points <c>(x,y)</c> are assumed to /// conform to the equation <c>y = mx + b</c>. A simple linear regression uses /// a least squares fit to compute the slope, <c>m</c>, and the y-intercept, <c>b</c>. /// </remarks> class SimpleLinearRegressionExample { static void Main( string[] args ) { // Read in data from the file. The data comes from The Data and Story // Library (http://lib.stat.cmu.edu/DASL) and is described below: // // Results of a study of gas chromatography, a technique which is used // to detect very small amounts of a substance. Five measurements were // taken for each of four specimens containing different amounts of the // substance. The amounts of the substance in each specimen was determined // before the experiment. The responses variable is the output reading // from the gas chromatograph. The purpose of the study is to calibrate // the chromatograph by relating the actual amounts of the substance to // the chromatograph reading. StreamReader dataStream = new StreamReader( "SimpleLinearRegressionExample.dat" ); // First read in the independent (or predictor) values. This is a matrix // with one column and a row for each amounts measurement. var amounts = new DoubleMatrix( dataStream ); // Next, read in the responses. These are the readings of the gas // chromatograph var responses = new DoubleVector( dataStream ); // Print out the amounts and responses values. Console.WriteLine(); Console.WriteLine( "amounts = {0}", amounts ); Console.WriteLine( "responses = {0}", responses ); // Construct a linear regression. If we want our regression to calculate a // y-intercept we must send in true for the "addIntercept" parameter (the // third parameter in the constructor). var regression = new LinearRegression( amounts, responses, true ); // The y-intercept is the first element of the parameter array returned by // the regression, and the slope is the second. Console.WriteLine( "y-intercept = {0}", regression.Parameters[0] ); Console.WriteLine( "Slope = {0}", regression.Parameters[1] ); // What would the model predict for the chromatograph reading for an // input amounts of 0.75 and 1.25? var amount = new DoubleVector( 0.75 ); double predictedReading = regression.PredictedObservation( amount ); Console.WriteLine( "Predicted reading for amount {0} is {1}", amount[0], predictedReading ); amount[0] = 1.25; predictedReading = regression.PredictedObservation( amount ); Console.WriteLine( "Predicted reading for amount {0} is {1}", amount[0], predictedReading ); // Lets look at the coefficient of determination for the model - Rsquared. // To do this we will need to construct an Analysis Of VAriance object for // the regression. var regressionAnova = new LinearRegressionAnova( regression ); Console.WriteLine( "Rsquare = {0}", regressionAnova.RSquared ); Console.WriteLine(); Console.WriteLine( "Press Enter Key" ); Console.Read(); } // Main } // class } // namespace← All NMath Code Examples