public void prediction_test() { // example data from http://www.real-statistics.com/regression/confidence-and-prediction-intervals/ double[][] input = { new double[] { 5, 80 }, new double[] { 23, 78 }, new double[] { 25, 60 }, new double[] { 48, 53 }, new double[] { 17, 85 }, new double[] { 8, 84 }, new double[] { 4, 73 }, new double[] { 26, 79 }, new double[] { 11, 81 }, new double[] { 19, 75 }, new double[] { 14, 68 }, new double[] { 35, 72 }, new double[] { 29, 58 }, new double[] { 4, 92 }, new double[] { 23, 65 }, }; double[] cig = input.GetColumn(0); double[] exp = input.GetColumn(1); // Use Ordinary Least Squares to learn the regression OrdinaryLeastSquares ols = new OrdinaryLeastSquares(); // Use OLS to learn the simple linear regression SimpleLinearRegression regression = ols.Learn(cig, exp); Assert.AreEqual(1, regression.NumberOfInputs); Assert.AreEqual(1, regression.NumberOfOutputs); double x0 = 20; double y0 = regression.Transform(x0); Assert.AreEqual(y0, 73.1564, 1e-4); double syx = regression.GetStandardError(cig, exp); Assert.AreEqual(7.974682, syx, 1e-5); double ssx = cig.Subtract(cig.Mean()).Pow(2).Sum(); Assert.AreEqual(2171.6, ssx, 1e-5); double n = exp.Length; double x0c = x0 - cig.Mean(); double var = 1 / n + (x0c * x0c) / ssx; Assert.AreEqual(0.066832443052741455, var, 1e-10); double expected = syx * Math.Sqrt(var); double actual = regression.GetStandardError(x0, cig, exp); Assert.AreEqual(2.061612, expected, 1e-5); Assert.AreEqual(expected, actual, 1e-10); DoubleRange ci = regression.GetConfidenceInterval(x0, cig, exp); Assert.AreEqual(ci.Min, 68.702569616457751, 1e-5); Assert.AreEqual(ci.Max, 77.610256563931543, 1e-5); actual = regression.GetPredictionStandardError(x0, cig, exp); Assert.AreEqual(8.2368569010499666, actual, 1e-10); DoubleRange pi = regression.GetPredictionInterval(x0, cig, exp); Assert.AreEqual(pi.Min, 55.361765613397054, 1e-5); Assert.AreEqual(pi.Max, 90.95106056699224, 1e-5); }