コード例 #1
0
        private ScatterPointCollection CalculateResiduals()
        {
            var result = new List <ScatterplotPoint>();

            for (var categoryIndex = 0; categoryIndex < _points.GroupsCount; categoryIndex++)
            {
                var category       = _points.Groups[categoryIndex];
                var categoryPoints = _points.Where(x => Math.Abs(x.Group) == category).ToArray();

                var regression = new LinearRegressionBuilder(categoryPoints.Select(x => x.X).ToArray(), categoryPoints.Select(x => x.Y).ToArray()).Build();

                foreach (var categoryPoint in categoryPoints)
                {
                    var y = categoryPoint.Y - (regression.a0 + regression.a1 * categoryPoint.X);
                    result.Add(new ScatterplotPoint()
                    {
                        Group    = categoryPoint.Group,
                        Date     = categoryPoint.Date,
                        X        = categoryPoint.X,
                        Y        = y,
                        SubGroup = categoryPoint.SubGroup
                    });
                }
            }
            return(new ScatterPointCollection(result));
        }
コード例 #2
0
        private void DrawRegressionLine(ScatterplotPoint[] groupPoints, int groupIndex)
        {
            var regression = new LinearRegressionBuilder(groupPoints.Select(x => x.X).ToArray(), groupPoints.Select(x => x.Y).ToArray()).Build();

            var categoryCalculator = new ScatterplotCalculator(groupPoints);

            var x1 = CanvasCalculator.GetX(categoryCalculator.MinX);
            var y1 = CanvasCalculator.GetY(regression.a0 + regression.a1 * categoryCalculator.MinX);

            var x2 = CanvasCalculator.GetX(categoryCalculator.MaxX);
            var y2 = CanvasCalculator.GetY(regression.a0 + regression.a1 * categoryCalculator.MaxX);

            var vLine = new Line()
            {
                X1 = x1,
                X2 = x2,
                Y1 = y1,
                Y2 = y2,
                StrokeThickness = 2,
                Stroke          = new SolidColorBrush(new ColorPicker().Pick(groupIndex))
            };

            mainCanvas.Children.Add(vLine);

            DisplayResult(groupIndex, regression);
        }