<ProgramFilesX86>\Sho 2.1\bin\MathFunc.dll
<ProgramFilesX86>\Sho 2.1\bin\MatrixInterf.dll
<ProgramFilesX86>\Sho 2.1\bin\ShoArray.dll
<ProgramFilesX86>\Sho 2.1\bin\ShoViz.dll
<RuntimeDirectory>\System.Windows.Forms.dll
MathNet.Numerics
ShoNS.Visualization
System.Drawing
MathNet.Numerics.LinearRegression
MathNet.Numerics
void Main()
{
var dates = Enumerable.Range(-7, 7).Select(daysInThePast => DateTime.Now.Date.AddDays(daysInThePast));
var values = new double[] { 1000, 800, 700, 600, 500, 400, 300 };
CreateRegressionGraph(dates, values);
}
private void CreateRegressionGraph(IEnumerable dates, IEnumerable values)
{
var xdata = dates.ToList();
var ydata = values.ToList();
// Find the date that we run out regression.
var regression = Fit.Line(ydata.ToArray(), dates.Select(d => (double)d.Ticks).ToArray());
var runout = new DateTime((long)regression.Item1);
runout.Dump();
// Draw a graph of it.
regression = Fit.Line(dates.Select(d => (double)d.Ticks).ToArray(), ydata.ToArray());
var intercept = regression.Item1;
var slope = regression.Item2;
// The actual data.
var rangeA_X = xdata.ToArray();
var rangeA_Y = ydata.ToArray();
// The regression data.
var rangeB_X = xdata.Concat(new DateTime[] { runout }).ToArray();
//var rangeB_Y = ydata.Concat(new double[] { 0 }).ToArray();
var rangeB_Y = rangeB_X.Select(d => (double)d.Ticks).Select(x => intercept + slope * x).ToArray();
// Display a chart.
var chart = new ShoChart()
{
Title = "Disk Space",
HasLegend = true,
};
// Swap x and y so that the slope is downwards to zero.
chart.AddSeries(rangeA_X, rangeA_Y);
chart.SeriesNames[0] = "Actual Samples";
chart.AddSeries(rangeB_X, rangeB_Y);
chart.SeriesNames[1] = "Prediction " + runout.ToString("yyyy-MM-dd");
chart.Dump();
}